textareapainter.java
来自「java写的多功能文件编辑器」· Java 代码 · 共 899 行 · 第 1/2 页
JAVA
899 行
/* * TextAreaPainter.java - Paints the text area * Copyright (C) 1999 Slava Pestov * Portions Copyright (C)2000-2001 Romain Guy * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */package org.gjt.sp.jedit.textarea;import javax.swing.ToolTipManager;import javax.swing.text.*;import javax.swing.JComponent;import java.awt.event.MouseEvent;import java.awt.*;import org.gjt.sp.jedit.syntax.*;/** * The text area repaint manager. It performs double buffering and paints * lines of text. * @author Slava Pestov * @version $Id: TextAreaPainter.java,v 1.9 2003/06/30 17:31:08 blaisorblade Exp $ */public class TextAreaPainter extends JComponent implements TabExpander{ public static RenderingHints ANTI_ALIASED_RENDERING = null; public static RenderingHints DEFAULT_RENDERING = null; private static void initRenderingings() { if (ANTI_ALIASED_RENDERING == null) { ANTI_ALIASED_RENDERING = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); ANTI_ALIASED_RENDERING.put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); ANTI_ALIASED_RENDERING.put(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); ANTI_ALIASED_RENDERING.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); } if (DEFAULT_RENDERING == null) { DEFAULT_RENDERING = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF); } } /** * Creates a new repaint manager. This should be not be called * directly. */ public TextAreaPainter(JEditTextArea textArea, TextAreaDefaults defaults) { initRenderingings(); this.textArea = textArea; setAutoscrolls(true); setDoubleBuffered(true); setOpaque(true); ToolTipManager.sharedInstance().registerComponent(this); setCursor(Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR)); setFont(new Font("Monospaced",Font.PLAIN, 12)); setForeground(Color.black); setBackground(Color.white); blockCaret = defaults.blockCaret; styles = defaults.styles; cols = defaults.cols; rows = defaults.rows; caretColor = defaults.caretColor; selectionColor = defaults.selectionColor; lineHighlightColor = defaults.lineHighlightColor; lineHighlight = defaults.lineHighlight; bracketHighlightColor = defaults.bracketHighlightColor; bracketHighlight = defaults.bracketHighlight; paintInvalid = defaults.paintInvalid; eolMarkerColor = defaults.eolMarkerColor; eolMarkers = defaults.eolMarkers; wrapGuide = defaults.wrapGuide; wrapGuideColor = defaults.wrapGuideColor; wrapGuideOffset = defaults.wrapGuideOffset; linesIntervalHighlight = defaults.linesIntervalHighlight; linesIntervalColor = defaults.linesIntervalColor; linesInterval = defaults.linesInterval; } /////////////////////////////////////////////////////////////////////////////// // ANTI ALIASING /////////////////////////////////////////////////////////////////////////////// private boolean antiAliasing = false; private boolean wasAntiAliasing = false; public boolean isAntiAliasingEnabled() { return antiAliasing; } public void setAntiAliasingEnabled(boolean on) { ///// TEMP FIX ///// wasAntiAliasing = antiAliasing; antiAliasing = on; ///// ////// antiAliasing = false; } private void setAntiAliasing(Graphics g) { if (antiAliasing) ((Graphics2D) g).setRenderingHints(ANTI_ALIASED_RENDERING); else if (wasAntiAliasing != antiAliasing) ((Graphics2D) g).setRenderingHints(DEFAULT_RENDERING); } /////////////////////////////////////////////////////////////////////////////// // WRAP GUIDE /////////////////////////////////////////////////////////////////////////////// private boolean wrapGuide; private Color wrapGuideColor; private int wrapGuideOffset; public void setWrapGuideEnabled(boolean enabled) { wrapGuide = enabled; } public void setWrapGuideOffset(int offset) { wrapGuideOffset = offset; } public void setWrapGuideColor(Color color) { wrapGuideColor = color; } /////////////////////////////////////////////////////////////////////////////// // INTERVAL HIGHLIGHTING /////////////////////////////////////////////////////////////////////////////// private boolean linesIntervalHighlight; private Color linesIntervalColor; private int linesInterval; public void setLinesIntervalHighlightEnabled(boolean enabled) { linesIntervalHighlight = enabled; } public void setLinesInterval(int offset) { linesInterval = offset; } public void setLinesIntervalHighlightColor(Color color) { linesIntervalColor = color; } /** * Returns if this component can be traversed by pressing the * Tab key. This returns false. */ public final boolean isManagingFocus() { return false; } /** * Returns the syntax styles used to paint colorized text. Entry <i>n</i> * will be used to paint tokens with id = <i>n</i>. * @see org.gjt.sp.jedit.syntax.Token */ public final SyntaxStyle[] getStyles() { return styles; } /** * Sets the syntax styles used to paint colorized text. Entry <i>n</i> * will be used to paint tokens with id = <i>n</i>. * @param styles The syntax styles * @see org.gjt.sp.jedit.syntax.Token */ public final void setStyles(SyntaxStyle[] styles) { this.styles = styles; repaint(); } /** * Returns the caret color. */ public final Color getCaretColor() { return caretColor; } /** * Sets the caret color. * @param caretColor The caret color */ public final void setCaretColor(Color caretColor) { this.caretColor = caretColor; invalidateSelectedLines(); } /** * Returns the selection color. */ public final Color getSelectionColor() { return selectionColor; } /** * Sets the selection color. * @param selectionColor The selection color */ public final void setSelectionColor(Color selectionColor) { this.selectionColor = selectionColor; invalidateSelectedLines(); } /** * Returns the highlight color. */ public final Color getHighlightColor() { return lineHighlightColor; } /** * Sets the highlight color. * @param highlightColor The highlight color */ public final void setHighlightColor(Color highlightColor) { this.highlightColor = highlightColor; repaint(); } /** * Returns the line highlight color. */ public final Color getLineHighlightColor() { return lineHighlightColor; } /** * Sets the line highlight color. * @param lineHighlightColor The line highlight color */ public final void setLineHighlightColor(Color lineHighlightColor) { this.lineHighlightColor = lineHighlightColor; invalidateSelectedLines(); } /** * Returns true if line highlight is enabled, false otherwise. */ public final boolean isLineHighlightEnabled() { return lineHighlight; } /** * Enables or disables current line highlighting. * @param lineHighlight True if current line highlight should be enabled, * false otherwise */ public final void setLineHighlightEnabled(boolean lineHighlight) { this.lineHighlight = lineHighlight; invalidateSelectedLines(); } /** * Returns the bracket highlight color. */ public final Color getBracketHighlightColor() { return bracketHighlightColor; } /** * Sets the bracket highlight color. * @param bracketHighlightColor The bracket highlight color */ public final void setBracketHighlightColor(Color bracketHighlightColor) { this.bracketHighlightColor = bracketHighlightColor; invalidateLine(textArea.getBracketLine()); } /** * Returns true if bracket highlighting is enabled, false otherwise. * When bracket highlighting is enabled, the bracket matching the * one before the caret (if any) is highlighted. */ public final boolean isBracketHighlightEnabled() { return bracketHighlight; } /** * Enables or disables bracket highlighting. * When bracket highlighting is enabled, the bracket matching the * one before the caret (if any) is highlighted. * @param bracketHighlight True if bracket highlighting should be * enabled, false otherwise */ public final void setBracketHighlightEnabled(boolean bracketHighlight) { this.bracketHighlight = bracketHighlight; invalidateLine(textArea.getBracketLine()); } /** * Returns true if the caret should be drawn as a block, false otherwise. */ public final boolean isBlockCaretEnabled() { return blockCaret; } /** * Sets if the caret should be drawn as a block, false otherwise. * @param blockCaret True if the caret should be drawn as a block, * false otherwise. */ public final void setBlockCaretEnabled(boolean blockCaret) { this.blockCaret = blockCaret; invalidateSelectedLines(); } /** * Returns the EOL marker color. */ public final Color getEOLMarkerColor() { return eolMarkerColor; } /** * Sets the EOL marker color. * @param eolMarkerColor The EOL marker color */ public final void setEOLMarkerColor(Color eolMarkerColor) { this.eolMarkerColor = eolMarkerColor; repaint(); } /** * Returns true if EOL markers are drawn, false otherwise. */ public final boolean getEOLMarkersPainted() { return eolMarkers; } /** * Sets if EOL markers are to be drawn. * @param eolMarkers True if EOL markers should be drawn, false otherwise */ public final void setEOLMarkersPainted(boolean eolMarkers) { this.eolMarkers = eolMarkers; repaint(); } /** * Returns true if invalid lines are painted as red tildes (~), * false otherwise. */ public boolean getInvalidLinesPainted() { return paintInvalid; } /** * Sets if invalid lines are to be painted as red tildes. * @param paintInvalid True if invalid lines should be drawn, false otherwise */ public void setInvalidLinesPainted(boolean paintInvalid) { this.paintInvalid = paintInvalid; } /** * Adds a custom highlight painter. * @param highlight The highlight */ public void addCustomHighlight(TextAreaHighlight highlight) { highlight.init(textArea, highlights); highlights = highlight; } /** * Adds a custom first priority highlight painter. * @param highlight The highlight */ public void addCustomFirstPriorityHighlight(TextAreaHighlight highlight) { highlight.init(textArea, firstPriorityHighlights); firstPriorityHighlights = highlight; } /** * Returns the tool tip to display at the specified location. * @param evt The mouse event */ public String getToolTipText(MouseEvent evt) { if (highlights != null) return highlights.getToolTipText(evt); else return null; }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?