private static void draw(@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();
  }
private static void draw(@NotNull Graphics g,
                           int shiftX,
                           int shiftY,
                           int lineHeight,
                           boolean isHovered,
                           @NotNull EditorColorsScheme scheme)