From 3f7bdd0626f3e26b286e938a696bdbafaf27d9b7 Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Thu, 27 Nov 2014 19:14:05 +0300 Subject: [PATCH] paint line numbers with line highlighter foreground color --- .../impl/EditorGutterComponentImpl.java | 31 ++++++++++++++----- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java index a30ec2538a93..2f8a423305f9 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java @@ -100,6 +100,7 @@ class EditorGutterComponentImpl extends EditorGutterComponentEx implements Mouse private String myLastGutterToolTip = null; @NotNull private TIntFunction myLineNumberConvertor; private boolean myShowDefaultGutterPopup = true; + private Map myTextFgColors = new HashMap(); @SuppressWarnings("unchecked") public EditorGutterComponentImpl(EditorImpl editor) { @@ -208,7 +209,7 @@ class EditorGutterComponentImpl extends EditorGutterComponentEx implements Mouse paintFoldingBackground(g, clip); paintLineMarkersBackground(g, clip); paintBackground(g, clip, getLineMarkerAreaOffset(), getLineMarkerAreaWidth()); - paintEditorBackgrounds(g, clip, firstVisibleOffset, lastVisibleOffset); + paintEditorBackgrounds(g, firstVisibleOffset, lastVisibleOffset); paintAnnotations(g, clip); paintLineMarkers(g, firstVisibleOffset, lastVisibleOffset); paintFoldingLines((Graphics2D)g, clip); @@ -226,8 +227,10 @@ class EditorGutterComponentImpl extends EditorGutterComponentEx implements Mouse } } - private void paintEditorBackgrounds(Graphics g, Rectangle clip, int firstVisibleOffset, int lastVisibleOffset) { + private void paintEditorBackgrounds(Graphics g, int firstVisibleOffset, int lastVisibleOffset) { + myTextFgColors.clear(); Color defaultBackgroundColor = myEditor.getBackgroundColor(); + Color defaultForegroundColor = myEditor.getColorsScheme().getDefaultForeground(); int startX = myEditor.isInDistractionFreeMode() ? 0 : getWhitespaceSeparatorOffset() + (isFoldingOutlineShown() ? 1 : 0); IterationState state = new IterationState(myEditor, firstVisibleOffset, lastVisibleOffset, false, true); while (!state.atEnd()) { @@ -236,20 +239,30 @@ class EditorGutterComponentImpl extends EditorGutterComponentEx implements Mouse for (int line = visualStart.getLine(); line <= visualEnd.getLine(); line++) { if (line == visualStart.getLine()) { if (visualStart.getColumn() == 0) { - drawEditorLineBackgroundRect(g, clip, state, defaultBackgroundColor, startX, myEditor.visibleLineToY(line)); + drawEditorLineBackgroundRect(g, state, defaultBackgroundColor, defaultForegroundColor, startX, myEditor.visibleLineToY(line)); } } else if (line != visualEnd.getLine() || visualEnd.getColumn() != 0) { - drawEditorLineBackgroundRect(g, clip, state, defaultBackgroundColor, startX, myEditor.visibleLineToY(line)); + drawEditorLineBackgroundRect(g, state, defaultBackgroundColor, defaultForegroundColor, startX, myEditor.visibleLineToY(line)); } } state.advance(); } } - private void drawEditorLineBackgroundRect(Graphics g, Rectangle clip, IterationState state, Color defaultBackgroundColor, int startX, int startY) { - Color color = myEditor.getBackgroundColor(state.getMergedAttributes()); + private void drawEditorLineBackgroundRect(Graphics g, + IterationState state, + Color defaultBackgroundColor, + Color defaultForegroundColor, + int startX, + int startY) { + TextAttributes attributes = state.getMergedAttributes(); + Color color = myEditor.getBackgroundColor(attributes); if (!color.equals(defaultBackgroundColor)) { + Color fgColor = attributes.getForegroundColor(); + if (!fgColor.equals(defaultForegroundColor)) { + myTextFgColors.put(startY, fgColor); + } g.setColor(color); g.fillRect(startX, startY, getWidth() - startX, myEditor.getLineHeight()); } @@ -418,7 +431,6 @@ class EditorGutterComponentImpl extends EditorGutterComponentEx implements Mouse } Color color = myEditor.getColorsScheme().getColor(EditorColors.LINE_NUMBERS_COLOR); - g.setColor(color != null ? color : JBColor.blue); g.setFont(myEditor.getColorsScheme().getFont(EditorFontType.PLAIN)); Graphics2D g2 = (Graphics2D)g; @@ -439,11 +451,14 @@ class EditorGutterComponentImpl extends EditorGutterComponentEx implements Mouse int logLine = myLineNumberConvertor.execute(logicalPosition.line); if (logLine >= 0) { String s = String.valueOf(logLine + 1); + int startY = (i + 1) * lineHeight; + Color fgColor = myTextFgColors.get(startY - lineHeight); + g.setColor(fgColor != null ? fgColor : color != null ? color : JBColor.blue); g.drawString(s, getLineNumberAreaOffset() + getLineNumberAreaWidth() - myEditor.getFontMetrics(Font.PLAIN).stringWidth(s) - 4, - (i + 1) * lineHeight - myEditor.getDescent()); + startY - myEditor.getDescent()); } }