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