void (Graphics g) { GraphicsConfig config = new GraphicsConfig(g); config.setupAAPainting(); Rectangle rect = getVisibleRect(); int firstVisibleRow = getClosestRowForLocation(rect.x, rect.y); int lastVisibleRow = getClosestRowForLocation(rect.x, rect.y + rect.height); Color prevColor = firstVisibleRow == 0 ? null : getFileColorForRow(firstVisibleRow - 1); Color curColor = getFileColorForRow(firstVisibleRow); Color nextColor = firstVisibleRow + 1 < getRowCount() ? getFileColorForRow(firstVisibleRow + 1) : null; for (int row = firstVisibleRow; row <= lastVisibleRow; row++) { nextColor = row + 1 < getRowCount() ? getFileColorForRow(row + 1) : null; if (curColor != null) { Rectangle bounds = getRowBounds(row); double x = JBUI.scale(4); double y = bounds.y; double w = JBUI.scale(4); double h = bounds.height; if (Registry.is("ide.file.colors.at.left")) { g.setColor(curColor); if (curColor.equals(prevColor) && curColor.equals(nextColor)) { RectanglePainter2D.FILL.paint((Graphics2D)g, x, y, w, h); } else if (!curColor.equals(prevColor) && !curColor.equals(nextColor)) { RectanglePainter2D.FILL.paint((Graphics2D)g, x, y + 2, w, h - 4, w); } else if (curColor.equals(prevColor)) { RectanglePainter2D.FILL.paint((Graphics2D)g, x, y - w, w, h + w - 2, w); } else { RectanglePainter2D.FILL.paint((Graphics2D)g, x, y + 2, w, h + w, w); } } else { g.setColor(curColor); g.fillRect(0, bounds.y, getWidth(), bounds.height); } } prevColor = curColor; curColor = nextColor; } config.restore(); }