19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.graphics; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.TextUtils; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.SpannableString; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.SpannedString; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.GraphicsOperations; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Paint class holds the style and color information about how to draw 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * geometries, text and bitmaps. 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class Paint { 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ int mNativePaint; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private ColorFilter mColorFilter; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private MaskFilter mMaskFilter; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private PathEffect mPathEffect; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Rasterizer mRasterizer; 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Shader mShader; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Typeface mTypeface; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Xfermode mXfermode; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 39afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn private boolean mHasCompatScaling; 40afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn private float mCompatScaling; 41afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn private float mInvCompatScaling; 42afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final Style[] sStyleArray = { 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Style.FILL, Style.STROKE, Style.FILL_AND_STROKE 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final Cap[] sCapArray = { 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Cap.BUTT, Cap.ROUND, Cap.SQUARE 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final Join[] sJoinArray = { 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Join.MITER, Join.ROUND, Join.BEVEL 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final Align[] sAlignArray = { 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Align.LEFT, Align.CENTER, Align.RIGHT 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** bit mask for the flag enabling antialiasing */ 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ANTI_ALIAS_FLAG = 0x01; 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** bit mask for the flag enabling bitmap filtering */ 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FILTER_BITMAP_FLAG = 0x02; 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** bit mask for the flag enabling dithering */ 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int DITHER_FLAG = 0x04; 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** bit mask for the flag enabling underline text */ 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int UNDERLINE_TEXT_FLAG = 0x08; 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** bit mask for the flag enabling strike-thru text */ 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STRIKE_THRU_TEXT_FLAG = 0x10; 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** bit mask for the flag enabling fake-bold text */ 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FAKE_BOLD_TEXT_FLAG = 0x20; 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** bit mask for the flag enabling linear-text (no caching) */ 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int LINEAR_TEXT_FLAG = 0x40; 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** bit mask for the flag enabling subpixel-text */ 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SUBPIXEL_TEXT_FLAG = 0x80; 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** bit mask for the flag enabling device kerning for text */ 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int DEV_KERN_TEXT_FLAG = 0x100; 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // we use this when we first create a paint 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DEFAULT_PAINT_FLAGS = DEV_KERN_TEXT_FLAG; 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Style specifies if the primitive being drawn is filled, 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * stroked, or both (in the same color). The default is FILL. 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public enum Style { 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Geometry and text drawn with this style will be filled, ignoring all 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * stroke-related settings in the paint. 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FILL (0), 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Geometry and text drawn with this style will be stroked, respecting 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the stroke-related fields on the paint. 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project STROKE (1), 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Geometry and text drawn with this style will be both filled and 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * stroked at the same time, respecting the stroke-related fields on 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the paint. 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FILL_AND_STROKE (2); 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Style(int nativeInt) { 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.nativeInt = nativeInt; 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int nativeInt; 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Cap specifies the treatment for the beginning and ending of 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * stroked lines and paths. The default is BUTT. 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public enum Cap { 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The stroke ends with the path, and does not project beyond it. 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BUTT (0), 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 116c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * The stroke projects out as a semicircle, with the center at the 117c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * end of the path. 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ROUND (1), 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 121c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * The stroke projects out as a square, with the center at the end 122c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * of the path. 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SQUARE (2); 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Cap(int nativeInt) { 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.nativeInt = nativeInt; 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int nativeInt; 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Join specifies the treatment where lines and curve segments 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * join on a stroked path. The default is MITER. 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public enum Join { 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The outer edges of a join meet at a sharp angle 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MITER (0), 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The outer edges of a join meet in a circular arc. 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ROUND (1), 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The outer edges of a join meet with a straight line 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BEVEL (2); 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Join(int nativeInt) { 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.nativeInt = nativeInt; 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int nativeInt; 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Align specifies how drawText aligns its text relative to the 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * [x,y] coordinates. The default is LEFT. 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public enum Align { 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The text is drawn to the right of the x,y origin 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LEFT (0), 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The text is drawn centered horizontally on the x,y origin 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CENTER (1), 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The text is drawn to the left of the x,y origin 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project RIGHT (2); 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Align(int nativeInt) { 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.nativeInt = nativeInt; 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int nativeInt; 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new paint with default settings. 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Paint() { 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this(0); 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new paint with the specified flags. Use setFlags() to change 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * these after the paint is created. 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param flags initial flag bits, as if they were passed via setFlags(). 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Paint(int flags) { 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mNativePaint = native_init(); 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setFlags(flags | DEFAULT_PAINT_FLAGS); 196afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn mCompatScaling = mInvCompatScaling = 1; 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new paint, initialized with the attributes in the specified 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * paint parameter. 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param paint Existing paint used to initialized the attributes of the 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * new paint. 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Paint(Paint paint) { 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mNativePaint = native_initWithPaint(paint.mNativePaint); 208afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn mHasCompatScaling = paint.mHasCompatScaling; 209afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn mCompatScaling = paint.mCompatScaling; 210afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn mInvCompatScaling = paint.mInvCompatScaling; 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Restores the paint to its default settings. */ 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void reset() { 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_reset(mNativePaint); 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setFlags(DEFAULT_PAINT_FLAGS); 217afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn mHasCompatScaling = false; 218afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn mCompatScaling = mInvCompatScaling = 1; 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copy the fields from src into this paint. This is equivalent to calling 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * get() on all of the src fields, and calling the corresponding set() 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * methods on this. 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void set(Paint src) { 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this != src) { 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // copy over the native settings 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_set(mNativePaint, src.mNativePaint); 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // copy over our java settings 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mColorFilter = src.mColorFilter; 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMaskFilter = src.mMaskFilter; 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPathEffect = src.mPathEffect; 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRasterizer = src.mRasterizer; 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mShader = src.mShader; 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTypeface = src.mTypeface; 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mXfermode = src.mXfermode; 238afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn mHasCompatScaling = src.mHasCompatScaling; 239afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn mCompatScaling = src.mCompatScaling; 240afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn mInvCompatScaling = src.mInvCompatScaling; 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 244afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn /** @hide */ 245afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn public void setCompatibilityScaling(float factor) { 246afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn if (factor == 1.0) { 247afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn mHasCompatScaling = false; 248afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn mCompatScaling = mInvCompatScaling = 1.0f; 249afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn } else { 250afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn mHasCompatScaling = true; 251afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn mCompatScaling = factor; 252afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn mInvCompatScaling = 1.0f/factor; 253afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn } 254afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn } 255afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the paint's flags. Use the Flag enum to test flag values. 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the paint's flags (see enums ending in _Flag for bit masks) 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native int getFlags(); 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the paint's flags. Use the Flag enum to specific flag values. 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param flags The new flag bits for the paint 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setFlags(int flags); 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Helper for getFlags(), returning true if ANTI_ALIAS_FLAG bit is set 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * AntiAliasing smooths out the edges of what is being drawn, but is has 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * no impact on the interior of the shape. See setDither() and 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * setFilterBitmap() to affect how colors are treated. 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if the antialias bit is set in the paint's flags. 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final boolean isAntiAlias() { 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (getFlags() & ANTI_ALIAS_FLAG) != 0; 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Helper for setFlags(), setting or clearing the ANTI_ALIAS_FLAG bit 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * AntiAliasing smooths out the edges of what is being drawn, but is has 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * no impact on the interior of the shape. See setDither() and 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * setFilterBitmap() to affect how colors are treated. 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param aa true to set the antialias bit in the flags, false to clear it 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setAntiAlias(boolean aa); 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Helper for getFlags(), returning true if DITHER_FLAG bit is set 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Dithering affects how colors that are higher precision than the device 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are down-sampled. No dithering is generally faster, but higher precision 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * colors are just truncated down (e.g. 8888 -> 565). Dithering tries to 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distribute the error inherent in this process, to reduce the visual 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * artifacts. 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if the dithering bit is set in the paint's flags. 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final boolean isDither() { 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (getFlags() & DITHER_FLAG) != 0; 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Helper for setFlags(), setting or clearing the DITHER_FLAG bit 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Dithering affects how colors that are higher precision than the device 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are down-sampled. No dithering is generally faster, but higher precision 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * colors are just truncated down (e.g. 8888 -> 565). Dithering tries to 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distribute the error inherent in this process, to reduce the visual 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * artifacts. 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dither true to set the dithering bit in flags, false to clear it 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setDither(boolean dither); 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Helper for getFlags(), returning true if LINEAR_TEXT_FLAG bit is set 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if the lineartext bit is set in the paint's flags 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final boolean isLinearText() { 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (getFlags() & LINEAR_TEXT_FLAG) != 0; 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Helper for setFlags(), setting or clearing the LINEAR_TEXT_FLAG bit 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param linearText true to set the linearText bit in the paint's flags, 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * false to clear it. 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setLinearText(boolean linearText); 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Helper for getFlags(), returning true if SUBPIXEL_TEXT_FLAG bit is set 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if the subpixel bit is set in the paint's flags 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final boolean isSubpixelText() { 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (getFlags() & SUBPIXEL_TEXT_FLAG) != 0; 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Helper for setFlags(), setting or clearing the SUBPIXEL_TEXT_FLAG bit 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param subpixelText true to set the subpixelText bit in the paint's 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * flags, false to clear it. 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setSubpixelText(boolean subpixelText); 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Helper for getFlags(), returning true if UNDERLINE_TEXT_FLAG bit is set 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if the underlineText bit is set in the paint's flags. 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final boolean isUnderlineText() { 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (getFlags() & UNDERLINE_TEXT_FLAG) != 0; 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Helper for setFlags(), setting or clearing the UNDERLINE_TEXT_FLAG bit 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param underlineText true to set the underlineText bit in the paint's 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * flags, false to clear it. 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setUnderlineText(boolean underlineText); 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Helper for getFlags(), returning true if STRIKE_THRU_TEXT_FLAG bit is set 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if the strikeThruText bit is set in the paint's flags. 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final boolean isStrikeThruText() { 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (getFlags() & STRIKE_THRU_TEXT_FLAG) != 0; 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Helper for setFlags(), setting or clearing the STRIKE_THRU_TEXT_FLAG bit 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param strikeThruText true to set the strikeThruText bit in the paint's 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * flags, false to clear it. 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setStrikeThruText(boolean strikeThruText); 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Helper for getFlags(), returning true if FAKE_BOLD_TEXT_FLAG bit is set 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if the fakeBoldText bit is set in the paint's flags. 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final boolean isFakeBoldText() { 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (getFlags() & FAKE_BOLD_TEXT_FLAG) != 0; 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Helper for setFlags(), setting or clearing the STRIKE_THRU_TEXT_FLAG bit 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param fakeBoldText true to set the fakeBoldText bit in the paint's 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * flags, false to clear it. 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setFakeBoldText(boolean fakeBoldText); 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Whether or not the bitmap filter is activated. 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Filtering affects the sampling of bitmaps when they are transformed. 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Filtering does not affect how the colors in the bitmap are converted into 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * device pixels. That is dependent on dithering and xfermodes. 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setFilterBitmap(boolean) setFilterBitmap() 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final boolean isFilterBitmap() { 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (getFlags() & FILTER_BITMAP_FLAG) != 0; 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Helper for setFlags(), setting or clearing the FILTER_BITMAP_FLAG bit. 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Filtering affects the sampling of bitmaps when they are transformed. 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Filtering does not affect how the colors in the bitmap are converted into 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * device pixels. That is dependent on dithering and xfermodes. 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param filter true to set the FILTER_BITMAP_FLAG bit in the paint's 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * flags, false to clear it. 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setFilterBitmap(boolean filter); 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the paint's style, used for controlling how primitives' 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * geometries are interpreted (except for drawBitmap, which always assumes 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * FILL_STYLE). 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the paint's style setting (Fill, Stroke, StrokeAndFill) 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Style getStyle() { 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return sStyleArray[native_getStyle(mNativePaint)]; 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the paint's style, used for controlling how primitives' 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * geometries are interpreted (except for drawBitmap, which always assumes 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Fill). 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param style The new style to set in the paint 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setStyle(Style style) { 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_setStyle(mNativePaint, style.nativeInt); 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the paint's color. Note that the color is a 32bit value 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * containing alpha as well as r,g,b. This 32bit value is not premultiplied, 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * meaning that its alpha can be any value, regardless of the values of 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * r,g,b. See the Color class for more details. 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the paint's color (and alpha). 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native int getColor(); 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the paint's color. Note that the color is an int containing alpha 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as well as r,g,b. This 32bit value is not premultiplied, meaning that 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * its alpha can be any value, regardless of the values of r,g,b. 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the Color class for more details. 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param color The new color (including alpha) to set in the paint. 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setColor(int color); 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Helper to getColor() that just returns the color's alpha value. This is 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the same as calling getColor() >>> 24. It always returns a value between 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 0 (completely transparent) and 255 (completely opaque). 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the alpha component of the paint's color. 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native int getAlpha(); 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Helper to setColor(), that only assigns the color's alpha value, 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * leaving its r,g,b values unchanged. Results are undefined if the alpha 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * value is outside of the range [0..255] 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param a set the alpha component [0..255] of the paint's color. 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setAlpha(int a); 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Helper to setColor(), that takes a,r,g,b and constructs the color int 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param a The new alpha component (0..255) of the paint's color. 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param r The new red component (0..255) of the paint's color. 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param g The new green component (0..255) of the paint's color. 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param b The new blue component (0..255) of the paint's color. 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setARGB(int a, int r, int g, int b) { 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setColor((a << 24) | (r << 16) | (g << 8) | b); 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the width for stroking. 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p /> 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A value of 0 strokes in hairline mode. 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Hairlines always draws a single pixel independent of the canva's matrix. 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the paint's stroke width, used whenever the paint's style is 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Stroke or StrokeAndFill. 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native float getStrokeWidth(); 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the width for stroking. 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Pass 0 to stroke in hairline mode. 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Hairlines always draws a single pixel independent of the canva's matrix. 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param width set the paint's stroke width, used whenever the paint's 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * style is Stroke or StrokeAndFill. 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setStrokeWidth(float width); 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the paint's stroke miter value. Used to control the behavior 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of miter joins when the joins angle is sharp. 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the paint's miter limit, used whenever the paint's style is 5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Stroke or StrokeAndFill. 5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native float getStrokeMiter(); 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the paint's stroke miter value. This is used to control the behavior 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of miter joins when the joins angle is sharp. This value must be >= 0. 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param miter set the miter limit on the paint, used whenever the paint's 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * style is Stroke or StrokeAndFill. 5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setStrokeMiter(float miter); 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the paint's Cap, controlling how the start and end of stroked 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * lines and paths are treated. 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the line cap style for the paint, used whenever the paint's 5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * style is Stroke or StrokeAndFill. 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Cap getStrokeCap() { 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return sCapArray[native_getStrokeCap(mNativePaint)]; 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the paint's Cap. 5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cap set the paint's line cap style, used whenever the paint's 5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * style is Stroke or StrokeAndFill. 5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setStrokeCap(Cap cap) { 5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_setStrokeCap(mNativePaint, cap.nativeInt); 5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the paint's stroke join type. 5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the paint's Join. 5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Join getStrokeJoin() { 5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return sJoinArray[native_getStrokeJoin(mNativePaint)]; 5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the paint's Join. 5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param join set the paint's Join, used whenever the paint's style is 5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Stroke or StrokeAndFill. 5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setStrokeJoin(Join join) { 5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_setStrokeJoin(mNativePaint, join.nativeInt); 5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Applies any/all effects (patheffect, stroking) to src, returning the 5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * result in dst. The result is that drawing src with this paint will be 5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the same as drawing dst with a default paint (at least from the 5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * geometric perspective). 5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param src input path 5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dst output path (may be the same as src) 5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if the path should be filled, or false if it should be 5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * drawn with a hairline (width == 0) 5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean getFillPath(Path src, Path dst) { 5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return native_getFillPath(mNativePaint, src.ni(), dst.ni()); 5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get the paint's shader object. 5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the paint's shader (or null) 5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Shader getShader() { 5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mShader; 5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set or clear the shader object. 6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p /> 6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Pass null to clear any previous shader. 6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * As a convenience, the parameter passed is also returned. 6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param shader May be null. the new shader to be installed in the paint 6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return shader 6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Shader setShader(Shader shader) { 6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int shaderNative = 0; 6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (shader != null) 6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project shaderNative = shader.native_instance; 6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_setShader(mNativePaint, shaderNative); 6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mShader = shader; 6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return shader; 6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get the paint's colorfilter (maybe be null). 6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the paint's colorfilter (maybe be null) 6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ColorFilter getColorFilter() { 6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mColorFilter; 6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set or clear the paint's colorfilter, returning the parameter. 6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param filter May be null. The new filter to be installed in the paint 6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return filter 6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ColorFilter setColorFilter(ColorFilter filter) { 6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int filterNative = 0; 6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (filter != null) 6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project filterNative = filter.native_instance; 6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_setColorFilter(mNativePaint, filterNative); 6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mColorFilter = filter; 6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return filter; 6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get the paint's xfermode object. 6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the paint's xfermode (or null) 6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Xfermode getXfermode() { 6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mXfermode; 6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set or clear the xfermode object. 6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p /> 6559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Pass null to clear any previous xfermode. 6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * As a convenience, the parameter passed is also returned. 6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param xfermode May be null. The xfermode to be installed in the paint 6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return xfermode 6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Xfermode setXfermode(Xfermode xfermode) { 6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int xfermodeNative = 0; 6639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (xfermode != null) 6649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project xfermodeNative = xfermode.native_instance; 6659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_setXfermode(mNativePaint, xfermodeNative); 6669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mXfermode = xfermode; 6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return xfermode; 6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get the paint's patheffect object. 6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the paint's patheffect (or null) 6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PathEffect getPathEffect() { 6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mPathEffect; 6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set or clear the patheffect object. 6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p /> 6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Pass null to clear any previous patheffect. 6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * As a convenience, the parameter passed is also returned. 6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param effect May be null. The patheffect to be installed in the paint 6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return effect 6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PathEffect setPathEffect(PathEffect effect) { 6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int effectNative = 0; 6909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (effect != null) { 6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project effectNative = effect.native_instance; 6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_setPathEffect(mNativePaint, effectNative); 6949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPathEffect = effect; 6959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return effect; 6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get the paint's maskfilter object. 7009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the paint's maskfilter (or null) 7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public MaskFilter getMaskFilter() { 7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mMaskFilter; 7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set or clear the maskfilter object. 7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p /> 7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Pass null to clear any previous maskfilter. 7119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * As a convenience, the parameter passed is also returned. 7129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param maskfilter May be null. The maskfilter to be installed in the 7149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * paint 7159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return maskfilter 7169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public MaskFilter setMaskFilter(MaskFilter maskfilter) { 7189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int maskfilterNative = 0; 7199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (maskfilter != null) { 7209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project maskfilterNative = maskfilter.native_instance; 7219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_setMaskFilter(mNativePaint, maskfilterNative); 7239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMaskFilter = maskfilter; 7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return maskfilter; 7259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get the paint's typeface object. 7299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p /> 7309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The typeface object identifies which font to use when drawing or 7319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * measuring text. 7329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the paint's typeface (or null) 7349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Typeface getTypeface() { 7369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mTypeface; 7379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set or clear the typeface object. 7419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p /> 7429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Pass null to clear any previous typeface. 7439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * As a convenience, the parameter passed is also returned. 7449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param typeface May be null. The typeface to be installed in the paint 7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return typeface 7479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Typeface setTypeface(Typeface typeface) { 7499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int typefaceNative = 0; 7509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (typeface != null) { 7519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project typefaceNative = typeface.native_instance; 7529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_setTypeface(mNativePaint, typefaceNative); 7549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTypeface = typeface; 7559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return typeface; 7569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get the paint's rasterizer (or null). 7609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p /> 7619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The raster controls/modifies how paths/text are turned into alpha masks. 7629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the paint's rasterizer (or null) 7649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Rasterizer getRasterizer() { 7669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mRasterizer; 7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set or clear the rasterizer object. 7719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p /> 7729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Pass null to clear any previous rasterizer. 7739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * As a convenience, the parameter passed is also returned. 7749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param rasterizer May be null. The new rasterizer to be installed in 7769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the paint. 7779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return rasterizer 7789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Rasterizer setRasterizer(Rasterizer rasterizer) { 7809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int rasterizerNative = 0; 7819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (rasterizer != null) { 7829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project rasterizerNative = rasterizer.native_instance; 7839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_setRasterizer(mNativePaint, rasterizerNative); 7859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRasterizer = rasterizer; 7869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return rasterizer; 7879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Temporary API to expose layer drawing. This draws a shadow layer below 7919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the main layer, with the specified offset and color, and blur radius. 7929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If radius is 0, then the shadow layer is removed. 7939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setShadowLayer(float radius, float dx, float dy, 7959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int color); 7969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Temporary API to clear the shadow layer. 7999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void clearShadowLayer() { 8019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setShadowLayer(0, 0, 0, 0); 8029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the paint's Align value for drawing text. This controls how the 8069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * text is positioned relative to its origin. LEFT align means that all of 8079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the text will be drawn to the right of its origin (i.e. the origin 8089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specifieds the LEFT edge of the text) and so on. 8099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the paint's Align value for drawing text. 8119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Align getTextAlign() { 8139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return sAlignArray[native_getTextAlign(mNativePaint)]; 8149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the paint's text alignment. This controls how the 8189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * text is positioned relative to its origin. LEFT align means that all of 8199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the text will be drawn to the right of its origin (i.e. the origin 8209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specifieds the LEFT edge of the text) and so on. 8219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param align set the paint's Align value for drawing text. 8239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setTextAlign(Align align) { 8259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_setTextAlign(mNativePaint, align.nativeInt); 8269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the paint's text size. 8309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the paint's text size. 8329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native float getTextSize(); 8349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the paint's text size. This value must be > 0 8379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param textSize set the paint's text size. 8399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setTextSize(float textSize); 8419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the paint's horizontal scale factor for text. The default value 8449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is 1.0. 8459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the paint's scale factor in X for drawing/measuring text 8479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native float getTextScaleX(); 8499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the paint's horizontal scale factor for text. The default value 8529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is 1.0. Values > 1.0 will stretch the text wider. Values < 1.0 will 8539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * stretch the text narrower. 8549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param scaleX set the paint's scale in X for drawing/measuring text. 8569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setTextScaleX(float scaleX); 8589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the paint's horizontal skew factor for text. The default value 8619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is 0. 8629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the paint's skew factor in X for drawing text. 8649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native float getTextSkewX(); 8669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the paint's horizontal skew factor for text. The default value 8699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is 0. For approximating oblique text, use values around -0.25. 8709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param skewX set the paint's skew factor in X for drawing text. 8729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native void setTextSkewX(float skewX); 8749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the distance above (negative) the baseline (ascent) based on the 8779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * current typeface and text size. 8789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the distance above (negative) the baseline (ascent) based on the 8809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * current typeface and text size. 8819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native float ascent(); 8839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the distance below (positive) the baseline (descent) based on the 8869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * current typeface and text size. 8879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the distance below (positive) the baseline (descent) based on 8899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the current typeface and text size. 8909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native float descent(); 8929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Class that describes the various metrics for a font at a given text size. 8959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Remember, Y values increase going down, so those values will be positive, 8969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and values that measure distances going up will be negative. This class 8979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is returned by getFontMetrics(). 8989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class FontMetrics { 9009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The maximum distance above the baseline for the tallest glyph in 9029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the font at a given text size. 9039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public float top; 9059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The recommended distance above the baseline for singled spaced text. 9079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public float ascent; 9099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The recommended distance below the baseline for singled spaced text. 9119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public float descent; 9139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The maximum distance below the baseline for the lowest glyph in 9159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the font at a given text size. 9169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public float bottom; 9189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The recommended additional space to add between lines of text. 9209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public float leading; 9229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the font's recommended interline spacing, given the Paint's 9269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * settings for typeface, textSize, etc. If metrics is not null, return the 9279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * fontmetric values in it. 9289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param metrics If this object is not null, its fields are filled with 9309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the appropriate values given the paint's text attributes. 9319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the font's recommended interline spacing. 9329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native float getFontMetrics(FontMetrics metrics); 9349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Allocates a new FontMetrics object, and then calls getFontMetrics(fm) 9379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with it, returning the object. 9389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public FontMetrics getFontMetrics() { 9409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FontMetrics fm = new FontMetrics(); 9419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getFontMetrics(fm); 9429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return fm; 9439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Convenience method for callers that want to have FontMetrics values as 9479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * integers. 9489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class FontMetricsInt { 9509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int top; 9519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int ascent; 9529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int descent; 9539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int bottom; 9549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int leading; 9559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override public String toString() { 9579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "FontMetricsInt: top=" + top + " ascent=" + ascent + 9589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " descent=" + descent + " bottom=" + bottom + 9599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " leading=" + leading; 9609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the font's interline spacing, given the Paint's settings for 9659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * typeface, textSize, etc. If metrics is not null, return the fontmetric 9669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * values in it. Note: all values have been converted to integers from 9679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * floats, in such a way has to make the answers useful for both spacing 9689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and clipping. If you want more control over the rounding, call 9699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * getFontMetrics(). 9709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the font's interline spacing. 9729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native int getFontMetricsInt(FontMetricsInt fmi); 9749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public FontMetricsInt getFontMetricsInt() { 9769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FontMetricsInt fm = new FontMetricsInt(); 9779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getFontMetricsInt(fm); 9789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return fm; 9799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the recommend line spacing based on the current typeface and 9839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * text size. 9849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return recommend line spacing based on the current typeface and 9869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * text size. 9879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public float getFontSpacing() { 9899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getFontMetrics(null); 9909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the width of the text. 9949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param text The text to measure 9969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param index The index of the first character to start measuring 9979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param count THe number of characters to measure, beginning with start 9989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The width of the text 9999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1000afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn public float measureText(char[] text, int index, int count) { 1001afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn if (!mHasCompatScaling) return native_measureText(text, index, count); 1002afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn final float oldSize = getTextSize(); 1003afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn setTextSize(oldSize*mCompatScaling); 1004afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn float w = native_measureText(text, index, count); 1005afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn setTextSize(oldSize); 1006afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn return w*mInvCompatScaling; 1007afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn } 10089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1009afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn private native float native_measureText(char[] text, int index, int count); 1010afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn 10119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the width of the text. 10139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param text The text to measure 10159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param start The index of the first character to start measuring 10169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param end 1 beyond the index of the last character to measure 10179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The width of the text 10189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1019afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn public float measureText(String text, int start, int end) { 1020afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn if (!mHasCompatScaling) return native_measureText(text, start, end); 1021afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn final float oldSize = getTextSize(); 1022afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn setTextSize(oldSize*mCompatScaling); 1023afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn float w = native_measureText(text, start, end); 1024afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn setTextSize(oldSize); 1025afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn return w*mInvCompatScaling; 1026afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn } 10279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1028afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn private native float native_measureText(String text, int start, int end); 1029afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn 10309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the width of the text. 10329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param text The text to measure 10349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The width of the text 10359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1036afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn public float measureText(String text) { 1037afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn if (!mHasCompatScaling) return native_measureText(text); 1038afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn final float oldSize = getTextSize(); 1039afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn setTextSize(oldSize*mCompatScaling); 1040afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn float w = native_measureText(text); 1041afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn setTextSize(oldSize); 1042afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn return w*mInvCompatScaling; 1043afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn } 10449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1045afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn private native float native_measureText(String text); 1046afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn 10479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the width of the text. 10499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param text The text to measure 10519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param start The index of the first character to start measuring 10529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param end 1 beyond the index of the last character to measure 10539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The width of the text 10549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public float measureText(CharSequence text, int start, int end) { 10569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (text instanceof String) { 10579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return measureText((String)text, start, end); 10589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (text instanceof SpannedString || 10609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project text instanceof SpannableString) { 10619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return measureText(text.toString(), start, end); 10629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (text instanceof GraphicsOperations) { 10649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ((GraphicsOperations)text).measureText(start, end, this); 10659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char[] buf = TemporaryBuffer.obtain(end - start); 1068afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn TextUtils.getChars(text, start, end, buf, 0); 1069afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn float result = measureText(buf, 0, end - start); 10709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TemporaryBuffer.recycle(buf); 1071afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn return result; 10729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Measure the text, stopping early if the measured width exceeds maxWidth. 10769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the number of chars that were measured, and if measuredWidth is 10779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not null, return in it the actual width measured. 10789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param text The text to measure 10809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param index The offset into text to begin measuring at 10819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param count The number of maximum number of entries to measure. If count 10829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is negative, then the characters before index are measured 10839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in reverse order. This allows for measuring the end of 10849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * string. 10859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param maxWidth The maximum width to accumulate. 10869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param measuredWidth Optional. If not null, returns the actual width 10879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * measured. 10889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The number of chars that were measured. Will always be <= 10899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * abs(count). 10909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1091afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn public int breakText(char[] text, int index, int count, 1092afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn float maxWidth, float[] measuredWidth) { 1093afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn if (!mHasCompatScaling) { 1094afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn return native_breakText(text, index, count, maxWidth, measuredWidth); 1095afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn } 1096afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn final float oldSize = getTextSize(); 1097afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn setTextSize(oldSize*mCompatScaling); 1098afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn int res = native_breakText(text, index, count, maxWidth*mCompatScaling, 1099afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn measuredWidth); 1100afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn setTextSize(oldSize); 1101afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn if (measuredWidth != null) measuredWidth[0] *= mInvCompatScaling; 1102afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn return res; 1103afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn } 1104afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn 1105c20a9608f379b23aee473f992a327ac26a31ba17Dianne Hackborn private native int native_breakText(char[] text, int index, int count, 1106c20a9608f379b23aee473f992a327ac26a31ba17Dianne Hackborn float maxWidth, float[] measuredWidth); 11079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Measure the text, stopping early if the measured width exceeds maxWidth. 11109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the number of chars that were measured, and if measuredWidth is 11119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not null, return in it the actual width measured. 11129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param text The text to measure 11149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param start The offset into text to begin measuring at 11159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param end The end of the text slice to measure. 11169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param measureForwards If true, measure forwards, starting at start. 11179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Otherwise, measure backwards, starting with end. 11189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param maxWidth The maximum width to accumulate. 11199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param measuredWidth Optional. If not null, returns the actual width 11209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * measured. 11219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The number of chars that were measured. Will always be <= 11229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * abs(end - start). 11239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int breakText(CharSequence text, int start, int end, 11259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean measureForwards, 11269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float maxWidth, float[] measuredWidth) { 11279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (start == 0 && text instanceof String && end == text.length()) { 11289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return breakText((String) text, measureForwards, maxWidth, 11299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project measuredWidth); 11309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char[] buf = TemporaryBuffer.obtain(end - start); 11339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int result; 11349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TextUtils.getChars(text, start, end, buf, 0); 11369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (measureForwards) { 11389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = breakText(buf, 0, end - start, maxWidth, measuredWidth); 11399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 11409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = breakText(buf, 0, -(end - start), maxWidth, measuredWidth); 11419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TemporaryBuffer.recycle(buf); 11449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return result; 11459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Measure the text, stopping early if the measured width exceeds maxWidth. 11499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the number of chars that were measured, and if measuredWidth is 11509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not null, return in it the actual width measured. 11519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param text The text to measure 115333a31b314f571ddcbef003e8a399c20ddeff6905Dirk Dougherty * @param measureForwards If true, measure forwards, starting with the 115433a31b314f571ddcbef003e8a399c20ddeff6905Dirk Dougherty * first character in the string. Otherwise, 115533a31b314f571ddcbef003e8a399c20ddeff6905Dirk Dougherty * measure backwards, starting with the 11569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * last character in the string. 11579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param maxWidth The maximum width to accumulate. 11589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param measuredWidth Optional. If not null, returns the actual width 11599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * measured. 11609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The number of chars that were measured. Will always be <= 11619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * abs(count). 11629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1163afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn public int breakText(String text, boolean measureForwards, 1164afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn float maxWidth, float[] measuredWidth) { 1165afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn if (!mHasCompatScaling) { 1166afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn return native_breakText(text, measureForwards, maxWidth, measuredWidth); 1167afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn } 1168afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn final float oldSize = getTextSize(); 1169afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn setTextSize(oldSize*mCompatScaling); 1170afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn int res = native_breakText(text, measureForwards, maxWidth*mCompatScaling, 1171afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn measuredWidth); 1172afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn setTextSize(oldSize); 1173afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn if (measuredWidth != null) measuredWidth[0] *= mInvCompatScaling; 1174afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn return res; 1175afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn } 1176afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn 1177c20a9608f379b23aee473f992a327ac26a31ba17Dianne Hackborn private native int native_breakText(String text, boolean measureForwards, 1178c20a9608f379b23aee473f992a327ac26a31ba17Dianne Hackborn float maxWidth, float[] measuredWidth); 11799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the advance widths for the characters in the string. 11829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param text The text to measure 11849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param index The index of the first char to to measure 11859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param count The number of chars starting with index to measure 11869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param widths array to receive the advance widths of the characters. 11879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Must be at least a large as count. 11889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the actual number of widths returned. 11899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getTextWidths(char[] text, int index, int count, 11919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float[] widths) { 11929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((index | count) < 0 || index + count > text.length 11939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || count > widths.length) { 11949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new ArrayIndexOutOfBoundsException(); 11959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1196afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn 1197afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn if (!mHasCompatScaling) { 1198afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn return native_getTextWidths(mNativePaint, text, index, count, widths); 1199afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn } 1200afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn final float oldSize = getTextSize(); 1201afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn setTextSize(oldSize*mCompatScaling); 1202afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn int res = native_getTextWidths(mNativePaint, text, index, count, widths); 1203afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn setTextSize(oldSize); 1204afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn for (int i=0; i<res; i++) { 1205afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn widths[i] *= mInvCompatScaling; 1206afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn } 1207afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn return res; 12089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the advance widths for the characters in the string. 12129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param text The text to measure 12149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param start The index of the first char to to measure 12159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param end The end of the text slice to measure 12169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param widths array to receive the advance widths of the characters. 12179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Must be at least a large as (end - start). 12189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the actual number of widths returned. 12199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getTextWidths(CharSequence text, int start, int end, 12219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float[] widths) { 12229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (text instanceof String) { 12239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getTextWidths((String) text, start, end, widths); 12249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (text instanceof SpannedString || 12269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project text instanceof SpannableString) { 12279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getTextWidths(text.toString(), start, end, widths); 12289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (text instanceof GraphicsOperations) { 12309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ((GraphicsOperations) text).getTextWidths(start, end, 12319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project widths, this); 12329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char[] buf = TemporaryBuffer.obtain(end - start); 12359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TextUtils.getChars(text, start, end, buf, 0); 12369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int result = getTextWidths(buf, 0, end - start, widths); 12379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TemporaryBuffer.recycle(buf); 12389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return result; 12399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the advance widths for the characters in the string. 12439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param text The text to measure 12459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param start The index of the first char to to measure 12469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param end The end of the text slice to measure 12479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param widths array to receive the advance widths of the characters. 12489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Must be at least a large as the text. 12499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the number of unichars in the specified text. 12509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getTextWidths(String text, int start, int end, float[] widths) { 12529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((start | end | (end - start) | (text.length() - end)) < 0) { 12539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IndexOutOfBoundsException(); 12549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (end - start > widths.length) { 12569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new ArrayIndexOutOfBoundsException(); 12579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1258afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn 1259afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn if (!mHasCompatScaling) { 1260afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn return native_getTextWidths(mNativePaint, text, start, end, widths); 1261afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn } 1262afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn final float oldSize = getTextSize(); 1263afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn setTextSize(oldSize*mCompatScaling); 1264afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn int res = native_getTextWidths(mNativePaint, text, start, end, widths); 1265afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn setTextSize(oldSize); 1266afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn for (int i=0; i<res; i++) { 1267afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn widths[i] *= mInvCompatScaling; 1268afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn } 1269afa78967b8553443aa32579d78970a076d7581f6Dianne Hackborn return res; 12709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the advance widths for the characters in the string. 12749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param text The text to measure 12769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param widths array to receive the advance widths of the characters. 12779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Must be at least a large as the text. 12789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the number of unichars in the specified text. 12799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getTextWidths(String text, float[] widths) { 12819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getTextWidths(text, 0, text.length(), widths); 12829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the path (outline) for the specified text. 12869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Note: just like Canvas.drawText, this will respect the Align setting in 12879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the paint. 12889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param text The text to retrieve the path from 12909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param index The index of the first character in text 12919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param count The number of characterss starting with index 12929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x The x coordinate of the text's origin 12939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y The y coordinate of the text's origin 12949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param path The path to receive the data describing the text. Must 12959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be allocated by the caller. 12969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void getTextPath(char[] text, int index, int count, 12989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float x, float y, Path path) { 12999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((index | count) < 0 || index + count > text.length) { 13009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new ArrayIndexOutOfBoundsException(); 13019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_getTextPath(mNativePaint, text, index, count, x, y, path.ni()); 13039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the path (outline) for the specified text. 13079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Note: just like Canvas.drawText, this will respect the Align setting 13089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in the paint. 13099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param text The text to retrieve the path from 13119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param start The first character in the text 13129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param end 1 past the last charcter in the text 13139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x The x coordinate of the text's origin 13149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y The y coordinate of the text's origin 13159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param path The path to receive the data describing the text. Must 13169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be allocated by the caller. 13179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void getTextPath(String text, int start, int end, 13199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float x, float y, Path path) { 13209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((start | end | (end - start) | (text.length() - end)) < 0) { 13219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IndexOutOfBoundsException(); 13229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_getTextPath(mNativePaint, text, start, end, x, y, path.ni()); 13249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return in bounds (allocated by the caller) the smallest rectangle that 13289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * encloses all of the characters, with an implied origin at (0,0). 13299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param text String to measure and return its bounds 13319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param start Index of the first char in the string to measure 13329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param end 1 past the last char in the string measure 13339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param bounds Returns the unioned bounds of all the text. Must be 13349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * allocated by the caller. 13359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void getTextBounds(String text, int start, int end, Rect bounds) { 13379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((start | end | (end - start) | (text.length() - end)) < 0) { 13389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IndexOutOfBoundsException(); 13399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (bounds == null) { 13419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NullPointerException("need bounds Rect"); 13429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project nativeGetStringBounds(mNativePaint, text, start, end, bounds); 13449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return in bounds (allocated by the caller) the smallest rectangle that 13489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * encloses all of the characters, with an implied origin at (0,0). 13499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param text Array of chars to measure and return their unioned bounds 13519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param index Index of the first char in the array to measure 13529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param count The number of chars, beginning at index, to measure 13539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param bounds Returns the unioned bounds of all the text. Must be 13549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * allocated by the caller. 13559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void getTextBounds(char[] text, int index, int count, Rect bounds) { 13579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((index | count) < 0 || index + count > text.length) { 13589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new ArrayIndexOutOfBoundsException(); 13599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (bounds == null) { 13619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NullPointerException("need bounds Rect"); 13629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project nativeGetCharArrayBounds(mNativePaint, text, index, count, bounds); 13649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void finalize() throws Throwable { 13679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project finalizer(mNativePaint); 13689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native int native_init(); 13719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native int native_initWithPaint(int paint); 13729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void native_reset(int native_object); 13739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void native_set(int native_dst, int native_src); 13749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native int native_getStyle(int native_object); 13759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void native_setStyle(int native_object, int style); 13769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native int native_getStrokeCap(int native_object); 13779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void native_setStrokeCap(int native_object, int cap); 13789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native int native_getStrokeJoin(int native_object); 13799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void native_setStrokeJoin(int native_object, 13809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int join); 13819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean native_getFillPath(int native_object, 13829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int src, int dst); 13839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native int native_setShader(int native_object, int shader); 13849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native int native_setColorFilter(int native_object, 13859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int filter); 13869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native int native_setXfermode(int native_object, 13879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int xfermode); 13889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native int native_setPathEffect(int native_object, 13899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int effect); 13909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native int native_setMaskFilter(int native_object, 13919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int maskfilter); 13929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native int native_setTypeface(int native_object, 13939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int typeface); 13949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native int native_setRasterizer(int native_object, 13959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int rasterizer); 13969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native int native_getTextAlign(int native_object); 13989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void native_setTextAlign(int native_object, 13999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int align); 14009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native float native_getFontMetrics(int native_paint, 14029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FontMetrics metrics); 14039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native int native_getTextWidths(int native_object, 14049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char[] text, int index, int count, float[] widths); 14059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native int native_getTextWidths(int native_object, 14069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String text, int start, int end, float[] widths); 14079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void native_getTextPath(int native_object, 14089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char[] text, int index, int count, float x, float y, int path); 14099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void native_getTextPath(int native_object, 14109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String text, int start, int end, float x, float y, int path); 14119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void nativeGetStringBounds(int nativePaint, 14129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String text, int start, int end, Rect bounds); 14139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void nativeGetCharArrayBounds(int nativePaint, 14149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char[] text, int index, int count, Rect bounds); 14159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void finalizer(int nativePaint); 14169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 14179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1418