Frame and editor background images: paint caret as sharp as text

This commit is contained in:
Gregory.Shrago
2015-04-21 04:21:18 +03:00
parent 574abbe599
commit 73285eb9c4
3 changed files with 18 additions and 6 deletions
@@ -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();
@@ -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;
@@ -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();