Java 类com.intellij.openapi.editor.impl.view.FontLayoutService 实例源码

项目:intellij-ce-playground    文件:EditorPaintingTest.java   
@Override
protected void tearDown() throws Exception {
  try {
    Registry.get("editor.new.rendering").setValue(false);
    FontLayoutService.setInstance(null);
  }
  finally {
    super.tearDown();
  }
}
项目:consulo    文件:AbstractEditorTest.java   
@Override
protected void tearDown() throws Exception {
  try {
    FontLayoutService.setInstance(null);
  }
  finally {
    super.tearDown();
  }
}
项目:consulo-java    文件:AbstractEditorTest.java   
@Override
protected void tearDown() throws Exception
{
    try
    {
        FontLayoutService.setInstance(null);
    }
    finally
    {
        super.tearDown();
    }
}
项目:intellij-ce-playground    文件:AbstractEditorTest.java   
@Override
protected void setUp() throws Exception {
  super.setUp();
  FontLayoutService.setInstance(new MockFontLayoutService(10, 10, 2)); // char width matches the one in EditorTestUtil.configureSoftWraps
}
项目:intellij-ce-playground    文件:AbstractEditorTest.java   
@Override
protected void tearDown() throws Exception {
  super.tearDown();
  FontLayoutService.setInstance(null);
}
项目:intellij-ce-playground    文件:EditorPaintingTest.java   
@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);
}
项目:consulo    文件:AbstractEditorTest.java   
@Override
protected void setUp() throws Exception {
  super.setUp();
  FontLayoutService.setInstance(new MockFontLayoutService(TEST_CHAR_WIDTH, TEST_LINE_HEIGHT, TEST_DESCENT));
}
项目:consulo    文件:FontInfo.java   
public int charWidth(int codePoint) {
  final FontMetrics metrics = fontMetrics();
  return FontLayoutService.getInstance().charWidth(metrics, codePoint);
}
项目:consulo    文件:FontInfo.java   
public float charWidth2D(int codePoint) {
  FontMetrics metrics = fontMetrics();
  return FontLayoutService.getInstance().charWidth2D(metrics, codePoint);
}
项目:consulo    文件:ImmediatePainter.java   
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();
  }
}
项目:consulo-java    文件:AbstractEditorTest.java   
@Override
protected void setUp() throws Exception
{
    super.setUp();
    FontLayoutService.setInstance(new MockFontLayoutService(TEST_CHAR_WIDTH, TEST_LINE_HEIGHT, TEST_DESCENT));
}