void (@NotNull Graphics g, int shiftX, int shiftY, int lineHeight, boolean isHovered, @NotNull EditorColorsScheme scheme) { int step = getStepSize(lineHeight); int height = getHeight(lineHeight); Color color = getWaveColor(scheme); Rectangle clip = g.getClipBounds(); if (clip.width <= 0) return; int startX = clip.x - shiftX; int endX = startX + clip.width; int startIndex = startX / step - 4; int endIndex = endX / step + 1; Graphics2D gg = (Graphics2D)g.create(); gg.translate(shiftX, shiftY + getVerticalOffset(lineHeight)); BufferedImage image = createImage(gg, color, isHovered, step, height); gg.setComposite(AlphaComposite.SrcOver); for (int index = startIndex; index < endIndex; index++) { if (index % 4 == 0) { UIUtil.drawImage(gg, image, index * step, 0, null); } } gg.dispose(); }