001: /*
002:
003: Licensed to the Apache Software Foundation (ASF) under one or more
004: contributor license agreements. See the NOTICE file distributed with
005: this work for additional information regarding copyright ownership.
006: The ASF licenses this file to You under the Apache License, Version 2.0
007: (the "License"); you may not use this file except in compliance with
008: the License. You may obtain a copy of the License at
009:
010: http://www.apache.org/licenses/LICENSE-2.0
011:
012: Unless required by applicable law or agreed to in writing, software
013: distributed under the License is distributed on an "AS IS" BASIS,
014: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015: See the License for the specific language governing permissions and
016: limitations under the License.
017:
018: */
019: package org.apache.batik.gvt;
020:
021: import java.awt.Graphics2D;
022: import java.awt.Shape;
023: import java.awt.geom.Rectangle2D;
024:
025: import org.apache.batik.gvt.text.Mark;
026:
027: /**
028: * Renders the attributed character iterator of a <tt>TextNode</tt>.
029: *
030: * @author <a href="mailto:Thierry.Kormann@sophia.inria.fr">Thierry Kormann</a>
031: * @version $Id: TextPainter.java 475477 2006-11-15 22:44:28Z cam $
032: */
033: public interface TextPainter {
034:
035: /**
036: * Paints the specified attributed character iterator using the specified
037: * Graphics2D and context and font context.
038: *
039: * @param node the TextNode to paint
040: * @param g2d the Graphics2D to use
041: */
042: void paint(TextNode node, Graphics2D g2d);
043:
044: /**
045: * Initiates a text selection on a particular AttributedCharacterIterator,
046: * using the text/font metrics employed by this TextPainter instance.
047: */
048: Mark selectAt(double x, double y, TextNode node);
049:
050: /**
051: * Continues a text selection on a particular AttributedCharacterIterator,
052: * using the text/font metrics employed by this TextPainter instance.
053: */
054: Mark selectTo(double x, double y, Mark beginMark);
055:
056: /**
057: * Selects the first glyph in the text node.
058: */
059: Mark selectFirst(TextNode node);
060:
061: /**
062: * Selects the last glyph in the text node.
063: */
064: Mark selectLast(TextNode node);
065:
066: /**
067: * Returns a mark for the char at index in node's
068: * AttributedCharacterIterator. Leading edge indicates if the
069: * mark should be considered immediately 'before' glyph or
070: * after
071: */
072: Mark getMark(TextNode node, int index, boolean beforeGlyph);
073:
074: /**
075: * Get an array of index pairs corresponding to the indices within an
076: * AttributedCharacterIterator regions bounded by two Marks.
077: *
078: * Note that the instances of Mark passed to this function <em>must
079: * come</em> from the same TextPainter that generated them via selectAt()
080: * and selectTo(), since the TextPainter implementation may rely on hidden
081: * implementation details of its own Mark implementation. */
082: int[] getSelected(Mark start, Mark finish);
083:
084: /**
085: * Get a Shape in userspace coords which encloses the textnode
086: * glyphs bounded by two Marks.
087: * Note that the instances of Mark passed to this function
088: * <em>must come</em>
089: * from the same TextPainter that generated them via selectAt() and
090: * selectTo(), since the TextPainter implementation may rely on hidden
091: * implementation details of its own Mark implementation.
092: */
093: Shape getHighlightShape(Mark beginMark, Mark endMark);
094:
095: /**
096: * Get a Shape in userspace coords which defines the textnode
097: * glyph outlines.
098: * @param node the TextNode to measure
099: */
100: Shape getOutline(TextNode node);
101:
102: /**
103: * Get a Rectangle2D in userspace coords which encloses the textnode
104: * glyphs rendered bounds (includes stroke etc).
105: * @param node the TextNode to measure
106: */
107: Rectangle2D getBounds2D(TextNode node);
108:
109: /**
110: * Get a Rectangle2D in userspace coords which encloses the textnode
111: * glyphs just including the geometry info.
112: * @param node the TextNode to measure
113: */
114: Rectangle2D getGeometryBounds(TextNode node);
115: }
|