package fr.adrienbrault.idea.symfony2plugin.codeInsight.caret.overlay.component; import com.intellij.lang.Language; import com.intellij.lang.xml.XMLLanguage; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.XmlHighlighterColors; import com.intellij.openapi.editor.colors.EditorFontType; import com.intellij.openapi.util.text.StringUtil; import com.jetbrains.php.lang.PhpLanguage; import com.jetbrains.php.lang.highlighter.PhpHighlightingData; import org.jetbrains.annotations.NotNull; import org.jetbrains.yaml.YAMLHighlighter; import org.jetbrains.yaml.YAMLLanguage; import javax.swing.*; import java.awt.*; /** * @author Daniel Espendiller <daniel@espendiller.net> */ public class CaretOverlayComponent extends JComponent { private final Editor editor; private final String content; private final int offset; private final Language language; private int horizontalMargin = 20; public CaretOverlayComponent(@NotNull Editor editor, @NotNull String content, int offset, @NotNull Language language) { this.editor = editor; this.content = content; this.offset = offset; this.language = language; } @Override protected void paintComponent(Graphics g) { if(language == XMLLanguage.INSTANCE) { g.setColor( editor.getColorsScheme().getAttributes(XmlHighlighterColors.XML_COMMENT).getForegroundColor() ); } else if(language == YAMLLanguage.INSTANCE) { g.setColor( editor.getColorsScheme().getAttributes(YAMLHighlighter.COMMENT).getForegroundColor() ); } else if(language == PhpLanguage.INSTANCE) { g.setColor( editor.getColorsScheme().getAttributes(PhpHighlightingData.COMMENT).getForegroundColor() ); } g.setFont(editor.getColorsScheme().getFont(EditorFontType.CONSOLE_ITALIC)); int verticalAlignment = editor.getLineHeight() - editor.getColorsScheme().getEditorFontSize(); int offset = editor.getDocument().getLineEndOffset(StringUtil.offsetToLineNumber(editor.getDocument().getCharsSequence(), this.offset)); Point point = editor.visualPositionToXY(editor.offsetToVisualPosition(offset)); g.drawString(content, point.x + horizontalMargin, point.y + editor.getLineHeight() - verticalAlignment); } }