Index: javax/swing/text/LabelView.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/text/LabelView.java,v retrieving revision 1.1 diff -u -r1.1 LabelView.java --- javax/swing/text/LabelView.java 29 Jul 2005 10:47:16 -0000 1.1 +++ javax/swing/text/LabelView.java 5 Oct 2005 14:59:48 -0000 @@ -38,10 +38,57 @@ package javax.swing.text; -// TODO: Implement this class. -public class LabelView - extends GlyphView +import java.awt.Color; +import java.awt.Font; +import java.awt.FontMetrics; +import java.awt.Shape; + +import javax.swing.event.DocumentEvent; + +/** + * A address@hidden GlyphView} that caches the textattributes for most effective + * rendering. + * + * @author Roman Kennke (address@hidden) + */ +public class LabelView extends GlyphView { + + /** + * The background color. + */ + Color background; + + /** + * The foreground color. + */ + Color foreground; + + /** + * The background color. + */ + Font font; + + /** + * The strikethrough flag. + */ + boolean strikeThrough; + + /** + * The underline flag. + */ + boolean underline; + + /** + * The subscript flag. + */ + boolean subscript; + + /** + * The superscript flag. + */ + boolean superscript; + /** * Creates a new GlyphView for the given Element. * @@ -50,5 +97,194 @@ public LabelView(Element element) { super(element); + setPropertiesFromAttributes(); + } + + /** + * Loads the properties of this label view from the element's text + * attributes. This method is called from the constructor and the + * address@hidden #changedUpdate} method + */ + protected void setPropertiesFromAttributes() + { + Element el = getElement(); + AttributeSet atts = el.getAttributes(); + background = StyleConstants.getBackground(atts); + foreground = StyleConstants.getForeground(atts); + strikeThrough = StyleConstants.isStrikeThrough(atts); + subscript = StyleConstants.isSubscript(atts); + superscript = StyleConstants.isSuperscript(atts); + underline = StyleConstants.isUnderline(atts); + + // Determine the font. + String family = StyleConstants.getFontFamily(atts); + int size = StyleConstants.getFontSize(atts); + int style = Font.PLAIN; + if (StyleConstants.isBold(atts)) + style |= Font.BOLD; + if (StyleConstants.isItalic(atts)) + style |= Font.ITALIC; + font = new Font(family, style, size); + } + + /** + * Receives notification when text attributes change in the chunk of + * text that this view is responsible for. This simply calls + * address@hidden #setPropertiesFromAttributes()}. + * + * @param e the document event + * @param a the allocation of this view + * @param vf the view factory to use for creating new views + */ + public void changedUpdate(DocumentEvent e, Shape a, ViewFactory vf) + { + setPropertiesFromAttributes(); + } + + /** + * Returns the background color for the glyphs. + * + * @return the background color for the glyphs + */ + public Color getBackground() + { + return background; + } + + /** + * Sets the background color for the glyphs. A value of null + * means the background of the parent view should shine through. + * + * @param bg the background to set or null + * + * @since 1.5 + */ + protected void setBackground(Color bg) + { + background = bg; + } + + /** + * Returns the foreground color for the glyphs. + * + * @return the foreground color for the glyphs + */ + public Color getForeground() + { + return foreground; + } + + /** + * Returns the font for the glyphs. + * + * @return the font for the glyphs + */ + public Font getFont() + { + return font; + } + + /** + * Returns the font metrics of the current font. + * + * @return the font metrics of the current font + * + * @deprecated this is not used anymore + */ + protected FontMetrics getFontMetrics() + { + return getContainer().getGraphics().getFontMetrics(font); + } + + /** + * Returns true if the glyphs are rendered underlined, + * false otherwise. + * + * @return true if the glyphs are rendered underlined, + * false otherwise + */ + public boolean isUnderline() + { + return underline; + } + + /** + * Sets the underline flag. + * + * @param flag true if the glyphs are rendered underlined, + * false otherwise + */ + protected void setUnderline(boolean flag) + { + underline = flag; + } + + /** + * Returns true if the glyphs are rendered as subscript, + * false otherwise. + * + * @return true if the glyphs are rendered as subscript, + * false otherwise + */ + public boolean isSubscript() + { + return subscript; + } + + /** + * Sets the subscript flag. + * + * @param flag true if the glyphs are rendered as subscript, + * false otherwise + */ + protected void setSubscript(boolean flag) + { + subscript = flag; + } + + /** + * Returns true if the glyphs are rendered as superscript, + * false otherwise. + * + * @return true if the glyphs are rendered as superscript, + * false otherwise + */ + public boolean isSuperscript() + { + return superscript; + } + + /** + * Sets the superscript flag. + * + * @param flag true if the glyphs are rendered as superscript, + * false otherwise + */ + protected void setSuperscript(boolean flag) + { + superscript = flag; + } + + /** + * Returns true if the glyphs are rendered strike-through, + * false otherwise. + * + * @return true if the glyphs are rendered strike-through, + * false otherwise + */ + public boolean isStrikeThrough() + { + return strikeThrough; + } + + /** + * Sets the strike-through flag. + * + * @param flag true if the glyphs are rendered strike-through, + * false otherwise + */ + protected void setStrikeThrough(boolean flag) + { + strikeThrough = flag; } }