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 19918aaa5717fce6081557c82ce1c439b6922737d5Xavier Ducrohetimport com.android.ide.common.rendering.api.LayoutLog; 20d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohetimport com.android.layoutlib.bridge.Bridge; 21c2e9651bf386a1f7bf7fc706cf5424950570470cXavier Ducrohetimport com.android.layoutlib.bridge.impl.DelegateManager; 229a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohetimport com.android.tools.layoutlib.annotations.LayoutlibDelegate; 239f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 24476e582d2ffdf25102d4c55f8c242baa3d21d37fDeepanshu Guptaimport android.annotation.NonNull; 25476e582d2ffdf25102d4c55f8c242baa3d21d37fDeepanshu Guptaimport android.annotation.Nullable; 26ad69aee5ed503d9592c10a0f6d1a5b617d99e6c5Deepanshu Guptaimport android.graphics.FontFamily_Delegate.FontVariant; 279f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohetimport android.graphics.Paint.FontMetrics; 289f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohetimport android.graphics.Paint.FontMetricsInt; 295802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohetimport android.text.TextUtils; 309f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 315802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohetimport java.awt.BasicStroke; 329f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohetimport java.awt.Font; 33b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohetimport java.awt.Shape; 34b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohetimport java.awt.Stroke; 359f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohetimport java.awt.Toolkit; 369f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohetimport java.awt.geom.AffineTransform; 379f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohetimport java.util.ArrayList; 389f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohetimport java.util.Collections; 399f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohetimport java.util.List; 40cb092e2b7fa46477651c8b8733d50307b0de9d6dXavier Ducrohetimport java.util.Locale; 419f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 42491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Guptaimport libcore.util.NativeAllocationRegistry_Delegate; 43491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta 449f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet/** 459f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * Delegate implementing the native methods of android.graphics.Paint 469f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * 479f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * Through the layoutlib_create tool, the original native methods of Paint have been replaced 489f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * by calls to methods of the same name in this delegate class. 499f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * 509f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * This class behaves like the original native implementation, but in Java, keeping previously 519f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * native data into its own objects and mapping them to int that are sent back and forth between 529f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * it and the original Paint class. 539f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * 549f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * @see DelegateManager 559f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * 569f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet */ 579f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohetpublic class Paint_Delegate { 589f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 599f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /** 60baef8c1ffe5c900fb0da9512654bf249b5fc9269Deepanshu Gupta * Class associating a {@link Font} and its {@link java.awt.FontMetrics}. 619f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet */ 625802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet /*package*/ static final class FontInfo { 639f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Font mFont; 649f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet java.awt.FontMetrics mMetrics; 659f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 669f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 679f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // ---- delegate manager ---- 689f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private static final DelegateManager<Paint_Delegate> sManager = 69f0a53435f14d23d9555fc46014352ee6a7baa647Xavier Ducrohet new DelegateManager<Paint_Delegate>(Paint_Delegate.class); 70491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta private static long sFinalizer = -1; 719f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 729f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // ---- delegate helper data ---- 73e644ff8d92ba040d11636be0fb6c433b52bcc6c2Deepanshu Gupta 74e644ff8d92ba040d11636be0fb6c433b52bcc6c2Deepanshu Gupta // This list can contain null elements. 759f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private List<FontInfo> mFonts; 769f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 779f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // ---- delegate data ---- 789f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private int mFlags; 799f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private int mColor; 809f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private int mStyle; 819f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private int mCap; 829f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private int mJoin; 835802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet private int mTextAlign; 84cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet private Typeface_Delegate mTypeface; 859f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private float mStrokeWidth; 869f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private float mStrokeMiter; 879f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private float mTextSize; 889f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private float mTextScaleX; 899f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private float mTextSkewX; 908433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet private int mHintingMode = Paint.HINTING_ON; 91d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta private int mHyphenEdit; 92d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta private float mLetterSpacing; // not used in actual text rendering. 9386837dc24a64af7fb007e5f2ff6b3e1cfe98f844Deepanshu Gupta // Variant of the font. A paint's variant can only be compact or elegant. 9486837dc24a64af7fb007e5f2ff6b3e1cfe98f844Deepanshu Gupta private FontVariant mFontVariant = FontVariant.COMPACT; 959f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 96cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet private Xfermode_Delegate mXfermode; 97cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet private ColorFilter_Delegate mColorFilter; 98cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet private Shader_Delegate mShader; 99cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet private PathEffect_Delegate mPathEffect; 100cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet private MaskFilter_Delegate mMaskFilter; 101cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet private Rasterizer_Delegate mRasterizer; 102abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet 103cb092e2b7fa46477651c8b8733d50307b0de9d6dXavier Ducrohet private Locale mLocale = Locale.getDefault(); 104cb092e2b7fa46477651c8b8733d50307b0de9d6dXavier Ducrohet 105a19b8c111b6961f20e1fc9132c62d1fd7f98bafeDeepanshu Gupta // Used only to assert invariants. 106a19b8c111b6961f20e1fc9132c62d1fd7f98bafeDeepanshu Gupta public long mNativeTypeface; 1079f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 1089f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // ---- Public Helper methods ---- 1099f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 110d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta @Nullable 11184151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath public static Paint_Delegate getDelegate(long native_paint) { 1125802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return sManager.getDelegate(native_paint); 1135802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1145802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 1159f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /** 116baef8c1ffe5c900fb0da9512654bf249b5fc9269Deepanshu Gupta * Returns the list of {@link Font} objects. 1179f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet */ 1189f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet public List<FontInfo> getFonts() { 1199f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return mFonts; 1209f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 1219f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 122abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet public boolean isAntiAliased() { 123abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet return (mFlags & Paint.ANTI_ALIAS_FLAG) != 0; 124abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet } 125abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet 1265802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet public boolean isFilterBitmap() { 1275802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return (mFlags & Paint.FILTER_BITMAP_FLAG) != 0; 1285802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1295802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 1305802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet public int getStyle() { 1315802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return mStyle; 1325802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1335802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 1345802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet public int getColor() { 1355802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return mColor; 1365802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1375802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 13863fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet public int getAlpha() { 13963fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet return mColor >>> 24; 14063fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet } 14163fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet 142d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet public void setAlpha(int alpha) { 143d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet mColor = (alpha << 24) | (mColor & 0x00FFFFFF); 144d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet } 145d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet 1465802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet public int getTextAlign() { 1475802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return mTextAlign; 1485802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1495802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 1505802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet public float getStrokeWidth() { 1515802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return mStrokeWidth; 1525802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1535802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 15463fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet /** 15563fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet * returns the value of stroke miter needed by the java api. 15663fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet */ 15763fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet public float getJavaStrokeMiter() { 158b9c48d8f49d35e2682c7205a9d8d5fcc25d7c736Diego Perez return mStrokeMiter; 1595802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1605802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 1615802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet public int getJavaCap() { 1625802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet switch (Paint.sCapArray[mCap]) { 1635802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet case BUTT: 1645802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return BasicStroke.CAP_BUTT; 1655802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet case ROUND: 1665802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return BasicStroke.CAP_ROUND; 1675802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet default: 1685802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet case SQUARE: 1695802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return BasicStroke.CAP_SQUARE; 1705802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1715802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1725802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 1735802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet public int getJavaJoin() { 1745802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet switch (Paint.sJoinArray[mJoin]) { 1755802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet default: 1765802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet case MITER: 1775802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return BasicStroke.JOIN_MITER; 1785802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet case ROUND: 1795802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return BasicStroke.JOIN_ROUND; 1805802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet case BEVEL: 1815802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return BasicStroke.JOIN_BEVEL; 1825802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1835802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1849f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 185b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet public Stroke getJavaStroke() { 186cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet if (mPathEffect != null) { 187cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet if (mPathEffect.isSupported()) { 188cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet Stroke stroke = mPathEffect.getStroke(this); 189b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet assert stroke != null; 190b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (stroke != null) { 191b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return stroke; 192b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 193b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } else { 194918aaa5717fce6081557c82ce1c439b6922737d5Xavier Ducrohet Bridge.getLog().fidelityWarning(LayoutLog.TAG_PATHEFFECT, 195cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet mPathEffect.getSupportMessage(), 19651a7e5447de94791c464cda5cc6ebbf616d73c80Xavier Ducrohet null, null /*data*/); 197b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 198b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 199b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 200b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet // if no custom stroke as been set, set the default one. 201b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return new BasicStroke( 202b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet getStrokeWidth(), 203b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet getJavaCap(), 204b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet getJavaJoin(), 205b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet getJavaStrokeMiter()); 206b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 207b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 208d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet /** 209d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * Returns the {@link Xfermode} delegate or null if none have been set 210d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * 211d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * @return the delegate or null. 212d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet */ 213d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet public Xfermode_Delegate getXfermode() { 214cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet return mXfermode; 215251d2e99245095369b52d891a660b2ed270f02e0Xavier Ducrohet } 216251d2e99245095369b52d891a660b2ed270f02e0Xavier Ducrohet 217d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet /** 218d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * Returns the {@link ColorFilter} delegate or null if none have been set 219d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * 220d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * @return the delegate or null. 221d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet */ 222d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet public ColorFilter_Delegate getColorFilter() { 223cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet return mColorFilter; 224251d2e99245095369b52d891a660b2ed270f02e0Xavier Ducrohet } 225251d2e99245095369b52d891a660b2ed270f02e0Xavier Ducrohet 2265d1013cf13e59b7f8dc8f16b5811cb29982e0ef3Diego Perez public void setColorFilter(long colorFilterPtr) { 2275d1013cf13e59b7f8dc8f16b5811cb29982e0ef3Diego Perez mColorFilter = ColorFilter_Delegate.getDelegate(colorFilterPtr); 2285d1013cf13e59b7f8dc8f16b5811cb29982e0ef3Diego Perez } 2295d1013cf13e59b7f8dc8f16b5811cb29982e0ef3Diego Perez 230566b303365078fac9a454f1595add19e02631db3Diego Perez public void setShader(long shaderPtr) { 231566b303365078fac9a454f1595add19e02631db3Diego Perez mShader = Shader_Delegate.getDelegate(shaderPtr); 232566b303365078fac9a454f1595add19e02631db3Diego Perez } 233566b303365078fac9a454f1595add19e02631db3Diego Perez 234d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet /** 235d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * Returns the {@link Shader} delegate or null if none have been set 236d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * 237d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * @return the delegate or null. 238d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet */ 239d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet public Shader_Delegate getShader() { 240cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet return mShader; 241251d2e99245095369b52d891a660b2ed270f02e0Xavier Ducrohet } 242251d2e99245095369b52d891a660b2ed270f02e0Xavier Ducrohet 243d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet /** 244d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * Returns the {@link MaskFilter} delegate or null if none have been set 245d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * 246d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * @return the delegate or null. 247d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet */ 248d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet public MaskFilter_Delegate getMaskFilter() { 249cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet return mMaskFilter; 250d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet } 251d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet 252d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet /** 253d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * Returns the {@link Rasterizer} delegate or null if none have been set 254d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * 255d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * @return the delegate or null. 256d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet */ 257d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet public Rasterizer_Delegate getRasterizer() { 258cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet return mRasterizer; 259251d2e99245095369b52d891a660b2ed270f02e0Xavier Ducrohet } 260251d2e99245095369b52d891a660b2ed270f02e0Xavier Ducrohet 2619f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // ---- native methods ---- 2629f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 2639a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 264491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static int nGetFlags(Paint thisPaint, long nativePaint) { 2659f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 266491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta Paint_Delegate delegate = sManager.getDelegate(nativePaint); 2679f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 2689f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 2699f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 2709f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 2719f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mFlags; 2729f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 2739f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 274cb092e2b7fa46477651c8b8733d50307b0de9d6dXavier Ducrohet 275cb092e2b7fa46477651c8b8733d50307b0de9d6dXavier Ducrohet 2769a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 277491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static void nSetFlags(Paint thisPaint, long nativePaint, int flags) { 2789f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 279491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta Paint_Delegate delegate = sManager.getDelegate(nativePaint); 2809f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 2819f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 2829f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 2839f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 2849f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mFlags = flags; 2859f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 2869f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 2879a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 288491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static void nSetFilterBitmap(Paint thisPaint, long nativePaint, boolean filter) { 289491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta setFlag(nativePaint, Paint.FILTER_BITMAP_FLAG, filter); 2909f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 2919f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 2929a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 293491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static int nGetHinting(Paint thisPaint, long nativePaint) { 2948433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet // get the delegate from the native int. 295491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta Paint_Delegate delegate = sManager.getDelegate(nativePaint); 2968433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet if (delegate == null) { 2978433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet return Paint.HINTING_ON; 2988433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet } 2998433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet 3008433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet return delegate.mHintingMode; 3018433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet } 3028433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet 3038433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet @LayoutlibDelegate 304491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static void nSetHinting(Paint thisPaint, long nativePaint, int mode) { 3058433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet // get the delegate from the native int. 306491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta Paint_Delegate delegate = sManager.getDelegate(nativePaint); 3078433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet if (delegate == null) { 3088433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet return; 3098433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet } 3108433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet 3118433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet delegate.mHintingMode = mode; 3128433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet } 3138433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet 3148433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet @LayoutlibDelegate 315491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static void nSetAntiAlias(Paint thisPaint, long nativePaint, boolean aa) { 316491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta setFlag(nativePaint, Paint.ANTI_ALIAS_FLAG, aa); 3179f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3189f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3199a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 320491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static void nSetSubpixelText(Paint thisPaint, long nativePaint, 321491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta boolean subpixelText) { 322491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta setFlag(nativePaint, Paint.SUBPIXEL_TEXT_FLAG, subpixelText); 3239f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3249f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3259a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 326491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static void nSetUnderlineText(Paint thisPaint, long nativePaint, 327491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta boolean underlineText) { 328491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta setFlag(nativePaint, Paint.UNDERLINE_TEXT_FLAG, underlineText); 3299f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3309f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3319a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 332491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static void nSetStrikeThruText(Paint thisPaint, long nativePaint, 333491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta boolean strikeThruText) { 334491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta setFlag(nativePaint, Paint.STRIKE_THRU_TEXT_FLAG, strikeThruText); 3359f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3369f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3379a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 338491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static void nSetFakeBoldText(Paint thisPaint, long nativePaint, 339491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta boolean fakeBoldText) { 340491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta setFlag(nativePaint, Paint.FAKE_BOLD_TEXT_FLAG, fakeBoldText); 3419f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3429f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3439a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 344491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static void nSetDither(Paint thisPaint, long nativePaint, boolean dither) { 345491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta setFlag(nativePaint, Paint.DITHER_FLAG, dither); 3469f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3479f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3489a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 349491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static void nSetLinearText(Paint thisPaint, long nativePaint, boolean linearText) { 350491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta setFlag(nativePaint, Paint.LINEAR_TEXT_FLAG, linearText); 3519f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3529f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3539a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 354491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static int nGetColor(Paint thisPaint, long nativePaint) { 3559f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 356491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta Paint_Delegate delegate = sManager.getDelegate(nativePaint); 3579f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 3589f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 3599f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3609f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3619f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mColor; 3629f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3639f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3649a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 365491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static void nSetColor(Paint thisPaint, long nativePaint, int color) { 3669f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 367491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta Paint_Delegate delegate = sManager.getDelegate(nativePaint); 3689f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 3699f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 3709f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3719f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3729f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mColor = color; 3739f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3749f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3759a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 376491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static int nGetAlpha(Paint thisPaint, long nativePaint) { 3779f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 378491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta Paint_Delegate delegate = sManager.getDelegate(nativePaint); 3799f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 3809f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 3819f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3829f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 38363fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet return delegate.getAlpha(); 3849f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3859f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3869a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 387491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static void nSetAlpha(Paint thisPaint, long nativePaint, int a) { 3889f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 389491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta Paint_Delegate delegate = sManager.getDelegate(nativePaint); 3909f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 3919f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 3929f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3939f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 394d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet delegate.setAlpha(a); 3959f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3969f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3979a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 398491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static float nGetStrokeWidth(Paint thisPaint, long nativePaint) { 3999f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 400491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta Paint_Delegate delegate = sManager.getDelegate(nativePaint); 4019f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 4029f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 1.f; 4039f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4049f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4059f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mStrokeWidth; 4069f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4079f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4089a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 409491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static void nSetStrokeWidth(Paint thisPaint, long nativePaint, float width) { 4109f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 411491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta Paint_Delegate delegate = sManager.getDelegate(nativePaint); 4129f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 4139f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 4149f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4159f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4169f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mStrokeWidth = width; 4179f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4189f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4199a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 420491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static float nGetStrokeMiter(Paint thisPaint, long nativePaint) { 4219f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 422491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta Paint_Delegate delegate = sManager.getDelegate(nativePaint); 4239f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 4249f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 1.f; 4259f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4269f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4279f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mStrokeMiter; 4289f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4299f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4309a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 431491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static void nSetStrokeMiter(Paint thisPaint, long nativePaint, float miter) { 4329f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 433491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta Paint_Delegate delegate = sManager.getDelegate(nativePaint); 4349f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 4359f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 4369f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4379f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4389f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mStrokeMiter = miter; 4399f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4409f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4419a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 442491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static void nSetShadowLayer(long paint, float radius, float dx, float dy, 4439f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet int color) { 4449f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // FIXME 445918aaa5717fce6081557c82ce1c439b6922737d5Xavier Ducrohet Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, 44651a7e5447de94791c464cda5cc6ebbf616d73c80Xavier Ducrohet "Paint.setShadowLayer is not supported.", null, null /*data*/); 4479f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4489f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4499a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 450491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static boolean nHasShadowLayer(long paint) { 4516376c407d433c91174e4cef735ddb0014461a906Deepanshu Gupta // FIXME 4526376c407d433c91174e4cef735ddb0014461a906Deepanshu Gupta Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, 4536376c407d433c91174e4cef735ddb0014461a906Deepanshu Gupta "Paint.hasShadowLayer is not supported.", null, null /*data*/); 4546376c407d433c91174e4cef735ddb0014461a906Deepanshu Gupta return false; 4556376c407d433c91174e4cef735ddb0014461a906Deepanshu Gupta } 4566376c407d433c91174e4cef735ddb0014461a906Deepanshu Gupta 4576376c407d433c91174e4cef735ddb0014461a906Deepanshu Gupta @LayoutlibDelegate 458491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static boolean nIsElegantTextHeight(Paint thisPaint, long nativePaint) { 459baef8c1ffe5c900fb0da9512654bf249b5fc9269Deepanshu Gupta // get the delegate from the native int. 460491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta Paint_Delegate delegate = sManager.getDelegate(nativePaint); 461ad69aee5ed503d9592c10a0f6d1a5b617d99e6c5Deepanshu Gupta return delegate != null && delegate.mFontVariant == FontVariant.ELEGANT; 46208ea918c86175d313c8e7f10c0b4a25c1424639bDeepanshu Gupta } 46308ea918c86175d313c8e7f10c0b4a25c1424639bDeepanshu Gupta 46408ea918c86175d313c8e7f10c0b4a25c1424639bDeepanshu Gupta @LayoutlibDelegate 465491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static void nSetElegantTextHeight(Paint thisPaint, long nativePaint, 466491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta boolean elegant) { 467baef8c1ffe5c900fb0da9512654bf249b5fc9269Deepanshu Gupta // get the delegate from the native int. 468491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta Paint_Delegate delegate = sManager.getDelegate(nativePaint); 469baef8c1ffe5c900fb0da9512654bf249b5fc9269Deepanshu Gupta if (delegate == null) { 470baef8c1ffe5c900fb0da9512654bf249b5fc9269Deepanshu Gupta return; 471baef8c1ffe5c900fb0da9512654bf249b5fc9269Deepanshu Gupta } 472baef8c1ffe5c900fb0da9512654bf249b5fc9269Deepanshu Gupta 473ad69aee5ed503d9592c10a0f6d1a5b617d99e6c5Deepanshu Gupta delegate.mFontVariant = elegant ? FontVariant.ELEGANT : FontVariant.COMPACT; 47408ea918c86175d313c8e7f10c0b4a25c1424639bDeepanshu Gupta } 47508ea918c86175d313c8e7f10c0b4a25c1424639bDeepanshu Gupta 47608ea918c86175d313c8e7f10c0b4a25c1424639bDeepanshu Gupta @LayoutlibDelegate 477491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static float nGetTextSize(Paint thisPaint, long nativePaint) { 4789f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 479491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta Paint_Delegate delegate = sManager.getDelegate(nativePaint); 4809f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 4819f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 1.f; 4829f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4839f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4849f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mTextSize; 4859f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4869f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4879a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 488491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static void nSetTextSize(Paint thisPaint, long nativePaint, float textSize) { 4899f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 490491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta Paint_Delegate delegate = sManager.getDelegate(nativePaint); 4919f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 4929f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 4939f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4949f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4956dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez if (delegate.mTextSize != textSize) { 4966dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez delegate.mTextSize = textSize; 4976dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez delegate.updateFontObject(); 4986dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez } 4999f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5009f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5019a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 502491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static float nGetTextScaleX(Paint thisPaint, long nativePaint) { 5039f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 504491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta Paint_Delegate delegate = sManager.getDelegate(nativePaint); 5059f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 5069f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 1.f; 5079f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5089f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5099f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mTextScaleX; 5109f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5119f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5129a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 513491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static void nSetTextScaleX(Paint thisPaint, long nativePaint, float scaleX) { 5149f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 515491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta Paint_Delegate delegate = sManager.getDelegate(nativePaint); 5169f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 5179f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 5189f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5199f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5206dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez if (delegate.mTextScaleX != scaleX) { 5216dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez delegate.mTextScaleX = scaleX; 5226dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez delegate.updateFontObject(); 5236dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez } 5249f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5259f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5269a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 527491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static float nGetTextSkewX(Paint thisPaint, long nativePaint) { 5289f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 529491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta Paint_Delegate delegate = sManager.getDelegate(nativePaint); 5309f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 5319f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 1.f; 5329f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5339f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5349f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mTextSkewX; 5359f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5369f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5379a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 538491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static void nSetTextSkewX(Paint thisPaint, long nativePaint, float skewX) { 5399f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 540491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta Paint_Delegate delegate = sManager.getDelegate(nativePaint); 5419f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 5429f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 5439f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5449f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5456dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez if (delegate.mTextSkewX != skewX) { 5466dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez delegate.mTextSkewX = skewX; 5476dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez delegate.updateFontObject(); 5486dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez } 5499f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5509f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5519a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 552491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static float nAscent(Paint thisPaint, long nativePaint, long nativeTypeface) { 5538da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet // get the delegate 554491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta Paint_Delegate delegate = sManager.getDelegate(nativePaint); 5558da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet if (delegate == null) { 5568da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return 0; 5578da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet } 5589f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5598da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet if (delegate.mFonts.size() > 0) { 5608da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet java.awt.FontMetrics javaMetrics = delegate.mFonts.get(0).mMetrics; 5618da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet // Android expects negative ascent so we invert the value from Java. 5628da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return - javaMetrics.getAscent(); 5638da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet } 5648da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet 5658da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return 0; 5669f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5679f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5689a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 569491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static float nDescent(Paint thisPaint, long nativePaint, long nativeTypeface) { 5705802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // get the delegate 571491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta Paint_Delegate delegate = sManager.getDelegate(nativePaint); 5725802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet if (delegate == null) { 5735802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return 0; 5745802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 5759f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5765802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet if (delegate.mFonts.size() > 0) { 5775802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet java.awt.FontMetrics javaMetrics = delegate.mFonts.get(0).mMetrics; 5788da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return javaMetrics.getDescent(); 5795802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 5809f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5815802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return 0; 5828da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet 5838da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet } 5848da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet 5859a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 586491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static float nGetFontMetrics(Paint thisPaint, long nativePaint, long nativeTypeface, 587491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta FontMetrics metrics) { 5888da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet // get the delegate 589491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta Paint_Delegate delegate = sManager.getDelegate(nativePaint); 5908da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet if (delegate == null) { 5918da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return 0; 5928da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet } 5938da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet 5948da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return delegate.getFontMetrics(metrics); 5955802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 5965802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 5979a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 598491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static int nGetFontMetricsInt(Paint thisPaint, long nativePaint, 599491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta long nativeTypeface, FontMetricsInt fmi) { 6009f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate 601491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta Paint_Delegate delegate = sManager.getDelegate(nativePaint); 6029f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 6039f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 6049f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6059f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6069f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate.mFonts.size() > 0) { 6075802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet java.awt.FontMetrics javaMetrics = delegate.mFonts.get(0).mMetrics; 6085802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet if (fmi != null) { 6095802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // Android expects negative ascent so we invert the value from Java. 6105802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet fmi.top = - javaMetrics.getMaxAscent(); 6115802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet fmi.ascent = - javaMetrics.getAscent(); 6125802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet fmi.descent = javaMetrics.getDescent(); 6135802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet fmi.bottom = javaMetrics.getMaxDescent(); 6145802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet fmi.leading = javaMetrics.getLeading(); 6155802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 6169f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6175802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return javaMetrics.getHeight(); 6185802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 6199f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6205802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return 0; 6215802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 6229f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6239a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 624491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static int nBreakText(long nativePaint, long nativeTypeface, char[] text, 62584d1d431cfe3e66029380fa038f8816b06da120aDeepanshu Gupta int index, int count, float maxWidth, int bidiFlags, float[] measuredWidth) { 626c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet 627c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet // get the delegate 62884d1d431cfe3e66029380fa038f8816b06da120aDeepanshu Gupta Paint_Delegate delegate = sManager.getDelegate(nativePaint); 629c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet if (delegate == null) { 630c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet return 0; 631c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet } 632c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet 633c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet int inc = count > 0 ? 1 : -1; 634c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet 635c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet int measureIndex = 0; 636c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet for (int i = index; i != index + count; i += inc, measureIndex++) { 637c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet int start, end; 638c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet if (i < index) { 639c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet start = i; 640c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet end = index; 641c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet } else { 642c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet start = index; 643c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet end = i; 644c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet } 645c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet 646c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet // measure from start to end 64784d1d431cfe3e66029380fa038f8816b06da120aDeepanshu Gupta RectF bounds = delegate.measureText(text, start, end - start + 1, null, 0, bidiFlags); 6485ad7c183f39df43562c69aba21ea422ad69bdae0Deepanshu Gupta float res = bounds.right - bounds.left; 649c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet 650c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet if (measuredWidth != null) { 651c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet measuredWidth[measureIndex] = res; 652c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet } 653c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet 654c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet if (res > maxWidth) { 655c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet // we should not return this char index, but since it's 0-based 656c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet // and we need to return a count, we simply return measureIndex; 657c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet return measureIndex; 658c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet } 659c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet 660c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet } 661c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet 662c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet return measureIndex; 6639f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6649f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6659a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 666491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static int nBreakText(long nativePaint, long nativeTypeface, String text, 66784d1d431cfe3e66029380fa038f8816b06da120aDeepanshu Gupta boolean measureForwards, 668279c00e8e0abb20f7e10577c77937c058da080bfDeepanshu Gupta float maxWidth, int bidiFlags, float[] measuredWidth) { 669491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta return nBreakText(nativePaint, nativeTypeface, text.toCharArray(), 0, text.length(), 67084d1d431cfe3e66029380fa038f8816b06da120aDeepanshu Gupta maxWidth, bidiFlags, measuredWidth); 6719f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6729f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6739a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 674491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static long nInit() { 6759f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate newDelegate = new Paint_Delegate(); 676cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet return sManager.addNewDelegate(newDelegate); 6779f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6789f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6799a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 680491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static long nInitWithPaint(long paint) { 6819f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 6829f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(paint); 6839f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 6849f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 6859f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6869f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6879f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate newDelegate = new Paint_Delegate(delegate); 688cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet return sManager.addNewDelegate(newDelegate); 6899f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6909f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6919a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 692491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static void nReset(long native_object) { 6939f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 6949f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 6959f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 6969f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 6979f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6989f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6999f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.reset(); 7009f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7019f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7029a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 703491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static void nSet(long native_dst, long native_src) { 7049f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 7059f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate_dst = sManager.getDelegate(native_dst); 7069f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate_dst == null) { 7079f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 7089f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7099f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7109f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 7119f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate_src = sManager.getDelegate(native_src); 7129f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate_src == null) { 7139f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 7149f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7159f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7169f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate_dst.set(delegate_src); 7179f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7189f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7199a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 720491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static int nGetStyle(long native_object) { 7219f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 7229f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 7239f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 7249f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 7259f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7269f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7279f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mStyle; 7289f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7299f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7309a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 731491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static void nSetStyle(long native_object, int style) { 7329f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 7339f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 7349f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 7359f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 7369f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7379f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7389f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mStyle = style; 7399f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7409f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7419a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 742491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static int nGetStrokeCap(long native_object) { 7439f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 7449f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 7459f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 7469f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 7479f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7489f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7499f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mCap; 7509f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7519f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7529a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 753491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static void nSetStrokeCap(long native_object, int cap) { 7549f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 7559f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 7569f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 7579f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 7589f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7599f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7609f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mCap = cap; 7619f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7629f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7639a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 764491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static int nGetStrokeJoin(long native_object) { 7659f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 7669f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 7679f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 7689f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 7699f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7709f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7719f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mJoin; 7729f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7739f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7749a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 775491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static void nSetStrokeJoin(long native_object, int join) { 7769f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 7779f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 7789f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 7799f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 7809f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7819f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7829f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mJoin = join; 7839f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7849f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7859a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 786491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static boolean nGetFillPath(long native_object, long src, long dst) { 787b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Paint_Delegate paint = sManager.getDelegate(native_object); 788b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (paint == null) { 789b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return false; 790b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 791b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 792b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Path_Delegate srcPath = Path_Delegate.getDelegate(src); 793b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (srcPath == null) { 794b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return true; 795b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 796b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 797b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Path_Delegate dstPath = Path_Delegate.getDelegate(dst); 798b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (dstPath == null) { 799b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return true; 800b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 801b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 802b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Stroke stroke = paint.getJavaStroke(); 803b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Shape strokeShape = stroke.createStrokedShape(srcPath.getJavaShape()); 804b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 805b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet dstPath.setJavaShape(strokeShape); 806b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 807b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet // FIXME figure out the return value? 808b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return true; 8099f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 8109f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 8119a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 812491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static long nSetShader(long native_object, long shader) { 813abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet // get the delegate from the native int. 814abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 815abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet if (delegate == null) { 816abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet return shader; 817abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet } 818abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet 819cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet delegate.mShader = Shader_Delegate.getDelegate(shader); 820cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet 821cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet return shader; 8229f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 8239f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 8249a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 825491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static long nSetColorFilter(long native_object, long filter) { 826abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet // get the delegate from the native int. 827abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 828abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet if (delegate == null) { 829abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet return filter; 830abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet } 831abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet 832baef8c1ffe5c900fb0da9512654bf249b5fc9269Deepanshu Gupta delegate.mColorFilter = ColorFilter_Delegate.getDelegate(filter); 833d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet 834f2af1f5d8aaff684f8cc6d8e31454c945e190976Deepanshu Gupta // Log warning if it's not supported. 835f2af1f5d8aaff684f8cc6d8e31454c945e190976Deepanshu Gupta if (delegate.mColorFilter != null && !delegate.mColorFilter.isSupported()) { 836918aaa5717fce6081557c82ce1c439b6922737d5Xavier Ducrohet Bridge.getLog().fidelityWarning(LayoutLog.TAG_COLORFILTER, 837cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet delegate.mColorFilter.getSupportMessage(), null, null /*data*/); 838d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet } 839d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet 840d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet return filter; 8419f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 8429f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 8439a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 844491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static long nSetXfermode(long native_object, long xfermode) { 845abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet // get the delegate from the native int. 846abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 847abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet if (delegate == null) { 848abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet return xfermode; 849abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet } 850abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet 851cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet delegate.mXfermode = Xfermode_Delegate.getDelegate(xfermode); 852cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet 853cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet return xfermode; 8549f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 8559f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 8569a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 857491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static long nSetPathEffect(long native_object, long effect) { 858abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet // get the delegate from the native int. 859abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 860abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet if (delegate == null) { 861abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet return effect; 862abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet } 863abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet 864cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet delegate.mPathEffect = PathEffect_Delegate.getDelegate(effect); 865cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet 866cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet return effect; 8679f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 8689f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 8699a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 870491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static long nSetMaskFilter(long native_object, long maskfilter) { 871abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet // get the delegate from the native int. 872abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 873abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet if (delegate == null) { 874abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet return maskfilter; 875abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet } 876abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet 877cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet delegate.mMaskFilter = MaskFilter_Delegate.getDelegate(maskfilter); 878d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet 879d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet // since none of those are supported, display a fidelity warning right away 880f2af1f5d8aaff684f8cc6d8e31454c945e190976Deepanshu Gupta if (delegate.mMaskFilter != null && !delegate.mMaskFilter.isSupported()) { 881918aaa5717fce6081557c82ce1c439b6922737d5Xavier Ducrohet Bridge.getLog().fidelityWarning(LayoutLog.TAG_MASKFILTER, 882cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet delegate.mMaskFilter.getSupportMessage(), null, null /*data*/); 883d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet } 884d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet 885d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet return maskfilter; 8869f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 8879f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 8889a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 889491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static long nSetTypeface(long native_object, long typeface) { 8909f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 8919f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 8929f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 8939f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 8949f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 8959f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 8966dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez Typeface_Delegate typefaceDelegate = Typeface_Delegate.getDelegate(typeface); 8976dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez if (delegate.mTypeface != typefaceDelegate || delegate.mNativeTypeface != typeface) { 8986dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez delegate.mTypeface = Typeface_Delegate.getDelegate(typeface); 8996dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez delegate.mNativeTypeface = typeface; 9006dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez delegate.updateFontObject(); 9016dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez } 902cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet return typeface; 9039f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 9049f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 9059a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 906491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static long nSetRasterizer(long native_object, long rasterizer) { 907d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet // get the delegate from the native int. 908d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 909d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet if (delegate == null) { 910d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet return rasterizer; 911d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet } 912d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet 913cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet delegate.mRasterizer = Rasterizer_Delegate.getDelegate(rasterizer); 914d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet 915d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet // since none of those are supported, display a fidelity warning right away 916f2af1f5d8aaff684f8cc6d8e31454c945e190976Deepanshu Gupta if (delegate.mRasterizer != null && !delegate.mRasterizer.isSupported()) { 917918aaa5717fce6081557c82ce1c439b6922737d5Xavier Ducrohet Bridge.getLog().fidelityWarning(LayoutLog.TAG_RASTERIZER, 918cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet delegate.mRasterizer.getSupportMessage(), null, null /*data*/); 919d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet } 920d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet 921d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet return rasterizer; 9229f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 9239f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 9249a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 925491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static int nGetTextAlign(long native_object) { 9269f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 9279f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 9289f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 9299f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 9309f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 9319f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 9325802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return delegate.mTextAlign; 9339f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 9349f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 9359a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 936491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static void nSetTextAlign(long native_object, int align) { 9379f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 9389f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 9399f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 9409f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 9419f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 9429f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 9435802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet delegate.mTextAlign = align; 9449f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 9459f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 9469a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 947491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static int nSetTextLocales(long native_object, String locale) { 94884d1d431cfe3e66029380fa038f8816b06da120aDeepanshu Gupta // get the delegate from the native int. 94984d1d431cfe3e66029380fa038f8816b06da120aDeepanshu Gupta Paint_Delegate delegate = sManager.getDelegate(native_object); 95084d1d431cfe3e66029380fa038f8816b06da120aDeepanshu Gupta if (delegate == null) { 95184d1d431cfe3e66029380fa038f8816b06da120aDeepanshu Gupta return 0; 95284d1d431cfe3e66029380fa038f8816b06da120aDeepanshu Gupta } 95384d1d431cfe3e66029380fa038f8816b06da120aDeepanshu Gupta 954491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta delegate.setTextLocale(locale); 955491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta return 0; 9569f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 9579f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 9589a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 959491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static void nSetTextLocalesByMinikinLangListId(long paintPtr, 960491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta int mMinikinLangListId) { 96166743a1ec0dddadec7cd8f026f9b6a2239f515beXavier Ducrohet // FIXME 96266743a1ec0dddadec7cd8f026f9b6a2239f515beXavier Ducrohet } 96366743a1ec0dddadec7cd8f026f9b6a2239f515beXavier Ducrohet 96466743a1ec0dddadec7cd8f026f9b6a2239f515beXavier Ducrohet @LayoutlibDelegate 965491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static float nGetTextAdvances(long native_object, long native_typeface, 9669f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet char[] text, int index, int count, int contextIndex, int contextCount, 967491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta int bidiFlags, float[] advances, int advancesIndex) { 9680d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta 9690d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta if (advances != null) 9700d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta for (int i = advancesIndex; i< advancesIndex+count; i++) 9710d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta advances[i]=0; 9725802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // get the delegate from the native int. 9735802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 974baef8c1ffe5c900fb0da9512654bf249b5fc9269Deepanshu Gupta if (delegate == null) { 9755802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return 0.f; 9765802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 977a19b8c111b6961f20e1fc9132c62d1fd7f98bafeDeepanshu Gupta 978a19b8c111b6961f20e1fc9132c62d1fd7f98bafeDeepanshu Gupta // native_typeface is passed here since Framework's old implementation did not have the 979a19b8c111b6961f20e1fc9132c62d1fd7f98bafeDeepanshu Gupta // typeface object associated with the Paint. Since, we follow the new framework way, 980a19b8c111b6961f20e1fc9132c62d1fd7f98bafeDeepanshu Gupta // we store the typeface with the paint and use it directly. 981a19b8c111b6961f20e1fc9132c62d1fd7f98bafeDeepanshu Gupta assert (native_typeface == delegate.mNativeTypeface); 982a19b8c111b6961f20e1fc9132c62d1fd7f98bafeDeepanshu Gupta 983491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta RectF bounds = delegate.measureText(text, index, count, advances, advancesIndex, bidiFlags); 9845ad7c183f39df43562c69aba21ea422ad69bdae0Deepanshu Gupta return bounds.right - bounds.left; 9859f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 9869f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 9879a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 988491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static float nGetTextAdvances(long native_object, long native_typeface, 9899f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet String text, int start, int end, int contextStart, int contextEnd, 990491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta int bidiFlags, float[] advances, int advancesIndex) { 9910d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta // FIXME: support contextStart and contextEnd 9925802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet int count = end - start; 9935802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet char[] buffer = TemporaryBuffer.obtain(count); 9945802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet TextUtils.getChars(text, start, end, buffer, 0); 9955802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 996491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta return nGetTextAdvances(native_object, native_typeface, buffer, 0, count, 997491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta contextStart, contextEnd - contextStart, bidiFlags, advances, advancesIndex); 9989f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 9999f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 10009a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 1001491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static int nGetTextRunCursor(Paint thisPaint, long native_object, char[] text, 10029f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet int contextStart, int contextLength, int flags, int offset, int cursorOpt) { 10039f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // FIXME 10048a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, 10058a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet "Paint.getTextRunCursor is not supported.", null, null /*data*/); 10068a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet return 0; 10079f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 10089f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 10099a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 1010491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static int nGetTextRunCursor(Paint thisPaint, long native_object, String text, 10119f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet int contextStart, int contextEnd, int flags, int offset, int cursorOpt) { 10129f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // FIXME 10138a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, 10148a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet "Paint.getTextRunCursor is not supported.", null, null /*data*/); 10158a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet return 0; 10169f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 10179f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 10189a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 1019491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static void nGetTextPath(long native_object, long native_typeface, 1020ad69aee5ed503d9592c10a0f6d1a5b617d99e6c5Deepanshu Gupta int bidiFlags, char[] text, int index, int count, float x, float y, long path) { 10219f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // FIXME 10228a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, 10238a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet "Paint.getTextPath is not supported.", null, null /*data*/); 10249f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 10259f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 10269a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 1027491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static void nGetTextPath(long native_object, long native_typeface, 1028ad69aee5ed503d9592c10a0f6d1a5b617d99e6c5Deepanshu Gupta int bidiFlags, String text, int start, int end, float x, float y, long path) { 10299f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // FIXME 10308a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, 10318a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet "Paint.getTextPath is not supported.", null, null /*data*/); 10329f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 10339f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 10349a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 1035491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static void nGetStringBounds(long nativePaint, long native_typeface, 1036ad69aee5ed503d9592c10a0f6d1a5b617d99e6c5Deepanshu Gupta String text, int start, int end, int bidiFlags, Rect bounds) { 1037491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta nGetCharArrayBounds(nativePaint, native_typeface, text.toCharArray(), start, 1038ad69aee5ed503d9592c10a0f6d1a5b617d99e6c5Deepanshu Gupta end - start, bidiFlags, bounds); 10399f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 10409f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 10419a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 1042491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static void nGetCharArrayBounds(long nativePaint, long native_typeface, 1043ad69aee5ed503d9592c10a0f6d1a5b617d99e6c5Deepanshu Gupta char[] text, int index, int count, int bidiFlags, Rect bounds) { 1044c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet 1045c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet // get the delegate from the native int. 1046c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(nativePaint); 1047baef8c1ffe5c900fb0da9512654bf249b5fc9269Deepanshu Gupta if (delegate == null) { 1048c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet return; 1049c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet } 1050a19b8c111b6961f20e1fc9132c62d1fd7f98bafeDeepanshu Gupta 1051a19b8c111b6961f20e1fc9132c62d1fd7f98bafeDeepanshu Gupta // assert that the typeface passed is actually the one that we had stored. 1052a19b8c111b6961f20e1fc9132c62d1fd7f98bafeDeepanshu Gupta assert (native_typeface == delegate.mNativeTypeface); 1053a19b8c111b6961f20e1fc9132c62d1fd7f98bafeDeepanshu Gupta 105484d1d431cfe3e66029380fa038f8816b06da120aDeepanshu Gupta delegate.measureText(text, index, count, null, 0, bidiFlags).roundOut(bounds); 10559f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 10569f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 10579a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 1058491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static long nGetNativeFinalizer() { 1059491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta synchronized (Paint_Delegate.class) { 1060491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta if (sFinalizer == -1) { 1061491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta sFinalizer = NativeAllocationRegistry_Delegate.createFinalizer( 1062491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta sManager::removeJavaReferenceFor); 1063491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta } 1064491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta } 1065491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta return sFinalizer; 10669f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 10679f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 10681840e8f2c73570e7b51c66c03d3a50bd00f3f742Deepanshu Gupta @LayoutlibDelegate 1069491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static float nGetLetterSpacing(long nativePaint) { 1070d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta Paint_Delegate delegate = sManager.getDelegate(nativePaint); 1071d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta if (delegate == null) { 1072d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta return 0; 1073d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta } 1074d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta return delegate.mLetterSpacing; 10751840e8f2c73570e7b51c66c03d3a50bd00f3f742Deepanshu Gupta } 10761840e8f2c73570e7b51c66c03d3a50bd00f3f742Deepanshu Gupta 10771840e8f2c73570e7b51c66c03d3a50bd00f3f742Deepanshu Gupta @LayoutlibDelegate 1078491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static void nSetLetterSpacing(long nativePaint, float letterSpacing) { 10791ae505060e9726782bc14af4e612b624cf2d038aDeepanshu Gupta Bridge.getLog().fidelityWarning(LayoutLog.TAG_TEXT_RENDERING, 10801ae505060e9726782bc14af4e612b624cf2d038aDeepanshu Gupta "Paint.setLetterSpacing() not supported.", null, null); 1081d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta Paint_Delegate delegate = sManager.getDelegate(nativePaint); 1082d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta if (delegate == null) { 1083d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta return; 1084d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta } 1085d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta delegate.mLetterSpacing = letterSpacing; 10861840e8f2c73570e7b51c66c03d3a50bd00f3f742Deepanshu Gupta } 10871840e8f2c73570e7b51c66c03d3a50bd00f3f742Deepanshu Gupta 10881840e8f2c73570e7b51c66c03d3a50bd00f3f742Deepanshu Gupta @LayoutlibDelegate 1089491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static void nSetFontFeatureSettings(long nativePaint, String settings) { 10901ae505060e9726782bc14af4e612b624cf2d038aDeepanshu Gupta Bridge.getLog().fidelityWarning(LayoutLog.TAG_TEXT_RENDERING, 1091d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta "Paint.setFontFeatureSettings() not supported.", null, null); 1092d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta } 1093d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta 1094d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta @LayoutlibDelegate 1095491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static int nGetHyphenEdit(long nativePaint) { 1096d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta Paint_Delegate delegate = sManager.getDelegate(nativePaint); 1097d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta if (delegate == null) { 1098d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta return 0; 1099d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta } 1100d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta return delegate.mHyphenEdit; 1101d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta } 1102d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta 1103d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta @LayoutlibDelegate 1104491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static void nSetHyphenEdit(long nativePaint, int hyphen) { 1105d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta Paint_Delegate delegate = sManager.getDelegate(nativePaint); 1106d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta if (delegate == null) { 1107d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta return; 1108d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta } 1109d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta delegate.mHyphenEdit = hyphen; 1110d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta } 1111d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta 1112d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta @LayoutlibDelegate 1113491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static boolean nHasGlyph(long nativePaint, long nativeTypeface, int bidiFlags, 1114d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta String string) { 1115d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta Paint_Delegate delegate = sManager.getDelegate(nativePaint); 1116d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta if (delegate == null) { 1117d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta return false; 1118d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta } 1119d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta if (string.length() == 0) { 1120d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta return false; 1121d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta } 1122d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta if (string.length() > 1) { 11231ae505060e9726782bc14af4e612b624cf2d038aDeepanshu Gupta Bridge.getLog().fidelityWarning(LayoutLog.TAG_TEXT_RENDERING, 1124d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta "Paint.hasGlyph() is not supported for ligatures.", null, null); 1125d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta return false; 1126d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta } 1127d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta assert nativeTypeface == delegate.mNativeTypeface; 1128d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta Typeface_Delegate typeface_delegate = Typeface_Delegate.getDelegate(nativeTypeface); 1129d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta 1130d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta char c = string.charAt(0); 1131d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta for (Font font : typeface_delegate.getFonts(delegate.mFontVariant)) { 1132d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta if (font.canDisplay(c)) { 1133d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta return true; 1134d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta } 1135d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta } 1136d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta return false; 1137d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta } 1138d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta 1139d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta 1140d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta @LayoutlibDelegate 1141491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static float nGetRunAdvance(long nativePaint, long nativeTypeface, 1142d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta @NonNull char[] text, int start, int end, int contextStart, int contextEnd, 1143d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta boolean isRtl, int offset) { 1144d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta int count = end - start; 1145d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta float[] advances = new float[count]; 1146491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta int bidiFlags = isRtl ? Paint.BIDI_FORCE_RTL : Paint.BIDI_FORCE_LTR; 1147491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta nGetTextAdvances(nativePaint, nativeTypeface, text, start, count, 1148491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta contextStart, contextEnd - contextStart, bidiFlags, advances, 0); 1149cd595f1998b1331fe0efba02d96c95ee43e791daDeepanshu Gupta int startOffset = offset - start; // offset from start. 1150d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta float sum = 0; 1151cd595f1998b1331fe0efba02d96c95ee43e791daDeepanshu Gupta for (int i = 0; i < startOffset; i++) { 1152d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta sum += advances[i]; 1153d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta } 1154d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta return sum; 1155d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta } 1156d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta 1157d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta @LayoutlibDelegate 1158491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta /*package*/ static int nGetOffsetForAdvance(long nativePaint, long nativeTypeface, 1159d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta char[] text, int start, int end, int contextStart, int contextEnd, boolean isRtl, 1160d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta float advance) { 1161d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta int count = end - start; 1162d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta float[] advances = new float[count]; 1163491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta int bidiFlags = isRtl ? Paint.BIDI_FORCE_RTL : Paint.BIDI_FORCE_LTR; 1164491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta nGetTextAdvances(nativePaint, nativeTypeface, text, start, count, 1165491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta contextStart, contextEnd - contextStart, bidiFlags, advances, 0); 1166d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta float sum = 0; 1167d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta int i; 1168d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta for (i = 0; i < count && sum < advance; i++) { 1169d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta sum += advances[i]; 1170d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta } 1171d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta float distanceToI = sum - advance; 1172d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta float distanceToIMinus1 = advance - (sum - advances[i]); 1173d77b9ed7dcc42efca33b225c4594a30aab9e709cDeepanshu Gupta return distanceToI > distanceToIMinus1 ? i : i - 1; 11741840e8f2c73570e7b51c66c03d3a50bd00f3f742Deepanshu Gupta } 11751840e8f2c73570e7b51c66c03d3a50bd00f3f742Deepanshu Gupta 11769f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // ---- Private delegate/helper methods ---- 11779f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 1178d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet /*package*/ Paint_Delegate() { 11799f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet reset(); 11809f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 11819f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 11829f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private Paint_Delegate(Paint_Delegate paint) { 11839f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet set(paint); 11849f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 11859f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 11869f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private void set(Paint_Delegate paint) { 11879f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mFlags = paint.mFlags; 11889f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mColor = paint.mColor; 11899f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mStyle = paint.mStyle; 11909f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mCap = paint.mCap; 11919f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mJoin = paint.mJoin; 11925802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet mTextAlign = paint.mTextAlign; 11936dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez 11946dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez boolean needsFontUpdate = false; 11956dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez if (mTypeface != paint.mTypeface || mNativeTypeface != paint.mNativeTypeface) { 11966dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez mTypeface = paint.mTypeface; 11976dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez mNativeTypeface = paint.mNativeTypeface; 11986dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez needsFontUpdate = true; 11996dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez } 12006dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez 12016dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez if (mTextSize != paint.mTextSize) { 12026dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez mTextSize = paint.mTextSize; 12036dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez needsFontUpdate = true; 12046dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez } 12056dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez 12066dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez if (mTextScaleX != paint.mTextScaleX) { 12076dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez mTextScaleX = paint.mTextScaleX; 12086dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez needsFontUpdate = true; 12096dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez } 12106dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez 12116dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez if (mTextSkewX != paint.mTextSkewX) { 12126dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez mTextSkewX = paint.mTextSkewX; 12136dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez needsFontUpdate = true; 12146dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez } 12156dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez 12169f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mStrokeWidth = paint.mStrokeWidth; 12179f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mStrokeMiter = paint.mStrokeMiter; 1218abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet mXfermode = paint.mXfermode; 1219abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet mColorFilter = paint.mColorFilter; 1220abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet mShader = paint.mShader; 1221abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet mPathEffect = paint.mPathEffect; 1222abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet mMaskFilter = paint.mMaskFilter; 1223d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet mRasterizer = paint.mRasterizer; 12248433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet mHintingMode = paint.mHintingMode; 12256dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez 12266dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez if (needsFontUpdate) { 12276dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez updateFontObject(); 12286dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez } 12299f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 12309f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 12319f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private void reset() { 1232caa6226b1735ae074ec3861e2424bbd2276b88a0Chris Craik mFlags = Paint.HIDDEN_DEFAULT_PAINT_FLAGS; 1233d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet mColor = 0xFF000000; 123463fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet mStyle = Paint.Style.FILL.nativeInt; 123563fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet mCap = Paint.Cap.BUTT.nativeInt; 123663fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet mJoin = Paint.Join.MITER.nativeInt; 12375802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet mTextAlign = 0; 1238cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet mTypeface = Typeface_Delegate.getDelegate(Typeface.sDefaults[0].native_instance); 1239a19b8c111b6961f20e1fc9132c62d1fd7f98bafeDeepanshu Gupta mNativeTypeface = 0; 12409f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mStrokeWidth = 1.f; 1241d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet mStrokeMiter = 4.f; 12429f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mTextSize = 20.f; 12439f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mTextScaleX = 1.f; 12449f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mTextSkewX = 0.f; 1245cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet mXfermode = null; 1246cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet mColorFilter = null; 1247cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet mShader = null; 1248cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet mPathEffect = null; 1249cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet mMaskFilter = null; 1250cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet mRasterizer = null; 1251b5ddf041d61f9346a4055b5bc5d51bd812b2ec28Xavier Ducrohet updateFontObject(); 12528433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet mHintingMode = Paint.HINTING_ON; 12539f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 12549f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 12559f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /** 12569f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * Update the {@link Font} object from the typeface, text size and scaling 12579f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet */ 1258d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet @SuppressWarnings("deprecation") 12599f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private void updateFontObject() { 1260cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet if (mTypeface != null) { 12619f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // Get the fonts from the TypeFace object. 1262ad69aee5ed503d9592c10a0f6d1a5b617d99e6c5Deepanshu Gupta List<Font> fonts = mTypeface.getFonts(mFontVariant); 12639f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 12646dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez if (fonts.isEmpty()) { 12656dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez mFonts = Collections.emptyList(); 12666dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez return; 12676dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez } 12686dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez 12699f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // create new font objects as well as FontMetrics, based on the current text size 12709f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // and skew info. 12716dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez int nFonts = fonts.size(); 12726dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez ArrayList<FontInfo> infoList = new ArrayList<FontInfo>(nFonts); 12736dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez //noinspection ForLoopReplaceableByForEach (avoid iterator instantiation) 12746dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez for (int i = 0; i < nFonts; i++) { 12756dac0d4b7c55da32cb5deb9b589b1acb43cb536dDiego Perez Font font = fonts.get(i); 1276e644ff8d92ba040d11636be0fb6c433b52bcc6c2Deepanshu Gupta if (font == null) { 1277e644ff8d92ba040d11636be0fb6c433b52bcc6c2Deepanshu Gupta // If the font is null, add null to infoList. When rendering the text, if this 1278e644ff8d92ba040d11636be0fb6c433b52bcc6c2Deepanshu Gupta // null is reached, a warning will be logged. 1279e644ff8d92ba040d11636be0fb6c433b52bcc6c2Deepanshu Gupta infoList.add(null); 1280e644ff8d92ba040d11636be0fb6c433b52bcc6c2Deepanshu Gupta continue; 1281e644ff8d92ba040d11636be0fb6c433b52bcc6c2Deepanshu Gupta } 12829f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet FontInfo info = new FontInfo(); 12839f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet info.mFont = font.deriveFont(mTextSize); 12849f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (mTextScaleX != 1.0 || mTextSkewX != 0) { 12859f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // TODO: support skew 12869f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet info.mFont = info.mFont.deriveFont(new AffineTransform( 1287d410bfb2001e7960a27fe6adb9d56f229e70fe5cXavier Ducrohet mTextScaleX, mTextSkewX, 0, 1, 0, 0)); 12889f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 12890d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta // The metrics here don't have anti-aliasing set. 12909f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet info.mMetrics = Toolkit.getDefaultToolkit().getFontMetrics(info.mFont); 12919f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 12929f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet infoList.add(info); 12939f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 12949f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 12959f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mFonts = Collections.unmodifiableList(infoList); 12969f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 12979f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 12989f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 129984d1d431cfe3e66029380fa038f8816b06da120aDeepanshu Gupta /*package*/ RectF measureText(char[] text, int index, int count, float[] advances, 130084d1d431cfe3e66029380fa038f8816b06da120aDeepanshu Gupta int advancesIndex, int bidiFlags) { 130184d1d431cfe3e66029380fa038f8816b06da120aDeepanshu Gupta return new BidiRenderer(null, this, text) 130284d1d431cfe3e66029380fa038f8816b06da120aDeepanshu Gupta .renderText(index, index + count, bidiFlags, advances, advancesIndex, false); 130384d1d431cfe3e66029380fa038f8816b06da120aDeepanshu Gupta } 130484d1d431cfe3e66029380fa038f8816b06da120aDeepanshu Gupta 130584d1d431cfe3e66029380fa038f8816b06da120aDeepanshu Gupta /*package*/ RectF measureText(char[] text, int index, int count, float[] advances, 130684d1d431cfe3e66029380fa038f8816b06da120aDeepanshu Gupta int advancesIndex, boolean isRtl) { 130784d1d431cfe3e66029380fa038f8816b06da120aDeepanshu Gupta return new BidiRenderer(null, this, text) 130884d1d431cfe3e66029380fa038f8816b06da120aDeepanshu Gupta .renderText(index, index + count, isRtl, advances, advancesIndex, false); 13098da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet } 13105802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 13118da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet private float getFontMetrics(FontMetrics metrics) { 13128da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet if (mFonts.size() > 0) { 13138da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet java.awt.FontMetrics javaMetrics = mFonts.get(0).mMetrics; 13148da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet if (metrics != null) { 13158da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet // Android expects negative ascent so we invert the value from Java. 13168da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet metrics.top = - javaMetrics.getMaxAscent(); 13178da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet metrics.ascent = - javaMetrics.getAscent(); 13188da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet metrics.descent = javaMetrics.getDescent(); 13198da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet metrics.bottom = javaMetrics.getMaxDescent(); 13208da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet metrics.leading = javaMetrics.getLeading(); 13218da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet } 13228da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet 13238da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return javaMetrics.getHeight(); 13248da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet } 13258da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet 13268da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return 0; 13275802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 13285802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 1329cb092e2b7fa46477651c8b8733d50307b0de9d6dXavier Ducrohet private void setTextLocale(String locale) { 1330cb092e2b7fa46477651c8b8733d50307b0de9d6dXavier Ducrohet mLocale = new Locale(locale); 1331cb092e2b7fa46477651c8b8733d50307b0de9d6dXavier Ducrohet } 13328da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet 1333491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta private static void setFlag(long nativePaint, int flagMask, boolean flagValue) { 13349f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 1335491523d52cd8368ef9a92e95fb3e9332bf86a996Deepanshu Gupta Paint_Delegate delegate = sManager.getDelegate(nativePaint); 13369f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 13379f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 13389f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 13399f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 13409f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (flagValue) { 13419f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mFlags |= flagMask; 13429f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } else { 13439f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mFlags &= ~flagMask; 13449f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 13459f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 13469f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet} 1347