From 19aabfcbe3acd815791c7ab5142f6b09c80422eb Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Thu, 3 Oct 2019 15:16:15 +0300 Subject: [PATCH] expose EditorImpl's getAscent() method in Editor interface GitOrigin-RevId: a75822a2367a2d82623df60f9375804875e08efa --- .../src/com/intellij/openapi/editor/Editor.java | 11 +++++++++++ .../codeInsight/intention/impl/config/LazyEditor.java | 5 +++++ .../codeInsight/lookup/impl/LookupPreview.java | 2 +- .../impl/source/tree/injected/EditorWindowImpl.java | 5 +++++ .../com/intellij/openapi/editor/impl/EditorImpl.java | 1 + .../intellij/xdebugger/impl/XDebuggerInlayUtil.java | 3 +-- 6 files changed, 24 insertions(+), 3 deletions(-) diff --git a/platform/editor-ui-api/src/com/intellij/openapi/editor/Editor.java b/platform/editor-ui-api/src/com/intellij/openapi/editor/Editor.java index 88a6a40ab965..24ee9899d1b5 100644 --- a/platform/editor-ui-api/src/com/intellij/openapi/editor/Editor.java +++ b/platform/editor-ui-api/src/com/intellij/openapi/editor/Editor.java @@ -4,6 +4,7 @@ package com.intellij.openapi.editor; import com.intellij.openapi.Disposable; import com.intellij.openapi.actionSystem.DataProvider; import com.intellij.openapi.editor.colors.EditorColorsScheme; +import com.intellij.openapi.editor.colors.EditorFontType; import com.intellij.openapi.editor.event.EditorMouseEventArea; import com.intellij.openapi.editor.event.EditorMouseListener; import com.intellij.openapi.editor.event.EditorMouseMotionListener; @@ -444,4 +445,14 @@ public interface Editor extends UserDataHolder { @NotNull EditorKind getEditorKind(); + + /** + * Vertical distance, in pixels, between the top of visual line (corresponding coordinate is returned by {@link #visualLineToY(int)}, + * {@link #visualPositionToXY(VisualPosition)}, etc) and baseline of text in that visual line. + */ + default int getAscent() { + // actual implementation in EditorImpl is a bit more complex, but this gives an idea how it's constructed + return (int)(getContentComponent().getFontMetrics(getColorsScheme().getFont(EditorFontType.PLAIN)).getAscent() * + getColorsScheme().getLineSpacing()); + } } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/config/LazyEditor.java b/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/config/LazyEditor.java index ce7df4e55b7b..a12e76154c19 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/config/LazyEditor.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/config/LazyEditor.java @@ -304,4 +304,9 @@ class LazyEditor extends UserDataHolderBase implements Editor { public IndentsModel getIndentsModel() { return getEditor().getIndentsModel(); } + + @Override + public int getAscent() { + return getEditor().getAscent(); + } } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupPreview.java b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupPreview.java index 4603a5d4d92e..335c9b5e776e 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupPreview.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupPreview.java @@ -98,7 +98,7 @@ class LookupPreview { Editor editor = inlay.getEditor(); g.setColor(JBColor.GRAY); g.setFont(getFont(editor)); - g.drawString(suffix, r.x, r.y + ((EditorImpl)editor).getAscent()); + g.drawString(suffix, r.x, r.y + editor.getAscent()); } private Font getFont(@NotNull Editor editor) { diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/EditorWindowImpl.java b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/EditorWindowImpl.java index d6765d93f6b6..4b73d559dbfc 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/EditorWindowImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/EditorWindowImpl.java @@ -905,4 +905,9 @@ class EditorWindowImpl extends com.intellij.injected.editor.EditorWindowImpl imp public void setCustomCursor(@NotNull Object requestor, @Nullable Cursor cursor) { myDelegate.setCustomCursor(requestor, cursor); } + + @Override + public int getAscent() { + return myDelegate.getAscent(); + } } 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 ec0f79d392ee..3b94ca0f2b8b 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 @@ -2063,6 +2063,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi return myCaretCursor.getCaretLocations(onlyIfShown); } + @Override public int getAscent() { return myView.getAscent(); } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerInlayUtil.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerInlayUtil.java index 1008f2db7721..1b918153975f 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerInlayUtil.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerInlayUtil.java @@ -7,7 +7,6 @@ import com.intellij.openapi.editor.Inlay; import com.intellij.openapi.editor.colors.EditorColorsScheme; import com.intellij.openapi.editor.colors.FontPreferences; import com.intellij.openapi.editor.impl.ComplementaryFontsRegistry; -import com.intellij.openapi.editor.impl.EditorImpl; import com.intellij.openapi.editor.impl.FontInfo; import com.intellij.openapi.editor.markup.TextAttributes; import com.intellij.openapi.fileEditor.FileEditor; @@ -145,7 +144,7 @@ public class XDebuggerInlayUtil { int xEnd = editor.offsetToXY(value.refEndOffset, false, true).x; int width = g.getFontMetrics().stringWidth(value.value); curX = Math.max(curX, (xStart + xEnd - width) / 2); - g.drawString(value.value, curX, targetRegion.y + ((EditorImpl)editor).getAscent()); + g.drawString(value.value, curX, targetRegion.y + editor.getAscent()); g.drawLine(Math.min(xEnd, Math.max(xStart, curX + width / 2)), targetRegion.y, curX + width / 2, targetRegion.y + 2); g.drawLine(curX, targetRegion.y + 2, curX + width, targetRegion.y + 2); curX += width;