JHotDraw 7.2

org.jhotdraw.samples.svg.figures
Class SVGTextFigure

java.lang.Object
  extended by org.jhotdraw.beans.AbstractBean
      extended by org.jhotdraw.draw.AbstractFigure
          extended by org.jhotdraw.draw.AbstractAttributedFigure
              extended by org.jhotdraw.samples.svg.figures.SVGAttributedFigure
                  extended by org.jhotdraw.samples.svg.figures.SVGTextFigure
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, Figure, TextHolderFigure, SVGFigure, DOMStorable

public class SVGTextFigure
extends SVGAttributedFigure
implements TextHolderFigure, SVGFigure

SVGText.

XXX - At least on Mac OS X - Always draw text using TextLayout.getOutline(), because outline layout does not match with TextLayout.draw() output. Cache outline to improve performance.

Version:
2.1.1 Rectangle returned by getDrawingArea needs to be cloned.
2.1 2007-05-13 Fixed transformation issues.
2.0 2007-04-14 Adapted for new AttributeKeys.TRANSFORM support.
1.0 July 8, 2006 Created.
Author:
Werner Randelshofer
See Also:
Serialized Form

Field Summary
protected  java.awt.geom.Point2D.Double[] coordinates
           
protected  double[] rotates
           
 
Fields inherited from class org.jhotdraw.draw.AbstractFigure
changingDepth, listenerList
 
Fields inherited from class org.jhotdraw.beans.AbstractBean
propertySupport
 
Constructor Summary
SVGTextFigure()
          Creates a new instance.
SVGTextFigure(java.lang.String text)
           
 
Method Summary
 boolean canConnect()
          Checks if this figure can be connected.
 SVGTextFigure clone()
          Returns a clone of the figure, with clones of all aggregated figures, such as chilrend and decorators.
 boolean contains(java.awt.geom.Point2D.Double p)
          Checks if a Point2D.Double is inside the figure.
 java.util.Collection<Handle> createHandles(int detailLevel)
          Creates handles used to manipulate the figure.
protected  void drawFill(java.awt.Graphics2D g)
          This method is called by method draw() to draw the fill area of the figure.
protected  void drawStroke(java.awt.Graphics2D g)
          This method is called by method draw() to draw the text of the figure .
protected  void drawText(java.awt.Graphics2D g)
           
 Connector findCompatibleConnector(Connector c, boolean isStartConnector)
          Gets a compatible connector.
 Connector findConnector(java.awt.geom.Point2D.Double p, ConnectionFigure prototype)
          Returns the Figures connector for the specified location.
 double getBaseline()
          Gets the baseline of the first line of text, relative to the upper left corner of the figure bounds.
 java.awt.geom.Rectangle2D.Double getBounds()
          Returns the untransformed logicalbounds of the figure as a Rectangle.
 java.awt.geom.Point2D.Double[] getCoordinates()
           
 java.awt.geom.Rectangle2D.Double getDrawingArea()
          Returns the drawing area of the figure as a Rectangle.
 java.awt.Color getFillColor()
          Returns the fill color to be used by a text editor for editing this Figure.
 java.awt.Font getFont()
          Returns the font to be used by a text editor for editing this Figure.
 float getFontSize()
          Gets the font size of the text held by the TextHolderFigure.
 Insets2D.Double getInsets()
          Returns Insets to be used by the text editor relative to the handle bounds of the figure.
 TextHolderFigure getLabelFor()
          Sometimes we want to use a TextHolderFigure as a label for another TextHolderFigure.
 Dimension2DDouble getPreferredSize()
          The preferred size is used by Layouter to determine the preferred size of a Figure.
 double[] getRotates()
           
 int getTabSize()
          Gets the number of characters used to expand tabs.
 java.lang.String getText()
          Gets the text shown by the text figure.
 java.awt.Color getTextColor()
          Returns the text color to be used by a text editor for editing this Figure.
 int getTextColumns()
          Gets the number of columns to be overlaid when the figure is edited.
 Tool getTool(java.awt.geom.Point2D.Double p)
          Returns a specialized tool for the given coordinate.
 java.lang.Object getTransformRestoreData()
          Gets data which can be used to restore the transformation of the figure without loss of precision, after a transform has been applied to it.
 void invalidate()
          Invalidates cached data of the Figure.
 boolean isEditable()
          Returns true if the text of the TextHolderFigure can be edited.
 boolean isEmpty()
          Returns true, if this figure is empty for one of the following reasons: A group has no children A path has less than two points An ellipse or a rectangle has a width or a height of 0 A text has no characters
 boolean isTextOverflow()
          Returns true, if the text does not fit into the bounds of the Figure.
 void restoreTransformTo(java.lang.Object geometry)
          Restores the transform of the figure to a previously stored state.
