@Override protected void tearDown() throws Exception { try { Registry.get("editor.new.rendering").setValue(false); FontLayoutService.setInstance(null); } finally { super.tearDown(); } }
@Override protected void tearDown() throws Exception { try { FontLayoutService.setInstance(null); } finally { super.tearDown(); } }
@Override protected void setUp() throws Exception { super.setUp(); FontLayoutService.setInstance(new MockFontLayoutService(10, 10, 2)); // char width matches the one in EditorTestUtil.configureSoftWraps }
@Override protected void tearDown() throws Exception { super.tearDown(); FontLayoutService.setInstance(null); }
@Override protected void setUp() throws Exception { super.setUp(); FontLayoutService.setInstance(new MockFontLayoutService(BitmapFont.CHAR_WIDTH, BitmapFont.CHAR_HEIGHT, BitmapFont.CHAR_DESCENT)); Registry.get("editor.new.rendering").setValue(true); }
@Override protected void setUp() throws Exception { super.setUp(); FontLayoutService.setInstance(new MockFontLayoutService(TEST_CHAR_WIDTH, TEST_LINE_HEIGHT, TEST_DESCENT)); }
public int charWidth(int codePoint) { final FontMetrics metrics = fontMetrics(); return FontLayoutService.getInstance().charWidth(metrics, codePoint); }
public float charWidth2D(int codePoint) { FontMetrics metrics = fontMetrics(); return FontLayoutService.getInstance().charWidth2D(metrics, codePoint); }
private void paintImmediately(final Graphics g, final int offset, final char c2) { final EditorImpl editor = myEditor; final Document document = editor.getDocument(); final LexerEditorHighlighter highlighter = (LexerEditorHighlighter)myEditor.getHighlighter(); final EditorSettings settings = editor.getSettings(); final boolean isBlockCursor = editor.isInsertMode() == settings.isBlockCursor(); final int lineHeight = editor.getLineHeight(); final int ascent = editor.getAscent(); final int topOverhang = editor.myView.getTopOverhang(); final int bottomOverhang = editor.myView.getBottomOverhang(); final char c1 = offset == 0 ? ' ' : document.getCharsSequence().charAt(offset - 1); final List<TextAttributes> attributes = highlighter.getAttributesForPreviousAndTypedChars(document, offset, c2); updateAttributes(editor, offset, attributes); final TextAttributes attributes1 = attributes.get(0); final TextAttributes attributes2 = attributes.get(1); if (!(canRender(attributes1) && canRender(attributes2))) { return; } FontLayoutService fontLayoutService = FontLayoutService.getInstance(); final float width1 = fontLayoutService.charWidth2D(editor.getFontMetrics(attributes1.getFontType()), c1); final float width2 = fontLayoutService.charWidth2D(editor.getFontMetrics(attributes2.getFontType()), c2); final Font font1 = EditorUtil.fontForChar(c1, attributes1.getFontType(), editor).getFont(); final Font font2 = EditorUtil.fontForChar(c1, attributes2.getFontType(), editor).getFont(); final Point2D p2 = editor.offsetToXY(offset, false); float p2x = (float)p2.getX(); int p2y = (int)p2.getY(); int width1i = (int)(p2x) - (int)(p2x - width1); int width2i = (int)(p2x + width2) - (int)p2x; Caret caret = editor.getCaretModel().getPrimaryCaret(); //noinspection ConstantConditions final int caretWidth = isBlockCursor ? editor.getCaretLocations(false)[0].myWidth : JBUI.scale(caret.getVisualAttributes().getWidth(settings.getLineCursorWidth())); final float caretShift = isBlockCursor ? 0 : caretWidth == 1 ? 0 : 1 / JBUI.sysScale((Graphics2D)g); final Rectangle2D caretRectangle = new Rectangle2D.Float((int)(p2x + width2) - caretShift, p2y - topOverhang, caretWidth, lineHeight + topOverhang + bottomOverhang + (isBlockCursor ? -1 : 0)); final Rectangle rectangle1 = new Rectangle((int)(p2x - width1), p2y, width1i, lineHeight); final Rectangle rectangle2 = new Rectangle((int)p2x, p2y, (int)(width2i + caretWidth - caretShift), lineHeight); final Consumer<Graphics> painter = graphics -> { EditorUIUtil.setupAntialiasing(graphics); fillRect(graphics, rectangle2, attributes2.getBackgroundColor()); drawChar(graphics, c2, p2x, p2y + ascent, font2, attributes2.getForegroundColor()); fillRect(graphics, caretRectangle, getCaretColor(editor)); fillRect(graphics, rectangle1, attributes1.getBackgroundColor()); drawChar(graphics, c1, p2x - width1, p2y + ascent, font1, attributes1.getForegroundColor()); }; final Shape originalClip = g.getClip(); g.setClip(new Rectangle2D.Float((int)p2x - caretShift, p2y, width2i + caretWidth, lineHeight)); if (DOUBLE_BUFFERING.asBoolean()) { paintWithDoubleBuffering(g, painter); } else { painter.consume(g); } g.setClip(originalClip); if (PIPELINE_FLUSH.asBoolean()) { Toolkit.getDefaultToolkit().sync(); } if (DEBUG.asBoolean()) { pause(); } }