View Javadoc

    1   /*
    2    * SyntaxStyle.java - A simple text style class
    3    * Copyright (C) 1999 Slava Pestov
    4    *
    5    * You may use and modify this package for any purpose. Redistribution is
    6    * permitted, in both source and binary form, provided that this notice
    7    * remains intact in all source distributions of this package.
    8    */
    9
    10  package org.syntax.jedit;
    11
    12  import java.awt.Color;
    13  import java.awt.Font;
    14  import java.awt.FontMetrics;
    15  import java.awt.Graphics;
    16  import java.awt.Toolkit;
    17
    18  /***
    19   * A simple text style class. It can specify the color, italic flag,
    20   * and bold flag of a run of text.
    21   * @author Slava Pestov
    22   * @version $Id$
    23   */
    24  public class SyntaxStyle
    25  {
    26  	/***
    27  	 * Creates a new SyntaxStyle.
    28  	 * @param color The text color
    29  	 * @param italic True if the text should be italics
    30  	 * @param bold True if the text should be bold
    31  	 */
    32  	public SyntaxStyle(Color color, boolean italic, boolean bold)
    33  	{
    34  		this.color = color;
    35  		this.italic = italic;
    36  		this.bold = bold;
    37  	}
    38
    39  	/***
    40  	 * Returns the color specified in this style.
    41  	 */
    42  	public Color getColor()
    43  	{
    44  		return color;
    45  	}
    46
    47  	/***
    48  	 * Returns true if no font styles are enabled.
    49  	 */
    50  	public boolean isPlain()
    51  	{
    52  		return !(bold || italic);
    53  	}
    54
    55  	/***
    56  	 * Returns true if italics is enabled for this style.
    57  	 */
    58  	public boolean isItalic()
    59  	{
    60  		return italic;
    61  	}
    62
    63  	/***
    64  	 * Returns true if boldface is enabled for this style.
    65  	 */
    66  	public boolean isBold()
    67  	{
    68  		return bold;
    69  	}
    70
    71  	/***
    72  	 * Returns the specified font, but with the style's bold and
    73  	 * italic flags applied.
    74  	 */
    75  	public Font getStyledFont(Font font)
    76  	{
    77  		if(font == null)
    78  			throw new NullPointerException("font param must not"
    79  				+ " be null");
    80  		if(font.equals(lastFont))
    81  			return lastStyledFont;
    82  		lastFont = font;
    83  		lastStyledFont = new Font(font.getFamily(),
    84  			(bold ? Font.BOLD : 0)
    85  			| (italic ? Font.ITALIC : 0),
    86  			font.getSize());
    87  		return lastStyledFont;
    88  	}
    89
    90  	/***
    91  	 * Returns the font metrics for the styled font.
    92  	 */
    93  	public FontMetrics getFontMetrics(Font font)
    94  	{
    95  		if(font == null)
    96  			throw new NullPointerException("font param must not"
    97  				+ " be null");
    98  		if(font.equals(lastFont) && fontMetrics != null)
    99  			return fontMetrics;
    100 		lastFont = font;
    101 		lastStyledFont = new Font(font.getFamily(),
    102 			(bold ? Font.BOLD : 0)
    103 			| (italic ? Font.ITALIC : 0),
    104 			font.getSize());
    105 		fontMetrics = Toolkit.getDefaultToolkit().getFontMetrics(
    106 			lastStyledFont);
    107 		return fontMetrics;
    108 	}
    109
    110 	/***
    111 	 * Sets the foreground color and font of the specified graphics
    112 	 * context to that specified in this style.
    113 	 * @param gfx The graphics context
    114 	 * @param font The font to add the styles to
    115 	 */
    116 	public void setGraphicsFlags(Graphics gfx, Font font)
    117 	{
    118 		Font _font = getStyledFont(font);
    119 		gfx.setFont(_font);
    120 		gfx.setColor(color);
    121 	}
    122
    123 	/***
    124 	 * Returns a string representation of this object.
    125 	 */
    126 	public String toString()
    127 	{
    128 		return getClass().getName() + "[color=" + color +
    129 			(italic ? ",italic" : "") +
    130 			(bold ? ",bold" : "") + "]";
    131 	}
    132
    133 	// private members
    134 	private Color color;
    135 	private boolean italic;
    136 	private boolean bold;
    137 	private Font lastFont;
    138 	private Font lastStyledFont;
    139 	private FontMetrics fontMetrics;
    140 }