<T> void
setAttribute(AttributeKey<T> key, T newValue)
          Sets an attribute of the figure.
 void setBounds(java.awt.geom.Point2D.Double anchor, java.awt.geom.Point2D.Double lead)
          Sets the logical and untransformed bounds of the figure.
 void setCoordinates(java.awt.geom.Point2D.Double[] coordinates)
           
 void setEditable(boolean b)
           
 void setFontSize(float size)
          Sets the font size of the text held by the TextHolderFigure.
 void setRotates(double[] rotates)
           
 void setText(java.lang.String newText)
          Sets the text shown by the text figure.
 void transform(java.awt.geom.AffineTransform tx)
          Transforms the figure.
 
Methods inherited from class org.jhotdraw.samples.svg.figures.SVGAttributedFigure
draw, drawFigure, getActions, read, write
 
Methods inherited from class org.jhotdraw.draw.AbstractAttributedFigure
applyAttributesTo, getAttribute, getAttributeKey, getAttributes, getAttributesRestoreData, getStroke, getStrokeMiterLimitFactor, hasAttribute, isAttributeEnabled, readAttributes, removeAttribute, restoreAttributesTo, setAttributeEnabled, setAttributes, writeAttributes
 
Methods inherited from class org.jhotdraw.draw.AbstractFigure
addFigureListener, addNotify, basicClone, changed, findFigureInside, fireAreaInvalidated, fireAreaInvalidated, fireAreaInvalidated, fireAttributeChanged, fireFigureAdded, fireFigureChanged, fireFigureChanged, fireFigureChanged, fireFigureHandlesChanged, fireFigureRemoved, fireFigureRequestRemove, fireUndoableEditHappened, getChangingDepth, getConnectors, getCursor, getDecomposition, getDrawing, getEndPoint, getFontRenderContext, getLayer, getLock, getStartPoint, getToolTipText, handleDrop, handleMouseClick, includes, isChanging, isRemovable, isSelectable, isTransformable, isVisible, remap, removeFigureListener, removeNotify, requestRemove, setBounds, setRemovable, setSelectable, setTransformable, setVisible, toString, validate, willChange
 
Methods inherited from class org.jhotdraw.beans.AbstractBean
addPropertyChangeListener, addPropertyChangeListener, firePropertyChange, firePropertyChange, firePropertyChange, removePropertyChangeListener, removePropertyChangeListener
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface org.jhotdraw.draw.Figure
addFigureListener, addNotify, changed, draw, findFigureInside, getActions, getAttribute, getAttributes, getAttributesRestoreData, getConnectors, getCursor, getDecomposition, getEndPoint, getLayer, getStartPoint, getToolTipText, handleDrop, handleMouseClick, includes, isRemovable, isSelectable, isTransformable, isVisible, remap, removeFigureListener, removeNotify, requestRemove, restoreAttributesTo, willChange
 
Methods inherited from interface org.jhotdraw.xml.DOMStorable
read, write
 
Methods inherited from interface org.jhotdraw.draw.Figure
addFigureListener, addNotify, changed, draw, findFigureInside, getActions, getAttribute, getAttributes, getAttributesRestoreData, getConnectors, getCursor, getDecomposition, getEndPoint, getLayer, getStartPoint, getToolTipText, handleDrop, handleMouseClick, includes, isRemovable, isSelectable, isTransformable, isVisible, remap, removeFigureListener, removeNotify, requestRemove, restoreAttributesTo, willChange
 
Methods inherited from interface org.jhotdraw.xml.DOMStorable
read, write
 

Field Detail

coordinates

protected java.awt.geom.Point2D.Double[] coordinates

rotates

protected double[] rotates
Constructor Detail

SVGTextFigure

public SVGTextFigure()
Creates a new instance.


SVGTextFigure

public SVGTextFigure(java.lang.String text)
Method Detail

drawText

protected void drawText(java.awt.Graphics2D g)
Overrides:
drawText in class AbstractAttributedFigure

drawFill

protected void drawFill(java.awt.Graphics2D g)
Description copied from class: AbstractAttributedFigure
This method is called by method draw() to draw the fill area of the figure. AbstractAttributedFigure configures the Graphics2D object with the FILL_COLOR attribute before calling this method. If the FILL_COLOR attribute is null, this method is not called.

Specified by:
drawFill in class AbstractAttributedFigure

drawStroke

