From 73285eb9c4f940ddebf1658816374796d0cffa3f Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Tue, 21 Apr 2015 04:21:18 +0300 Subject: [PATCH] Frame and editor background images: paint caret as sharp as text --- .../com/intellij/openapi/editor/impl/EditorImpl.java | 10 ++++++---- .../openapi/editor/impl/view/EditorPainter.java | 9 +++++++-- .../intellij/openapi/wm/impl/IdeBackgroundUtil.java | 5 +++++ 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java index 0384012b6011..710fcb945c8f 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java @@ -69,6 +69,7 @@ import com.intellij.openapi.wm.IdeFocusManager; import com.intellij.openapi.wm.IdeGlassPane; import com.intellij.openapi.wm.ToolWindowAnchor; import com.intellij.openapi.wm.ex.ToolWindowManagerEx; +import com.intellij.openapi.wm.impl.IdeBackgroundUtil; import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiFile; import com.intellij.psi.codeStyle.CodeStyleSettingsManager; @@ -4719,21 +4720,22 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi g.setColor(myScheme.getColor(EditorColors.CARET_COLOR)); + Graphics2D originalG = IdeBackgroundUtil.getOriginalGraphics(g); if (!paintBlockCaret()) { if (UIUtil.isRetina()) { - g.fillRect(x, y, mySettings.getLineCursorWidth(), lineHeight); - } else { + originalG.fillRect(x, y, mySettings.getLineCursorWidth(), lineHeight); + } + else { for (int i = 0; i < mySettings.getLineCursorWidth(); i++) { UIUtil.drawLine(g, x + i, y, x + i, y + lineHeight - 1); } } - } else { Color caretColor = myScheme.getColor(EditorColors.CARET_COLOR); if (caretColor == null) caretColor = new JBColor(Gray._0, Gray._255); g.setColor(caretColor); - g.fillRect(x, y, width, lineHeight - 1); + originalG.fillRect(x, y, width, lineHeight - 1); final LogicalPosition startPosition = caret == null ? getCaretModel().getLogicalPosition() : caret.getLogicalPosition(); final int offset = logicalPositionToOffset(startPosition); CharSequence chars = myDocument.getImmutableCharSequence(); diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/EditorPainter.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/EditorPainter.java index 0ced04a36a4e..d3324c92d5da 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/EditorPainter.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/EditorPainter.java @@ -25,12 +25,16 @@ import com.intellij.openapi.editor.ex.MarkupModelEx; import com.intellij.openapi.editor.ex.RangeHighlighterEx; import com.intellij.openapi.editor.highlighter.EditorHighlighter; import com.intellij.openapi.editor.highlighter.HighlighterIterator; -import com.intellij.openapi.editor.impl.*; +import com.intellij.openapi.editor.impl.DocumentMarkupModel; +import com.intellij.openapi.editor.impl.EditorComponentImpl; +import com.intellij.openapi.editor.impl.EditorImpl; +import com.intellij.openapi.editor.impl.IterationState2; import com.intellij.openapi.editor.markup.*; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.TextRange; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.openapi.wm.impl.IdeBackgroundUtil; import com.intellij.ui.Gray; import com.intellij.ui.JBColor; import com.intellij.util.Processor; @@ -619,7 +623,8 @@ class EditorPainter { } } - private void paintCaretAt(Graphics2D g, int x, int y, int width) { + private void paintCaretAt(Graphics2D g_, int x, int y, int width) { + Graphics2D g = IdeBackgroundUtil.getOriginalGraphics(g_); Rectangle viewRectangle = myEditor.getScrollingModel().getVisibleArea(); if (x - viewRectangle.x < 0) { return; diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeBackgroundUtil.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeBackgroundUtil.java index 69b1927822b5..021e7e76a3eb 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeBackgroundUtil.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeBackgroundUtil.java @@ -42,6 +42,11 @@ public class IdeBackgroundUtil { return withNamedPainters(g, "ide", component); } + @NotNull + public static Graphics2D getOriginalGraphics(@NotNull Graphics g) { + return g instanceof MyGraphics? ((MyGraphics)g).getDelegate() : (Graphics2D)g; + } + @NotNull public static Graphics2D withNamedPainters(@NotNull Graphics g, @NotNull String paintersName, @NotNull final JComponent component) { JRootPane rootPane = component.getRootPane();