/*
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package org.apache.batik.bridge;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import org.apache.batik.gvt.font.GVTGlyphMetrics;
import org.apache.batik.gvt.font.GVTGlyphVector;
import org.apache.batik.gvt.font.GVTLineMetrics;
Class that performs layout of attributed text strings into
glyph sets paintable by TextPainter instances.
Similar to java.awt.font.TextLayout in function and purpose.
Note that while this utility interface is provided for the convenience of
TextPainter
implementations, conforming TextPainter
s
are not required to use this class.
Author: Bill Haneman See Also: - TextLayout
- TextPainter
Version: $Id: TextSpanLayout.java 1808001 2017-09-11 09:51:29Z ssteiner $
/**
* Class that performs layout of attributed text strings into
* glyph sets paintable by TextPainter instances.
* Similar to java.awt.font.TextLayout in function and purpose.
* Note that while this utility interface is provided for the convenience of
* <code>TextPainter</code> implementations, conforming <code>TextPainter</code>s
* are not required to use this class.
* @see java.awt.font.TextLayout
* @see org.apache.batik.bridge.TextPainter
*
* @author <a href="mailto:bill.haneman@ireland.sun.com">Bill Haneman</a>
* @version $Id: TextSpanLayout.java 1808001 2017-09-11 09:51:29Z ssteiner $
*/
public interface TextSpanLayout {
int DECORATION_UNDERLINE = 0x1;
int DECORATION_STRIKETHROUGH = 0x2;
int DECORATION_OVERLINE = 0x4;
int DECORATION_ALL = DECORATION_UNDERLINE |
DECORATION_OVERLINE |
DECORATION_STRIKETHROUGH;
Paints the specified text layout using the
specified Graphics2D and rendering context.
Params: - g2d – the Graphics2D to use
/**
* Paints the specified text layout using the
* specified Graphics2D and rendering context.
* @param g2d the Graphics2D to use
*/
void draw(Graphics2D g2d);
Returns the outline of the specified decorations on the glyphs,
transformed by an AffineTransform.
Params: - decorationType – an integer indicating the type(s) of decorations
included in this shape. May be the result of "OR-ing" several
values together:
e.g.
DECORATION_UNDERLINE | DECORATION_STRIKETHROUGH
/**
* Returns the outline of the specified decorations on the glyphs,
* transformed by an AffineTransform.
* @param decorationType an integer indicating the type(s) of decorations
* included in this shape. May be the result of "OR-ing" several
* values together:
* e.g. <code>DECORATION_UNDERLINE | DECORATION_STRIKETHROUGH</code>
*/
Shape getDecorationOutline(int decorationType);
Returns the rectangular bounds of the completed glyph layout.
This includes stroking information, this does not include
deocrations.
/**
* Returns the rectangular bounds of the completed glyph layout.
* This includes stroking information, this does not include
* deocrations.
*/
Rectangle2D getBounds2D();
Returns the bounds of the geometry (this is always the bounds
of the outline).
/**
* Returns the bounds of the geometry (this is always the bounds
* of the outline).
*/
Rectangle2D getGeometricBounds();
Returns the outline of the completed glyph layout, transformed
by an AffineTransform.
/**
* Returns the outline of the completed glyph layout, transformed
* by an AffineTransform.
*/
Shape getOutline();
Returns the current text position at the completion
of glyph layout.
(This is the position that should be used for positioning
adjacent layouts.)
/**
* Returns the current text position at the completion
* of glyph layout.
* (This is the position that should be used for positioning
* adjacent layouts.)
*/
Point2D getAdvance2D();
Returns the advance between each glyph in text progression direction.
/**
* Returns the advance between each glyph in text progression direction.
*/
float [] getGlyphAdvances();
Returns the Metrics for a particular glyph.
/**
* Returns the Metrics for a particular glyph.
*/
GVTGlyphMetrics getGlyphMetrics(int glyphIndex);
Returns the Line metrics for this text span.
/**
* Returns the Line metrics for this text span.
*/
GVTLineMetrics getLineMetrics();
Point2D getTextPathAdvance();
Returns the current text position at the completion beginning
of glyph layout, before the application of explicit
glyph positioning attributes.
/**
* Returns the current text position at the completion beginning
* of glyph layout, before the application of explicit
* glyph positioning attributes.
*/
Point2D getOffset();
Sets the scaling factor to use for string. if ajdSpacing is
true then only the spacing between glyphs will be adjusted
otherwise the glyphs and the spaces between them will be
adjusted.
Params: - xScale – Scale factor to apply in X direction.
- yScale – Scale factor to apply in Y direction.
- adjSpacing – True if only spaces should be adjusted.
/**
* Sets the scaling factor to use for string. if ajdSpacing is
* true then only the spacing between glyphs will be adjusted
* otherwise the glyphs and the spaces between them will be
* adjusted.
* @param xScale Scale factor to apply in X direction.
* @param yScale Scale factor to apply in Y direction.
* @param adjSpacing True if only spaces should be adjusted.
*/
void setScale(float xScale, float yScale, boolean adjSpacing);
Sets the text position used for the implicit origin
of glyph layout. Ignored if multiple explicit glyph
positioning attributes are present in ACI
(e.g. if the aci has multiple X or Y values).
/**
* Sets the text position used for the implicit origin
* of glyph layout. Ignored if multiple explicit glyph
* positioning attributes are present in ACI
* (e.g. if the aci has multiple X or Y values).
*/
void setOffset(Point2D offset);
Returns a Shape which encloses the currently selected glyphs
as specified by glyph indices begin
and end
.
Params: - beginCharIndex – the index of the first glyph in the contiguous
selection.
- endCharIndex – the index of the last glyph in the contiguous
selection.
/**
* Returns a Shape which encloses the currently selected glyphs
* as specified by glyph indices <code>begin</code> and <code>end</code>.
* @param beginCharIndex the index of the first glyph in the contiguous
* selection.
* @param endCharIndex the index of the last glyph in the contiguous
* selection.
*/
Shape getHighlightShape(int beginCharIndex, int endCharIndex);
Perform hit testing for coordinate at x, y.
Params: - x – the x coordinate of the point to be tested.
- y – the y coordinate of the point to be tested.
Returns: a TextHit object encapsulating the character index for
successful hits and whether the hit is on the character
leading edge.
/**
* Perform hit testing for coordinate at x, y.
* @return a TextHit object encapsulating the character index for
* successful hits and whether the hit is on the character
* leading edge.
* @param x the x coordinate of the point to be tested.
* @param y the y coordinate of the point to be tested.
*/
TextHit hitTestChar(float x, float y);
Returns true if the advance direction of this text is vertical.
/**
* Returns true if the advance direction of this text is vertical.
*/
boolean isVertical();
Returns true if this layout in on a text path.
/**
* Returns true if this layout in on a text path.
*/
boolean isOnATextPath();
Returns the number of glyphs in this layout.
/**
* Returns the number of glyphs in this layout.
*/
int getGlyphCount();
Returns the number of chars represented by the glyphs within the
specified range.
Params: - startGlyphIndex – The index of the first glyph in the range.
- endGlyphIndex – The index of the last glyph in the range.
Returns: The number of chars.
/**
* Returns the number of chars represented by the glyphs within the
* specified range.
* @param startGlyphIndex The index of the first glyph in the range.
* @param endGlyphIndex The index of the last glyph in the range.
* @return The number of chars.
*/
int getCharacterCount(int startGlyphIndex, int endGlyphIndex);
Returns the glyph index of the glyph that has the specified char index.
Params: - charIndex – The original index of the character in the text node's
text string.
Returns: The index of the matching glyph in this layout's glyph vector,
or -1 if a matching glyph could not be found.
/**
* Returns the glyph index of the glyph that has the specified char index.
*
* @param charIndex The original index of the character in the text node's
* text string.
* @return The index of the matching glyph in this layout's glyph vector,
* or -1 if a matching glyph could not be found.
*/
int getGlyphIndex(int charIndex);
Returns true if the text direction in this layout is from left to right.
/**
* Returns true if the text direction in this layout is from left to right.
*/
boolean isLeftToRight();
Return true is the character index is represented by glyphs
in this layout.
Params: - index – index of the character in the ACI.
Returns: true if the layout represents that character.
/**
* Return true is the character index is represented by glyphs
* in this layout.
*
* @param index index of the character in the ACI.
* @return true if the layout represents that character.
*/
boolean hasCharacterIndex(int index);
Return the glyph vector asociated to this layout.
Returns: glyph vector
/**
* Return the glyph vector asociated to this layout.
*
* @return glyph vector
*/
GVTGlyphVector getGlyphVector();
Return the rotation angle applied to the
character.
Params: - index – index of the character in the ACI
Returns: rotation angle
/**
* Return the rotation angle applied to the
* character.
*
* @param index index of the character in the ACI
* @return rotation angle
*/
double getComputedOrientationAngle(int index);
Return true if this text run represents
an alt glyph.
/**
* Return true if this text run represents
* an alt glyph.
*/
boolean isAltGlyph();
Return true if this text has been reversed.
/**
* Return true if this text has been reversed.
*/
boolean isReversed();
Reverse (and optionally mirror) glyphs if not
already reversed.
/**
* Reverse (and optionally mirror) glyphs if not
* already reversed.
*/
void maybeReverse(boolean mirror);
}