protected void drawStroke(java.awt.Graphics2D g)
Description copied from class: AbstractAttributedFigure
This method is called by method draw() to draw the text of the figure . AbstractAttributedFigure configures the Graphics2D object with the TEXT_COLOR attribute before calling this method. If the TEXT_COLOR attribute is null, this method is not called.

Specified by:
drawStroke in class AbstractAttributedFigure

setCoordinates

public void setCoordinates(java.awt.geom.Point2D.Double[] coordinates)

getCoordinates

public java.awt.geom.Point2D.Double[] getCoordinates()

setRotates

public void setRotates(double[] rotates)

getRotates

public double[] getRotates()

getBounds

public java.awt.geom.Rectangle2D.Double getBounds()
Description copied from interface: Figure
Returns the untransformed logicalbounds of the figure as a Rectangle. The handle bounds are used by Handle objects for adjusting the figure and for aligning the figure on a grid.

Specified by:
getBounds in interface Figure

getDrawingArea

public java.awt.geom.Rectangle2D.Double getDrawingArea()
Description copied from interface: Figure
Returns the drawing area of the figure as a Rectangle. The drawing area is used to improve the performance of GraphicView, for example for clipping of repaints and for clipping of mouse events.

The drawing area needs to be large enough, to take line width, line caps and other decorations into account that exceed the bounds of the Figure.

Specified by:
getDrawingArea in interface Figure
Overrides:
getDrawingArea in class AbstractAttributedFigure

contains

public boolean contains(java.awt.geom.Point2D.Double p)
Checks if a Point2D.Double is inside the figure.

Specified by:
contains in interface Figure

setBounds

public void setBounds(java.awt.geom.Point2D.Double anchor,
                      java.awt.geom.Point2D.Double lead)
Description copied from interface: Figure
Sets the logical and untransformed bounds of the figure.

This is used by Tool's which create a new Figure and by Tool's which connect a Figure to another Figure.

This is a basic operation which does not fire events. Use the following code sequence, if you need event firing:

 aFigure.willChange();
 aFigure.setBounds(...);
 aFigure.changed();
 

Specified by:
setBounds in interface Figure
Overrides:
setBounds in class AbstractFigure
Parameters:
anchor - the start point of the bounds
lead - the end point of the bounds
See Also:
Figure.getBounds()

transform

public void transform(java.awt.geom.AffineTransform tx)
Transforms the figure.

Specified by:
transform in interface Figure
Parameters:
tx - the transformation.
See Also:
Figure.getTransformRestoreData(), Figure.restoreTransformTo(java.lang.Object)

restoreTransformTo

public void restoreTransformTo(java.lang.Object geometry)
Description copied from interface: Figure
Restores the transform of the figure to a previously stored state.

Specified by:
restoreTransformTo in interface Figure

getTransformRestoreData

public java.lang.Object getTransformRestoreData()
Description copied from interface: Figure
Gets data which can be used to restore the transformation of the figure without loss of precision, after a transform has been applied to it.

Specified by:
getTransformRestoreData in interface Figure
See Also:
Figure.transform(AffineTransform)

getText

public java.lang.String getText()
Gets the text shown by the text figure.

Specified by:
getText in interface TextHolderFigure

setAttribute

public <T> void setAttribute(AttributeKey<T> key,
                             T newValue)
Description copied from class: AbstractAttributedFigure
Sets an attribute of the figure. AttributeKey name and semantics are defined by the class implementing the figure interface.

Specified by:
setAttribute in interface Figure
Overrides:
setAttribute in class SVGAttributedFigure
See Also:
AttributeKey.set(org.jhotdraw.draw.Figure, T)

setText

public void setText(java.lang.String newText)
Sets the text shown by the text figure.

Specified by:
setText in interface TextHolderFigure

isEditable

public boolean isEditable()
Description copied from interface: TextHolderFigure
Returns true if the text of the TextHolderFigure can be edited.

Specified by:
isEditable in interface TextHolderFigure

setEditable

public void setEditable(boolean b)

getTextColumns

public int getTextColumns()
Description copied from interface: TextHolderFigure
Gets the number of columns to be overlaid when the figure is edited.

Specified by:
getTextColumns in interface TextHolderFigure

getFont

public java.awt.Font getFont()
Description copied from interface: TextHolderFigure
Returns the font to be used by a text editor for editing this Figure.

Specified by:
getFont in interface TextHolderFigure

getTextColor

public java.awt.Color getTextColor()
Description copied from interface: TextHolderFigure
Returns the text color to be used by a text editor for editing this Figure.

Specified by:
getTextColor in interface TextHolderFigure

getFillColor

public java.awt.Color getFillColor()
Description copied from interface: TextHolderFigure
Returns the fill color to be used by a text editor for editing this Figure.

