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 + -
显示快捷键?