Paint_Delegate.java revision b44b43b1579486ff7ecd0f7528f17711acdeae98
19f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet/* 29f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * Copyright (C) 2010 The Android Open Source Project 39f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * 49f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * Licensed under the Apache License, Version 2.0 (the "License"); 59f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * you may not use this file except in compliance with the License. 69f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * You may obtain a copy of the License at 79f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * 89f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * http://www.apache.org/licenses/LICENSE-2.0 99f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * 109f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * Unless required by applicable law or agreed to in writing, software 119f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * distributed under the License is distributed on an "AS IS" BASIS, 129f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * See the License for the specific language governing permissions and 149f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * limitations under the License. 159f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet */ 169f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 179f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohetpackage android.graphics; 189f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 19d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohetimport com.android.layoutlib.bridge.Bridge; 20c2e9651bf386a1f7bf7fc706cf5424950570470cXavier Ducrohetimport com.android.layoutlib.bridge.impl.DelegateManager; 219f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 229f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohetimport android.graphics.Paint.FontMetrics; 239f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohetimport android.graphics.Paint.FontMetricsInt; 245802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohetimport android.text.TextUtils; 259f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 265802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohetimport java.awt.BasicStroke; 279f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohetimport java.awt.Font; 28b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohetimport java.awt.Shape; 29b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohetimport java.awt.Stroke; 309f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohetimport java.awt.Toolkit; 319f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohetimport java.awt.font.FontRenderContext; 329f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohetimport java.awt.geom.AffineTransform; 339f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohetimport java.util.ArrayList; 349f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohetimport java.util.Collections; 359f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohetimport java.util.List; 369f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 379f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet/** 389f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * Delegate implementing the native methods of android.graphics.Paint 399f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * 409f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * Through the layoutlib_create tool, the original native methods of Paint have been replaced 419f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * by calls to methods of the same name in this delegate class. 429f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * 439f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * This class behaves like the original native implementation, but in Java, keeping previously 449f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * native data into its own objects and mapping them to int that are sent back and forth between 459f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * it and the original Paint class. 469f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * 479f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * @see DelegateManager 489f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * 499f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet */ 509f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohetpublic class Paint_Delegate { 519f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 529f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /** 539f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * Class associating a {@link Font} and it's {@link java.awt.FontMetrics}. 549f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet */ 555802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet /*package*/ static final class FontInfo { 569f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Font mFont; 579f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet java.awt.FontMetrics mMetrics; 589f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 599f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 609f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // ---- delegate manager ---- 619f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private static final DelegateManager<Paint_Delegate> sManager = 629f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet new DelegateManager<Paint_Delegate>(); 639f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 649f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // ---- delegate helper data ---- 659f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private List<FontInfo> mFonts; 669f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private final FontRenderContext mFontContext = new FontRenderContext( 679f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet new AffineTransform(), true, true); 689f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 699f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // ---- delegate data ---- 709f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private int mFlags; 719f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private int mColor; 729f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private int mStyle; 739f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private int mCap; 749f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private int mJoin; 755802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet private int mTextAlign; 769f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private int mTypeface; 779f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private float mStrokeWidth; 789f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private float mStrokeMiter; 799f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private float mTextSize; 809f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private float mTextScaleX; 819f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private float mTextSkewX; 829f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 83abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet private int mXfermode; 84abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet private int mColorFilter; 85abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet private int mShader; 86abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet private int mPathEffect; 87abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet private int mMaskFilter; 88d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet private int mRasterizer; 89abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet 909f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 919f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // ---- Public Helper methods ---- 929f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 935802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet public static Paint_Delegate getDelegate(int native_paint) { 945802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return sManager.getDelegate(native_paint); 955802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 965802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 979f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /** 989f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * Returns the list of {@link Font} objects. The first item is the main font, the rest 999f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * are fall backs for characters not present in the main font. 1009f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet */ 1019f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet public List<FontInfo> getFonts() { 1029f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return mFonts; 1039f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 1049f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 105abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet public boolean isAntiAliased() { 106abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet return (mFlags & Paint.ANTI_ALIAS_FLAG) != 0; 107abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet } 108abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet 1095802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet public boolean isFilterBitmap() { 1105802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return (mFlags & Paint.FILTER_BITMAP_FLAG) != 0; 1115802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1125802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 1135802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet public int getStyle() { 1145802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return mStyle; 1155802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1165802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 1175802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet public int getColor() { 1185802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return mColor; 1195802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1205802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 12163fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet public int getAlpha() { 12263fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet return mColor >>> 24; 12363fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet } 12463fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet 125d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet public void setAlpha(int alpha) { 126d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet mColor = (alpha << 24) | (mColor & 0x00FFFFFF); 127d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet } 128d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet 1295802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet public int getTextAlign() { 1305802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return mTextAlign; 1315802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1325802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 1335802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet public float getStrokeWidth() { 1345802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return mStrokeWidth; 1355802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1365802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 13763fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet /** 13863fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet * returns the value of stroke miter needed by the java api. 13963fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet */ 14063fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet public float getJavaStrokeMiter() { 141d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet float miter = mStrokeMiter * mStrokeWidth; 142d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet if (miter < 1.f) { 143d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet miter = 1.f; 144d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet } 145d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet return miter; 1465802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1475802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 1485802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet public int getJavaCap() { 1495802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet switch (Paint.sCapArray[mCap]) { 1505802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet case BUTT: 1515802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return BasicStroke.CAP_BUTT; 1525802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet case ROUND: 1535802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return BasicStroke.CAP_ROUND; 1545802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet default: 1555802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet case SQUARE: 1565802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return BasicStroke.CAP_SQUARE; 1575802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1585802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1595802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 1605802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet public int getJavaJoin() { 1615802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet switch (Paint.sJoinArray[mJoin]) { 1625802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet default: 1635802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet case MITER: 1645802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return BasicStroke.JOIN_MITER; 1655802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet case ROUND: 1665802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return BasicStroke.JOIN_ROUND; 1675802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet case BEVEL: 1685802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return BasicStroke.JOIN_BEVEL; 1695802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1705802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1719f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 172b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet public Stroke getJavaStroke() { 173b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet PathEffect_Delegate effectDelegate = PathEffect_Delegate.getDelegate(mPathEffect); 174b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (effectDelegate != null) { 175b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (effectDelegate.isSupported()) { 176b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Stroke stroke = effectDelegate.getStroke(this); 177b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet assert stroke != null; 178b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (stroke != null) { 179b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return stroke; 180b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 181b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } else { 182b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Bridge.getLog().fidelityWarning(null, 183b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet effectDelegate.getSupportMessage(), 184b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet null); 185b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 186b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 187b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 188b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet // if no custom stroke as been set, set the default one. 189b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return new BasicStroke( 190b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet getStrokeWidth(), 191b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet getJavaCap(), 192b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet getJavaJoin(), 193b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet getJavaStrokeMiter()); 194b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 195b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 196d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet /** 197d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * Returns the {@link Xfermode} delegate or null if none have been set 198d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * 199d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * @return the delegate or null. 200d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet */ 201d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet public Xfermode_Delegate getXfermode() { 202d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet return Xfermode_Delegate.getDelegate(mXfermode); 203251d2e99245095369b52d891a660b2ed270f02e0Xavier Ducrohet } 204251d2e99245095369b52d891a660b2ed270f02e0Xavier Ducrohet 205d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet /** 206d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * Returns the {@link ColorFilter} delegate or null if none have been set 207d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * 208d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * @return the delegate or null. 209d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet */ 210d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet public ColorFilter_Delegate getColorFilter() { 211d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet return ColorFilter_Delegate.getDelegate(mColorFilter); 212251d2e99245095369b52d891a660b2ed270f02e0Xavier Ducrohet } 213251d2e99245095369b52d891a660b2ed270f02e0Xavier Ducrohet 214d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet /** 215d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * Returns the {@link Shader} delegate or null if none have been set 216d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * 217d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * @return the delegate or null. 218d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet */ 219d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet public Shader_Delegate getShader() { 220d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet return Shader_Delegate.getDelegate(mShader); 221251d2e99245095369b52d891a660b2ed270f02e0Xavier Ducrohet } 222251d2e99245095369b52d891a660b2ed270f02e0Xavier Ducrohet 223d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet /** 224d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * Returns the {@link MaskFilter} delegate or null if none have been set 225d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * 226d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * @return the delegate or null. 227d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet */ 228d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet public MaskFilter_Delegate getMaskFilter() { 229d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet return MaskFilter_Delegate.getDelegate(mMaskFilter); 230d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet } 231d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet 232d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet /** 233d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * Returns the {@link Rasterizer} delegate or null if none have been set 234d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * 235d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * @return the delegate or null. 236d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet */ 237d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet public Rasterizer_Delegate getRasterizer() { 238d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet return Rasterizer_Delegate.getDelegate(mRasterizer); 239251d2e99245095369b52d891a660b2ed270f02e0Xavier Ducrohet } 240251d2e99245095369b52d891a660b2ed270f02e0Xavier Ducrohet 2419f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // ---- native methods ---- 2429f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 2439f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int getFlags(Paint thisPaint) { 2449f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 2459f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 2469f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 2479f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 2489f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 2499f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 2509f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mFlags; 2519f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 2529f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 2539f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setFlags(Paint thisPaint, int flags) { 2549f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 2559f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 2569f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 2579f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 2589f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 2599f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 2609f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mFlags = flags; 2619f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 2629f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 2639f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setFilterBitmap(Paint thisPaint, boolean filter) { 2645802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet setFlag(thisPaint, Paint.FILTER_BITMAP_FLAG, filter); 2659f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 2669f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 2679f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setAntiAlias(Paint thisPaint, boolean aa) { 2689f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet setFlag(thisPaint, Paint.ANTI_ALIAS_FLAG, aa); 2699f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 2709f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 2719f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setSubpixelText(Paint thisPaint, boolean subpixelText) { 2729f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet setFlag(thisPaint, Paint.SUBPIXEL_TEXT_FLAG, subpixelText); 2739f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 2749f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 2759f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setUnderlineText(Paint thisPaint, boolean underlineText) { 2769f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet setFlag(thisPaint, Paint.UNDERLINE_TEXT_FLAG, underlineText); 2779f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 2789f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 2799f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setStrikeThruText(Paint thisPaint, boolean strikeThruText) { 2809f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet setFlag(thisPaint, Paint.STRIKE_THRU_TEXT_FLAG, strikeThruText); 2819f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 2829f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 2839f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setFakeBoldText(Paint thisPaint, boolean fakeBoldText) { 2849f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet setFlag(thisPaint, Paint.FAKE_BOLD_TEXT_FLAG, fakeBoldText); 2859f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 2869f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 2879f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setDither(Paint thisPaint, boolean dither) { 2889f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet setFlag(thisPaint, Paint.DITHER_FLAG, dither); 2899f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 2909f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 2919f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setLinearText(Paint thisPaint, boolean linearText) { 2929f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet setFlag(thisPaint, Paint.LINEAR_TEXT_FLAG, linearText); 2939f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 2949f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 2959f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int getColor(Paint thisPaint) { 2969f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 2979f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 2989f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 2999f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 3009f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3019f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3029f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mColor; 3039f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3049f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3059f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setColor(Paint thisPaint, int color) { 3069f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 3079f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 3089f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 3099f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 3109f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3119f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3129f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mColor = color; 3139f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3149f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3159f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int getAlpha(Paint thisPaint) { 3169f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 3179f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 3189f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 3199f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 3209f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3219f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 32263fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet return delegate.getAlpha(); 3239f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3249f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3259f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setAlpha(Paint thisPaint, int a) { 3269f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 3279f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 3289f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 3299f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 3309f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3319f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 332d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet delegate.setAlpha(a); 3339f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3349f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3359f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static float getStrokeWidth(Paint thisPaint) { 3369f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 3379f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 3389f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 3399f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 1.f; 3409f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3419f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3429f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mStrokeWidth; 3439f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3449f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3459f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setStrokeWidth(Paint thisPaint, float width) { 3469f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 3479f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 3489f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 3499f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 3509f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3519f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3529f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mStrokeWidth = width; 3539f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3549f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3559f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static float getStrokeMiter(Paint thisPaint) { 3569f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 3579f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 3589f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 3599f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 1.f; 3609f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3619f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3629f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mStrokeMiter; 3639f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3649f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3659f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setStrokeMiter(Paint thisPaint, float miter) { 3669f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 3679f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 3689f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 3699f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 3709f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3719f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3729f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mStrokeMiter = miter; 3739f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3749f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3759f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void nSetShadowLayer(Paint thisPaint, float radius, float dx, float dy, 3769f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet int color) { 3779f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // FIXME 3789f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet throw new UnsupportedOperationException(); 3799f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3809f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3819f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static float getTextSize(Paint thisPaint) { 3829f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 3839f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 3849f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 3859f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 1.f; 3869f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3879f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3889f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mTextSize; 3899f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3909f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3919f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setTextSize(Paint thisPaint, float textSize) { 3929f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 3939f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 3949f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 3959f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 3969f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3979f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3989f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mTextSize = textSize; 399b5ddf041d61f9346a4055b5bc5d51bd812b2ec28Xavier Ducrohet delegate.updateFontObject(); 4009f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4019f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4029f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static float getTextScaleX(Paint thisPaint) { 4039f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 4049f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 4059f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 4069f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 1.f; 4079f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4089f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4099f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mTextScaleX; 4109f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4119f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4129f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setTextScaleX(Paint thisPaint, float scaleX) { 4139f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 4149f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 4159f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 4169f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 4179f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4189f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4199f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mTextScaleX = scaleX; 420b5ddf041d61f9346a4055b5bc5d51bd812b2ec28Xavier Ducrohet delegate.updateFontObject(); 4219f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4229f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4239f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static float getTextSkewX(Paint thisPaint) { 4249f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 4259f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 4269f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 4279f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 1.f; 4289f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4299f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4309f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mTextSkewX; 4319f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4329f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4339f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setTextSkewX(Paint thisPaint, float skewX) { 4349f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 4359f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 4369f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 4379f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 4389f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4399f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4409f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mTextSkewX = skewX; 441b5ddf041d61f9346a4055b5bc5d51bd812b2ec28Xavier Ducrohet delegate.updateFontObject(); 4429f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4439f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4449f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static float ascent(Paint thisPaint) { 4458da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet // get the delegate 4468da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 4478da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet if (delegate == null) { 4488da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return 0; 4498da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet } 4509f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4518da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet if (delegate.mFonts.size() > 0) { 4528da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet java.awt.FontMetrics javaMetrics = delegate.mFonts.get(0).mMetrics; 4538da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet // Android expects negative ascent so we invert the value from Java. 4548da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return - javaMetrics.getAscent(); 4558da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet } 4568da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet 4578da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return 0; 4589f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4599f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4608da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet /*package*/ static float descent(Paint thisPaint) { 4615802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // get the delegate 4625802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 4635802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet if (delegate == null) { 4645802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return 0; 4655802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 4669f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4675802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet if (delegate.mFonts.size() > 0) { 4685802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet java.awt.FontMetrics javaMetrics = delegate.mFonts.get(0).mMetrics; 4698da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return javaMetrics.getDescent(); 4705802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 4719f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4725802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return 0; 4738da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet 4748da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet } 4758da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet 4768da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet /*package*/ static float getFontMetrics(Paint thisPaint, FontMetrics metrics) { 4778da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet // get the delegate 4788da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 4798da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet if (delegate == null) { 4808da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return 0; 4818da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet } 4828da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet 4838da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return delegate.getFontMetrics(metrics); 4845802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 4855802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 4865802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet /*package*/ static int getFontMetricsInt(Paint thisPaint, FontMetricsInt fmi) { 4879f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate 4889f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 4899f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 4909f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 4919f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4929f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4939f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate.mFonts.size() > 0) { 4945802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet java.awt.FontMetrics javaMetrics = delegate.mFonts.get(0).mMetrics; 4955802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet if (fmi != null) { 4965802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // Android expects negative ascent so we invert the value from Java. 4975802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet fmi.top = - javaMetrics.getMaxAscent(); 4985802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet fmi.ascent = - javaMetrics.getAscent(); 4995802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet fmi.descent = javaMetrics.getDescent(); 5005802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet fmi.bottom = javaMetrics.getMaxDescent(); 5015802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet fmi.leading = javaMetrics.getLeading(); 5025802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 5039f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5045802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return javaMetrics.getHeight(); 5055802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 5069f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5075802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return 0; 5085802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 5099f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5105802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet /*package*/ static float native_measureText(Paint thisPaint, char[] text, int index, 5115802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet int count) { 5125802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // WARNING: the logic in this method is similar to Canvas.drawText. 5135802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // Any change to this method should be reflected in Canvas.drawText 5149f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5155802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // get the delegate 5165802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 5175802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet if (delegate == null) { 5185802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return 0; 5199f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5209f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5215802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return delegate.measureText(text, index, count); 5229f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5239f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5249f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static float native_measureText(Paint thisPaint, String text, int start, int end) { 5259f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return native_measureText(thisPaint, text.toCharArray(), start, end - start); 5269f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5279f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5289f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static float native_measureText(Paint thisPaint, String text) { 5299f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return native_measureText(thisPaint, text.toCharArray(), 0, text.length()); 5309f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5319f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5329f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_breakText(Paint thisPaint, char[] text, int index, int count, 5339f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet float maxWidth, float[] measuredWidth) { 5349f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // FIXME 5359f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet throw new UnsupportedOperationException(); 5369f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5379f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5389f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_breakText(Paint thisPaint, String text, boolean measureForwards, 5399f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet float maxWidth, float[] measuredWidth) { 5409f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // FIXME 5419f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet throw new UnsupportedOperationException(); 5429f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5439f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5449f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5459f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_init() { 5469f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate newDelegate = new Paint_Delegate(); 5479f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return sManager.addDelegate(newDelegate); 5489f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5499f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5509f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_initWithPaint(int paint) { 5519f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 5529f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(paint); 5539f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 5549f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 5559f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5569f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5579f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate newDelegate = new Paint_Delegate(delegate); 5589f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return sManager.addDelegate(newDelegate); 5599f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5609f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5619f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void native_reset(int native_object) { 5629f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 5639f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 5649f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 5659f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 5669f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5679f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5689f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.reset(); 5699f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5709f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5719f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void native_set(int native_dst, int native_src) { 5729f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 5739f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate_dst = sManager.getDelegate(native_dst); 5749f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate_dst == null) { 5759f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 5769f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5779f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5789f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 5799f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate_src = sManager.getDelegate(native_src); 5809f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate_src == null) { 5819f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 5829f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5839f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5849f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate_dst.set(delegate_src); 5859f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5869f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5879f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_getStyle(int native_object) { 5889f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 5899f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 5909f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 5919f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 5929f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5939f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5949f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mStyle; 5959f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5969f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5979f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void native_setStyle(int native_object, int style) { 5989f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 5999f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 6009f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 6019f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 6029f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6039f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6049f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mStyle = style; 6059f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6069f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6079f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_getStrokeCap(int native_object) { 6089f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 6099f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 6109f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 6119f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 6129f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6139f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6149f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mCap; 6159f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6169f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6179f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void native_setStrokeCap(int native_object, int cap) { 6189f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 6199f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 6209f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 6219f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 6229f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6239f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6249f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mCap = cap; 6259f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6269f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6279f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_getStrokeJoin(int native_object) { 6289f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 6299f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 6309f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 6319f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 6329f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6339f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6349f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mJoin; 6359f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6369f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6379f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void native_setStrokeJoin(int native_object, int join) { 6389f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 6399f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 6409f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 6419f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 6429f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6439f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6449f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mJoin = join; 6459f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6469f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6479f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static boolean native_getFillPath(int native_object, int src, int dst) { 648b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Paint_Delegate paint = sManager.getDelegate(native_object); 649b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (paint == null) { 650b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return false; 651b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 652b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 653b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Path_Delegate srcPath = Path_Delegate.getDelegate(src); 654b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (srcPath == null) { 655b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return true; 656b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 657b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 658b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Path_Delegate dstPath = Path_Delegate.getDelegate(dst); 659b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (dstPath == null) { 660b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return true; 661b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 662b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 663b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Stroke stroke = paint.getJavaStroke(); 664b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Shape strokeShape = stroke.createStrokedShape(srcPath.getJavaShape()); 665b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 666b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet dstPath.setJavaShape(strokeShape); 667b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 668b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet // FIXME figure out the return value? 669b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return true; 6709f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6719f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6729f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_setShader(int native_object, int shader) { 673abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet // get the delegate from the native int. 674abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 675abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet if (delegate == null) { 676abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet return shader; 677abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet } 678abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet 679abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet return delegate.mShader = shader; 6809f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6819f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6829f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_setColorFilter(int native_object, int filter) { 683abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet // get the delegate from the native int. 684abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 685abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet if (delegate == null) { 686abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet return filter; 687abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet } 688abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet 689d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet delegate.mColorFilter = filter; 690d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet 691d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet // since none of those are supported, display a fidelity warning right away 692d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet ColorFilter_Delegate filterDelegate = delegate.getColorFilter(); 693d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet if (filterDelegate != null && filterDelegate.isSupported() == false) { 694d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet Bridge.getLog().fidelityWarning(null, filterDelegate.getSupportMessage(), null); 695d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet } 696d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet 697d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet return filter; 6989f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6999f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7009f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_setXfermode(int native_object, int xfermode) { 701abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet // get the delegate from the native int. 702abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 703abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet if (delegate == null) { 704abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet return xfermode; 705abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet } 706abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet 707abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet return delegate.mXfermode = xfermode; 7089f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7099f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7109f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_setPathEffect(int native_object, int effect) { 711abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet // get the delegate from the native int. 712abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 713abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet if (delegate == null) { 714abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet return effect; 715abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet } 716abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet 717abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet return delegate.mPathEffect = effect; 7189f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7199f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7209f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_setMaskFilter(int native_object, int maskfilter) { 721abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet // get the delegate from the native int. 722abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 723abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet if (delegate == null) { 724abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet return maskfilter; 725abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet } 726abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet 727d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet delegate.mMaskFilter = maskfilter; 728d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet 729d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet // since none of those are supported, display a fidelity warning right away 730d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet MaskFilter_Delegate filterDelegate = delegate.getMaskFilter(); 731d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet if (filterDelegate != null && filterDelegate.isSupported() == false) { 732d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet Bridge.getLog().fidelityWarning(null, filterDelegate.getSupportMessage(), null); 733d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet } 734d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet 735d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet return maskfilter; 7369f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7379f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7389f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_setTypeface(int native_object, int typeface) { 7399f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 7409f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 7419f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 7429f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 7439f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7449f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 745b5ddf041d61f9346a4055b5bc5d51bd812b2ec28Xavier Ducrohet delegate.mTypeface = typeface; 746b5ddf041d61f9346a4055b5bc5d51bd812b2ec28Xavier Ducrohet delegate.updateFontObject(); 747b5ddf041d61f9346a4055b5bc5d51bd812b2ec28Xavier Ducrohet return delegate.mTypeface; 7489f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7499f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7509f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_setRasterizer(int native_object, int rasterizer) { 751d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet // get the delegate from the native int. 752d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 753d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet if (delegate == null) { 754d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet return rasterizer; 755d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet } 756d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet 757d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet delegate.mRasterizer = rasterizer; 758d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet 759d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet // since none of those are supported, display a fidelity warning right away 760d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet Rasterizer_Delegate rasterizerDelegate = delegate.getRasterizer(); 761d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet if (rasterizerDelegate != null && rasterizerDelegate.isSupported() == false) { 762d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet Bridge.getLog().fidelityWarning(null, rasterizerDelegate.getSupportMessage(), null); 763d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet } 764d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet 765d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet return rasterizer; 7669f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7679f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7689f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_getTextAlign(int native_object) { 7699f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 7709f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 7719f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 7729f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 7739f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7749f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7755802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return delegate.mTextAlign; 7769f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7779f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7789f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void native_setTextAlign(int native_object, int align) { 7799f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 7809f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 7819f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 7829f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 7839f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7849f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7855802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet delegate.mTextAlign = align; 7869f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7879f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7889f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static float native_getFontMetrics(int native_paint, FontMetrics metrics) { 7898da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet // get the delegate from the native int. 7908da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_paint); 7918da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet if (delegate == null) { 7928da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return 0.f; 7938da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet } 7948da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet 7958da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return delegate.getFontMetrics(metrics); 7969f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7979f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7989f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_getTextWidths(int native_object, char[] text, int index, 7999f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet int count, float[] widths) { 8009f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // FIXME 8019f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet throw new UnsupportedOperationException(); 8029f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 8039f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 8049f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_getTextWidths(int native_object, String text, int start, 8059f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet int end, float[] widths) { 8069f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // FIXME 8079f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet throw new UnsupportedOperationException(); 8089f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 8099f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 8109f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static float native_getTextRunAdvances(int native_object, 8119f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet char[] text, int index, int count, int contextIndex, int contextCount, 8129f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet int flags, float[] advances, int advancesIndex) { 8135802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // get the delegate from the native int. 8145802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 8155802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet if (delegate == null) { 8165802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return 0.f; 8175802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 8185802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 8195802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet if (delegate.mFonts.size() > 0) { 820251d2e99245095369b52d891a660b2ed270f02e0Xavier Ducrohet // FIXME: handle multi-char characters (see measureText) 8215802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet float totalAdvance = 0; 8225802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet for (int i = 0; i < count; i++) { 8235802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet char c = text[i + index]; 8245802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet boolean found = false; 8255802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet for (FontInfo info : delegate.mFonts) { 8265802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet if (info.mFont.canDisplay(c)) { 8275802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet float adv = info.mMetrics.charWidth(c); 8285802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet totalAdvance += adv; 8295802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet if (advances != null) { 8305802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet advances[i] = adv; 8315802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 8325802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 8335802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet found = true; 8345802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet break; 8355802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 8365802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 8375802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 8385802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet if (found == false) { 8395802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // no advance for this char. 8405802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet if (advances != null) { 8415802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet advances[i] = 0.f; 8425802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 8435802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 8445802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 8455802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 8465802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return totalAdvance; 8475802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 8485802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 8495802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return 0; 8505802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 8519f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 8529f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 8539f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static float native_getTextRunAdvances(int native_object, 8549f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet String text, int start, int end, int contextStart, int contextEnd, 8559f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet int flags, float[] advances, int advancesIndex) { 8565802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // FIXME: support contextStart, contextEnd and direction flag 8575802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet int count = end - start; 8585802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet char[] buffer = TemporaryBuffer.obtain(count); 8595802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet TextUtils.getChars(text, start, end, buffer, 0); 8605802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 8615802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return native_getTextRunAdvances(native_object, buffer, 0, count, contextStart, 8625802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet contextEnd - contextStart, flags, advances, advancesIndex); 8639f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 8649f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 8659f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_getTextRunCursor(Paint thisPaint, int native_object, char[] text, 8669f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet int contextStart, int contextLength, int flags, int offset, int cursorOpt) { 8679f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // FIXME 8689f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet throw new UnsupportedOperationException(); 8699f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 8709f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 8719f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_getTextRunCursor(Paint thisPaint, int native_object, String text, 8729f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet int contextStart, int contextEnd, int flags, int offset, int cursorOpt) { 8739f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // FIXME 8749f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet throw new UnsupportedOperationException(); 8759f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 8769f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 8779f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void native_getTextPath(int native_object, int bidiFlags, 8789f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet char[] text, int index, int count, float x, float y, int path) { 8799f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // FIXME 8809f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet throw new UnsupportedOperationException(); 8819f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 8829f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 8839f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void native_getTextPath(int native_object, int bidiFlags, 8849f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet String text, int start, int end, float x, float y, int path) { 8859f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // FIXME 8869f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet throw new UnsupportedOperationException(); 8879f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 8889f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 8899f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void nativeGetStringBounds(int nativePaint, String text, int start, 8909f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet int end, Rect bounds) { 8919f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // FIXME 8929f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet throw new UnsupportedOperationException(); 8939f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 8949f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 8959f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void nativeGetCharArrayBounds(int nativePaint, char[] text, int index, 8969f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet int count, Rect bounds) { 8979f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // FIXME 8989f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet throw new UnsupportedOperationException(); 8999f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 9009f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 9019f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void finalizer(int nativePaint) { 9029f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet sManager.removeDelegate(nativePaint); 9039f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 9049f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 9059f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // ---- Private delegate/helper methods ---- 9069f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 907d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet /*package*/ Paint_Delegate() { 9089f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet reset(); 9099f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 9109f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 9119f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private Paint_Delegate(Paint_Delegate paint) { 9129f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet set(paint); 9139f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 9149f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 9159f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private void set(Paint_Delegate paint) { 9169f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mFlags = paint.mFlags; 9179f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mColor = paint.mColor; 9189f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mStyle = paint.mStyle; 9199f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mCap = paint.mCap; 9209f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mJoin = paint.mJoin; 9215802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet mTextAlign = paint.mTextAlign; 9229f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mTypeface = paint.mTypeface; 9239f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mStrokeWidth = paint.mStrokeWidth; 9249f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mStrokeMiter = paint.mStrokeMiter; 9259f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mTextSize = paint.mTextSize; 9269f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mTextScaleX = paint.mTextScaleX; 9279f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mTextSkewX = paint.mTextSkewX; 928abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet mXfermode = paint.mXfermode; 929abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet mColorFilter = paint.mColorFilter; 930abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet mShader = paint.mShader; 931abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet mPathEffect = paint.mPathEffect; 932abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet mMaskFilter = paint.mMaskFilter; 933d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet mRasterizer = paint.mRasterizer; 934b5ddf041d61f9346a4055b5bc5d51bd812b2ec28Xavier Ducrohet updateFontObject(); 9359f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 9369f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 9379f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private void reset() { 9389f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mFlags = Paint.DEFAULT_PAINT_FLAGS; 939d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet mColor = 0xFF000000; 94063fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet mStyle = Paint.Style.FILL.nativeInt; 94163fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet mCap = Paint.Cap.BUTT.nativeInt; 94263fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet mJoin = Paint.Join.MITER.nativeInt; 9435802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet mTextAlign = 0; 944b5ddf041d61f9346a4055b5bc5d51bd812b2ec28Xavier Ducrohet mTypeface = Typeface.sDefaults[0].native_instance; 9459f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mStrokeWidth = 1.f; 946d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet mStrokeMiter = 4.f; 9479f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mTextSize = 20.f; 9489f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mTextScaleX = 1.f; 9499f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mTextSkewX = 0.f; 950abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet mXfermode = 0; 951abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet mColorFilter = 0; 952abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet mShader = 0; 953abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet mPathEffect = 0; 954abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet mMaskFilter = 0; 955d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet mRasterizer = 0; 956b5ddf041d61f9346a4055b5bc5d51bd812b2ec28Xavier Ducrohet updateFontObject(); 9579f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 9589f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 9599f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /** 9609f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * Update the {@link Font} object from the typeface, text size and scaling 9619f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet */ 962d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet @SuppressWarnings("deprecation") 9639f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private void updateFontObject() { 9649f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (mTypeface != 0) { 9659f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // Get the fonts from the TypeFace object. 9669f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet List<Font> fonts = Typeface_Delegate.getFonts(mTypeface); 9679f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 9689f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // create new font objects as well as FontMetrics, based on the current text size 9699f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // and skew info. 9709f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet ArrayList<FontInfo> infoList = new ArrayList<FontInfo>(fonts.size()); 9719f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet for (Font font : fonts) { 9729f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet FontInfo info = new FontInfo(); 9739f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet info.mFont = font.deriveFont(mTextSize); 9749f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (mTextScaleX != 1.0 || mTextSkewX != 0) { 9759f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // TODO: support skew 9769f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet info.mFont = info.mFont.deriveFont(new AffineTransform( 9779f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mTextScaleX, mTextSkewX, 0, 0, 1, 0)); 9789f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 9799f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet info.mMetrics = Toolkit.getDefaultToolkit().getFontMetrics(info.mFont); 9809f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 9819f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet infoList.add(info); 9829f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 9839f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 9849f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mFonts = Collections.unmodifiableList(infoList); 9859f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 9869f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 9879f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 9885802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet /*package*/ float measureText(char[] text, int index, int count) { 9895802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet if (mFonts.size() > 0) { 9905802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet FontInfo mainFont = mFonts.get(0); 9915802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet int i = index; 9925802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet int lastIndex = index + count; 9935802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet float total = 0f; 9945802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet while (i < lastIndex) { 9955802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // always start with the main font. 9965802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet int upTo = mainFont.mFont.canDisplayUpTo(text, i, lastIndex); 9975802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet if (upTo == -1) { 9985802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // shortcut to exit 9995802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return total + mainFont.mMetrics.charsWidth(text, i, lastIndex - i); 10005802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } else if (upTo > 0) { 10015802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet total += mainFont.mMetrics.charsWidth(text, i, upTo - i); 10025802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet i = upTo; 10035802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // don't call continue at this point. Since it is certain the main font 10045802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // cannot display the font a index upTo (now ==i), we move on to the 10055802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // fallback fonts directly. 10065802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 10075802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 10085802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // no char supported, attempt to read the next char(s) with the 10095802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // fallback font. In this case we only test the first character 10105802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // and then go back to test with the main font. 10115802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // Special test for 2-char characters. 10125802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet boolean foundFont = false; 10135802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet for (int f = 1 ; f < mFonts.size() ; f++) { 10145802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet FontInfo fontInfo = mFonts.get(f); 10155802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 10165802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // need to check that the font can display the character. We test 10175802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // differently if the char is a high surrogate. 10185802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet int charCount = Character.isHighSurrogate(text[i]) ? 2 : 1; 10195802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet upTo = fontInfo.mFont.canDisplayUpTo(text, i, i + charCount); 10205802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet if (upTo == -1) { 10215802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet total += fontInfo.mMetrics.charsWidth(text, i, charCount); 10225802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet i += charCount; 10235802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet foundFont = true; 10245802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet break; 10255802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 10265802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 10275802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 10285802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 10295802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // in case no font can display the char, measure it with the main font. 10305802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet if (foundFont == false) { 10315802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet int size = Character.isHighSurrogate(text[i]) ? 2 : 1; 10325802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet total += mainFont.mMetrics.charsWidth(text, i, size); 10335802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet i += size; 10345802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 10355802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 10365802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 10375802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 10385802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return 0; 10398da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet } 10405802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 10418da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet private float getFontMetrics(FontMetrics metrics) { 10428da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet if (mFonts.size() > 0) { 10438da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet java.awt.FontMetrics javaMetrics = mFonts.get(0).mMetrics; 10448da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet if (metrics != null) { 10458da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet // Android expects negative ascent so we invert the value from Java. 10468da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet metrics.top = - javaMetrics.getMaxAscent(); 10478da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet metrics.ascent = - javaMetrics.getAscent(); 10488da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet metrics.descent = javaMetrics.getDescent(); 10498da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet metrics.bottom = javaMetrics.getMaxDescent(); 10508da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet metrics.leading = javaMetrics.getLeading(); 10518da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet } 10528da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet 10538da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return javaMetrics.getHeight(); 10548da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet } 10558da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet 10568da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return 0; 10575802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 10585802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 10598da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet 10608da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet 10619f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private static void setFlag(Paint thisPaint, int flagMask, boolean flagValue) { 10629f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 10639f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 10649f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 10659f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 10669f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 10679f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 10689f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (flagValue) { 10699f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mFlags |= flagMask; 10709f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } else { 10719f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mFlags &= ~flagMask; 10729f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 10739f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 10749f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet} 1075