Specified by:
getFillColor in interface TextHolderFigure

setFontSize

public void setFontSize(float size)
Description copied from interface: TextHolderFigure
Sets the font size of the text held by the TextHolderFigure.

Specified by:
setFontSize in interface TextHolderFigure

getFontSize

public float getFontSize()
Description copied from interface: TextHolderFigure
Gets the font size of the text held by the TextHolderFigure.

Specified by:
getFontSize in interface TextHolderFigure

invalidate

public void invalidate()
Description copied from class: AbstractFigure
Invalidates cached data of the Figure. This method must execute fast, because it can be called very often.

Overrides:
invalidate in class AbstractFigure

getPreferredSize

public Dimension2DDouble getPreferredSize()
Description copied from interface: Figure
The preferred size is used by Layouter to determine the preferred size of a Figure. For most Figure's this is the same as the dimensions returned by getBounds.

Specified by:
getPreferredSize in interface Figure
Overrides:
getPreferredSize in class AbstractFigure

createHandles

public java.util.Collection<Handle> createHandles(int detailLevel)
Description copied from interface: Figure
Creates handles used to manipulate the figure.

Specified by:
createHandles in interface Figure
Overrides:
createHandles in class AbstractFigure
Parameters:
detailLevel - The detail level of the handles. Usually this is 0 for bounding box handles and 1 for point handles. The value -1 is used by the SelectAreaTracker and the HandleTracker to highlight figures, over which the mouse pointer is hovering.
Returns:
a Collection of handles
See Also:
Handle

canConnect

public boolean canConnect()
Description copied from class: AbstractFigure
Checks if this figure can be connected. By default AbstractFigures can be connected.

Specified by:
canConnect in interface Figure
Overrides:
canConnect in class AbstractFigure

findConnector

public Connector findConnector(java.awt.geom.Point2D.Double p,
                               ConnectionFigure prototype)
Description copied from class: AbstractFigure
Returns the Figures connector for the specified location. By default a ChopBoxConnector is returned.

Specified by:
findConnector in interface Figure
Overrides:
findConnector in class AbstractFigure
Parameters:
p - the location of the connector.
prototype - The prototype used to create a connection or null if unknown. This allows for specific connectors for different connection figures.
See Also:
ChopRectangleConnector

findCompatibleConnector

public Connector findCompatibleConnector(Connector c,
                                         boolean isStartConnector)
Description copied from interface: Figure
Gets a compatible connector. If the provided connector is part of this figure, return the connector. If the provided connector is part of another figure, return a connector with the same semantics for this figure. Return null, if no compatible connector is available.

Specified by:
findCompatibleConnector in interface Figure
Overrides:
findCompatibleConnector in class AbstractFigure

getTool

public Tool getTool(java.awt.geom.Point2D.Double p)
Returns a specialized tool for the given coordinate.

Returns null, if no specialized tool is available.

Specified by:
getTool in interface Figure
Overrides:
getTool in class AbstractFigure

getBaseline

public double getBaseline()
Description copied from interface: TextHolderFigure
Gets the baseline of the first line of text, relative to the upper left corner of the figure bounds.

Specified by:
getBaseline in interface TextHolderFigure

getTabSize

public int getTabSize()
Gets the number of characters used to expand tabs.

Specified by:
getTabSize in interface TextHolderFigure

getLabelFor

public TextHolderFigure getLabelFor()
Description copied from interface: TextHolderFigure
Sometimes we want to use a TextHolderFigure as a label for another TextHolderFigure. Returns the TextHolderFigure that should be really used.

Specified by:
getLabelFor in interface TextHolderFigure

getInsets

public Insets2D.Double getInsets()
Description copied from interface: TextHolderFigure
Returns Insets to be used by the text editor relative to the handle bounds of the figure.

Specified by:
getInsets in interface TextHolderFigure

clone

public SVGTextFigure clone()
Description copied from interface: Figure
Returns a clone of the figure, with clones of all aggregated figures, such as chilrend and decorators. The cloned figure does not clone the list of FigureListeners from its original.

Specified by:
clone in interface Figure
Overrides:
clone in class AbstractAttributedFigure

isEmpty

public boolean isEmpty()
Description copied from interface: SVGFigure
Returns true, if this figure is empty for one of the following reasons:

Specified by:
isEmpty in interface SVGFigure

isTextOverflow

public boolean isTextOverflow()
Description copied from interface: TextHolderFigure
Returns true, if the text does not fit into the bounds of the Figure.

Specified by:
isTextOverflow in interface TextHolderFigure

Copyright 1996-2009 (c) by the authors and contributors of the JHotDraw project.
Some rights reserved.