19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  this work for additional information regarding copyright ownership.
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  (the "License"); you may not use this file except in compliance with
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  the License.  You may obtain a copy of the License at
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  See the License for the specific language governing permissions and
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  limitations under the License.
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @author Ilya S. Okomin
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @version $Revision$
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage java.awt.font;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.awt.Font;
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.awt.font.FontRenderContext;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.awt.font.GlyphJustificationInfo;
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.awt.font.GlyphMetrics;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.awt.Rectangle;
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.awt.Shape;
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.awt.geom.AffineTransform;
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.awt.geom.Point2D;
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.awt.geom.Rectangle2D;
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The GlyphVector class contains a collection of glyphs with geometric
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * information and each glyph's location. Each GlyphVector can be associated
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with only one Font. GlyphVector contains the following properties for each
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * glyph:
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <ul>
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>the glyph position;</li>
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>the transform of the glyph;</li>
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>the metrics of the glyph in the context of the GlyphVector.</li>
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </ul>
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @since Android 1.0
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic abstract class GlyphVector implements Cloneable {
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The Constant FLAG_HAS_TRANSFORMS indicates that this GlyphVector has
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * per-glyph transforms.
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int FLAG_HAS_TRANSFORMS = 1;
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The Constant FLAG_HAS_POSITION_ADJUSTMENTS indicates that the GlyphVector
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * has per-glyph position adjustments.
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int FLAG_HAS_POSITION_ADJUSTMENTS = 2;
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The Constant FLAG_RUN_RTL indicates that this GlyphVector has a right to
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * left run direction.
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int FLAG_RUN_RTL = 4;
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The Constant FLAG_COMPLEX_GLYPHS indicates that this GlyphVector has a
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * complex glyph to char mapping.
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int FLAG_COMPLEX_GLYPHS = 8;
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The Constant FLAG_MASK indicates a mask for supported flags from
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * getLayoutFlags.
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int FLAG_MASK = 15; // (|) mask of other flags
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Instantiates a new GlyphVector.
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public GlyphVector() {
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the pixel bounds of the GlyphVector when rendered at the specified
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * location with the specified FontRenderContext.
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param frc
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the FontRenderContext.
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param x
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the X coordinate of the GlyphVector's location.
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param y
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the Y coordinate of the GlyphVector's location.
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the pixel bounds
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Rectangle getPixelBounds(FontRenderContext frc, float x, float y) {
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // default implementation - integer Rectangle, that encloses visual
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // bounds rectangle
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Rectangle2D visualRect = getVisualBounds();
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int minX = (int)Math.floor(visualRect.getMinX() + x);
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int minY = (int)Math.floor(visualRect.getMinY() + y);
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int width = (int)Math.ceil(visualRect.getMaxX() + x) - minX;
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int height = (int)Math.ceil(visualRect.getMaxY() + y) - minY;
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return new Rectangle(minX, minY, width, height);
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the pixel bounds of the glyph with the specified index in this
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * GlyphVector which is rendered with the specified FontRenderContext at the
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * specified location.
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param index
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the glyph index in this GlyphVector.
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param frc
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the FontRenderContext.
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param x
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the X coordinate of the GlyphVector's location.
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param y
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the Y coordinate of the GlyphVector's location.
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return a Rectangle bounds.
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Rectangle getGlyphPixelBounds(int index, FontRenderContext frc, float x, float y) {
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Rectangle2D visualRect = getGlyphVisualBounds(index).getBounds2D();
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int minX = (int)Math.floor(visualRect.getMinX() + x);
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int minY = (int)Math.floor(visualRect.getMinY() + y);
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int width = (int)Math.ceil(visualRect.getMaxX() + x) - minX;
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int height = (int)Math.ceil(visualRect.getMaxY() + y) - minY;
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return new Rectangle(minX, minY, width, height);
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the visual bounds of the GlyphVector.
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the visual bounds of the GlyphVector.
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Rectangle2D getVisualBounds();
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the logical bounds of the GlyphVector.
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the logical bounds of the GlyphVector.
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Rectangle2D getLogicalBounds();
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Sets the position of the specified glyph in this GlyphVector.
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param glyphIndex
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the glyph index in this GlyphVector.
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param newPos
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the new position of the glyph at the specified glyphIndex.
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void setGlyphPosition(int glyphIndex, Point2D newPos);
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the position of the specified glyph in this GlyphVector.
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param glyphIndex
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the glyph index in this GlyphVector.
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the position of the specified glyph in this GlyphVector.
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Point2D getGlyphPosition(int glyphIndex);
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Sets the affine transform to a glyph with the specified index in this
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * GlyphVector.
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param glyphIndex
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the glyth index in this GlyphVector.
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param trans
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the AffineTransform to be assigned to the specified glyph.
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void setGlyphTransform(int glyphIndex, AffineTransform trans);
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the transform of the specified glyph in this GlyphVector.
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param glyphIndex
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the glyph index in this GlyphVector.
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the new transform of the glyph.
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract AffineTransform getGlyphTransform(int glyphIndex);
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Compares this GlyphVector with the specified GlyphVector objects.
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param glyphVector
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the GlyphVector object to be compared.
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return true, if this GlyphVector is equal to the specified GlyphVector
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         object, false otherwise.
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract boolean equals(GlyphVector glyphVector);
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the metrics of the glyph with the specified index in this
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * GlyphVector.
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param glyphIndex
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            index in this GlyphVector.
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the metrics of the glyph with the specified index in this
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         GlyphVector.
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract GlyphMetrics getGlyphMetrics(int glyphIndex);
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the justification information of the glyph whose index is specified.
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param glyphIndex
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the glyph index.
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the GlyphJustificationInfo for the specified glyph.
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract GlyphJustificationInfo getGlyphJustificationInfo(int glyphIndex);
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the FontRenderContext of this GlyphVector.
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the FontRenderContext of this GlyphVector.
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract FontRenderContext getFontRenderContext();
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets a Shape object which defines the visual representation of the
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * specified glyph in this GlyphVector, translated a distance of x in the X
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * direction and y in the Y direction.
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param glyphIndex
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the glyth index in this GlyphVector.
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param x
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the distance in the X direction to translate the shape object
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            before returning it.
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param y
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the distance in the Y direction to translate the shape object
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            before returning it.
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return a Shape object which represents the visual representation of the
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         specified glyph in this GlyphVector - glyph outline.
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Shape getGlyphOutline(int glyphIndex, float x, float y) {
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Shape initialShape = getGlyphOutline(glyphIndex);
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        AffineTransform trans = AffineTransform.getTranslateInstance(x, y);
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return trans.createTransformedShape(initialShape);
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the visual bounds of the specified glyph in the GlyphVector.
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param glyphIndex
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the glyph index in this GlyphVector.
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the glyph visual bounds of the glyph with the specified index in
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         the GlyphVector.
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Shape getGlyphVisualBounds(int glyphIndex);
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets a Shape object which defines the visual representation of the
2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * specified glyph in this GlyphVector.
2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param glyphIndex
2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the glyth index in this GlyphVector.
2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return a Shape object which represents the visual representation of the
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         specified glyph in this GlyphVector - glyph outline.
2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Shape getGlyphOutline(int glyphIndex);
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the logical bounds of the specified glyph in the GlyphVector.
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param glyphIndex
2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the index in this GlyphVector of the glyph from which to
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            retrieve its logical bounds
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the logical bounds of the specified glyph in the GlyphVector.
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Shape getGlyphLogicalBounds(int glyphIndex);
2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the visual representation of this GlyphVector rendered in x, y
2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * location as a Shape object.
2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param x
2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the x coordinate of the GlyphVector.
2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param y
2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the y coordinate of the GlyphVector.
2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the visual representation of this GlyphVector as a Shape object.
2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Shape getOutline(float x, float y);
2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the visual representation of this GlyphVector as a Shape object.
2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the visual representation of this GlyphVector as a Shape object.
2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Shape getOutline();
2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the font of this GlyphVector.
3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the font of this GlyphVector.
3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Font getFont();
3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets an array of the glyph codes of the specified glyphs.
3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param beginGlyphIndex
3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the index into this GlyphVector at which to start retrieving
3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            glyph codes.
3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param numEntries
3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the number of glyph codes.
3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param codeReturn
3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the array into which the resulting glyphcodes will be written.
3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the array of the glyph codes.
3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int[] getGlyphCodes(int beginGlyphIndex, int numEntries, int[] codeReturn);
3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets an array of the character indices of the specified glyphs.
3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param beginGlyphIndex
3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the index of the first glyph to return information for.
3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param numEntries
3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the number of glyph indices to return.
3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param codeReturn
3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the array into which the resulting character indices will be
3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            written.
3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return an array of character indices for the specifies glyphs.
3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int[] getGlyphCharIndices(int beginGlyphIndex, int numEntries, int[] codeReturn) {
3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (codeReturn == null) {
3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            codeReturn = new int[numEntries];
3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (int i = 0; i < numEntries; i++) {
3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            codeReturn[i] = getGlyphCharIndex(i + beginGlyphIndex);
3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return codeReturn;
3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets an array of the positions of the specified glyphs in this
3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * GlyphVector.
3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param beginGlyphIndex
3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the index of the first glyph to return information for.
3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param numEntries
3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the number of glyphs to return information for.
3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param positionReturn
3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the array where the result will be stored.
3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return an array of glyph positions.
3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract float[] getGlyphPositions(int beginGlyphIndex, int numEntries,
3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            float[] positionReturn);
3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the glyph code of the specified glyph.
3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param glyphIndex
3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the index in this GlyphVector which corresponds to the glyph
3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            from which to retrieve the glyphcode.
3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the glyphcode of the specified glyph.
3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int getGlyphCode(int glyphIndex);
3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the first logical character's index of the specified glyph.
3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param glyphIndex
3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the glyph index.
3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the the first logical character's index.
3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int getGlyphCharIndex(int glyphIndex) {
3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // default implemetation one-to-one
3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return glyphIndex;
3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Sets default layout to this GlyphVector.
3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void performDefaultLayout();
3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the number of glyphs in the GlyphVector.
3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the number of glyphs in the GlyphVector.
3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract int getNumGlyphs();
3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets flags which describe the global state of the GlyphVector. The
3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * default implementation returns 0.
3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the layout flags
3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int getLayoutFlags() {
3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // default implementation - returned value is 0
4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
404