Paint_Delegate.java revision 84151432e7ead6666eb8cf6377bff577b2027694
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 249f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohetimport android.graphics.Paint.FontMetrics; 259f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohetimport android.graphics.Paint.FontMetricsInt; 265802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohetimport android.text.TextUtils; 279f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 285802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohetimport java.awt.BasicStroke; 299f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohetimport java.awt.Font; 30b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohetimport java.awt.Shape; 31b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohetimport java.awt.Stroke; 329f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohetimport java.awt.Toolkit; 339f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohetimport java.awt.font.FontRenderContext; 349f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohetimport java.awt.geom.AffineTransform; 359f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohetimport java.util.ArrayList; 369f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohetimport java.util.Collections; 379f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohetimport java.util.List; 38cb092e2b7fa46477651c8b8733d50307b0de9d6dXavier Ducrohetimport java.util.Locale; 399f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 409f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet/** 419f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * Delegate implementing the native methods of android.graphics.Paint 429f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * 439f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * Through the layoutlib_create tool, the original native methods of Paint have been replaced 449f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * by calls to methods of the same name in this delegate class. 459f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * 469f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * This class behaves like the original native implementation, but in Java, keeping previously 479f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * native data into its own objects and mapping them to int that are sent back and forth between 489f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * it and the original Paint class. 499f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * 509f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * @see DelegateManager 519f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * 529f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet */ 539f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohetpublic class Paint_Delegate { 549f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 559f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /** 569f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * Class associating a {@link Font} and it's {@link java.awt.FontMetrics}. 579f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet */ 585802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet /*package*/ static final class FontInfo { 599f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Font mFont; 609f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet java.awt.FontMetrics mMetrics; 619f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 629f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 639f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // ---- delegate manager ---- 649f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private static final DelegateManager<Paint_Delegate> sManager = 65f0a53435f14d23d9555fc46014352ee6a7baa647Xavier Ducrohet new DelegateManager<Paint_Delegate>(Paint_Delegate.class); 669f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 679f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // ---- delegate helper data ---- 689f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private List<FontInfo> mFonts; 699f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private final FontRenderContext mFontContext = new FontRenderContext( 709f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet new AffineTransform(), true, true); 719f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 729f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // ---- delegate data ---- 739f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private int mFlags; 749f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private int mColor; 759f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private int mStyle; 769f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private int mCap; 779f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private int mJoin; 785802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet private int mTextAlign; 79cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet private Typeface_Delegate mTypeface; 809f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private float mStrokeWidth; 819f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private float mStrokeMiter; 829f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private float mTextSize; 839f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private float mTextScaleX; 849f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private float mTextSkewX; 858433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet private int mHintingMode = Paint.HINTING_ON; 869f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 87cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet private Xfermode_Delegate mXfermode; 88cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet private ColorFilter_Delegate mColorFilter; 89cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet private Shader_Delegate mShader; 90cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet private PathEffect_Delegate mPathEffect; 91cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet private MaskFilter_Delegate mMaskFilter; 92cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet private Rasterizer_Delegate mRasterizer; 93abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet 94cb092e2b7fa46477651c8b8733d50307b0de9d6dXavier Ducrohet private Locale mLocale = Locale.getDefault(); 95cb092e2b7fa46477651c8b8733d50307b0de9d6dXavier Ducrohet 969f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 979f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // ---- Public Helper methods ---- 989f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 9984151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath public static Paint_Delegate getDelegate(long native_paint) { 1005802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return sManager.getDelegate(native_paint); 1015802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1025802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 1039f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /** 1049f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * Returns the list of {@link Font} objects. The first item is the main font, the rest 1059f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * are fall backs for characters not present in the main font. 1069f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet */ 1079f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet public List<FontInfo> getFonts() { 1089f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return mFonts; 1099f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 1109f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 111abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet public boolean isAntiAliased() { 112abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet return (mFlags & Paint.ANTI_ALIAS_FLAG) != 0; 113abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet } 114abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet 1155802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet public boolean isFilterBitmap() { 1165802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return (mFlags & Paint.FILTER_BITMAP_FLAG) != 0; 1175802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1185802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 1195802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet public int getStyle() { 1205802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return mStyle; 1215802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1225802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 1235802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet public int getColor() { 1245802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return mColor; 1255802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1265802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 12763fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet public int getAlpha() { 12863fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet return mColor >>> 24; 12963fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet } 13063fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet 131d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet public void setAlpha(int alpha) { 132d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet mColor = (alpha << 24) | (mColor & 0x00FFFFFF); 133d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet } 134d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet 1355802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet public int getTextAlign() { 1365802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return mTextAlign; 1375802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1385802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 1395802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet public float getStrokeWidth() { 1405802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return mStrokeWidth; 1415802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1425802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 14363fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet /** 14463fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet * returns the value of stroke miter needed by the java api. 14563fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet */ 14663fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet public float getJavaStrokeMiter() { 147d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet float miter = mStrokeMiter * mStrokeWidth; 148d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet if (miter < 1.f) { 149d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet miter = 1.f; 150d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet } 151d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet return miter; 1525802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1535802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 1545802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet public int getJavaCap() { 1555802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet switch (Paint.sCapArray[mCap]) { 1565802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet case BUTT: 1575802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return BasicStroke.CAP_BUTT; 1585802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet case ROUND: 1595802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return BasicStroke.CAP_ROUND; 1605802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet default: 1615802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet case SQUARE: 1625802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return BasicStroke.CAP_SQUARE; 1635802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1645802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1655802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 1665802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet public int getJavaJoin() { 1675802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet switch (Paint.sJoinArray[mJoin]) { 1685802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet default: 1695802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet case MITER: 1705802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return BasicStroke.JOIN_MITER; 1715802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet case ROUND: 1725802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return BasicStroke.JOIN_ROUND; 1735802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet case BEVEL: 1745802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return BasicStroke.JOIN_BEVEL; 1755802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1765802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1779f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 178b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet public Stroke getJavaStroke() { 179cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet if (mPathEffect != null) { 180cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet if (mPathEffect.isSupported()) { 181cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet Stroke stroke = mPathEffect.getStroke(this); 182b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet assert stroke != null; 183b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (stroke != null) { 184b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return stroke; 185b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 186b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } else { 187918aaa5717fce6081557c82ce1c439b6922737d5Xavier Ducrohet Bridge.getLog().fidelityWarning(LayoutLog.TAG_PATHEFFECT, 188cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet mPathEffect.getSupportMessage(), 18951a7e5447de94791c464cda5cc6ebbf616d73c80Xavier Ducrohet null, null /*data*/); 190b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 191b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 192b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 193b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet // if no custom stroke as been set, set the default one. 194b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return new BasicStroke( 195b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet getStrokeWidth(), 196b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet getJavaCap(), 197b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet getJavaJoin(), 198b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet getJavaStrokeMiter()); 199b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 200b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 201d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet /** 202d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * Returns the {@link Xfermode} delegate or null if none have been set 203d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * 204d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * @return the delegate or null. 205d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet */ 206d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet public Xfermode_Delegate getXfermode() { 207cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet return mXfermode; 208251d2e99245095369b52d891a660b2ed270f02e0Xavier Ducrohet } 209251d2e99245095369b52d891a660b2ed270f02e0Xavier Ducrohet 210d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet /** 211d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * Returns the {@link ColorFilter} delegate or null if none have been set 212d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * 213d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * @return the delegate or null. 214d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet */ 215d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet public ColorFilter_Delegate getColorFilter() { 216cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet return mColorFilter; 217251d2e99245095369b52d891a660b2ed270f02e0Xavier Ducrohet } 218251d2e99245095369b52d891a660b2ed270f02e0Xavier Ducrohet 219d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet /** 220d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * Returns the {@link Shader} delegate or null if none have been set 221d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * 222d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * @return the delegate or null. 223d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet */ 224d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet public Shader_Delegate getShader() { 225cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet return mShader; 226251d2e99245095369b52d891a660b2ed270f02e0Xavier Ducrohet } 227251d2e99245095369b52d891a660b2ed270f02e0Xavier Ducrohet 228d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet /** 229d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * Returns the {@link MaskFilter} delegate or null if none have been set 230d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * 231d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * @return the delegate or null. 232d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet */ 233d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet public MaskFilter_Delegate getMaskFilter() { 234cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet return mMaskFilter; 235d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet } 236d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet 237d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet /** 238d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * Returns the {@link Rasterizer} delegate or null if none have been set 239d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * 240d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * @return the delegate or null. 241d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet */ 242d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet public Rasterizer_Delegate getRasterizer() { 243cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet return mRasterizer; 244251d2e99245095369b52d891a660b2ed270f02e0Xavier Ducrohet } 245251d2e99245095369b52d891a660b2ed270f02e0Xavier Ducrohet 2469f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // ---- native methods ---- 2479f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 2489a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 2499f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int getFlags(Paint thisPaint) { 2509f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 2519f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 2529f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 2539f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 2549f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 2559f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 2569f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mFlags; 2579f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 2589f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 259cb092e2b7fa46477651c8b8733d50307b0de9d6dXavier Ducrohet 260cb092e2b7fa46477651c8b8733d50307b0de9d6dXavier Ducrohet 2619a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 2629f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setFlags(Paint thisPaint, int flags) { 2639f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 2649f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 2659f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 2669f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 2679f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 2689f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 2699f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mFlags = flags; 2709f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 2719f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 2729a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 2739f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setFilterBitmap(Paint thisPaint, boolean filter) { 2745802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet setFlag(thisPaint, Paint.FILTER_BITMAP_FLAG, filter); 2759f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 2769f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 2779a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 2788433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet /*package*/ static int getHinting(Paint thisPaint) { 2798433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet // get the delegate from the native int. 2808433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 2818433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet if (delegate == null) { 2828433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet return Paint.HINTING_ON; 2838433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet } 2848433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet 2858433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet return delegate.mHintingMode; 2868433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet } 2878433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet 2888433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet @LayoutlibDelegate 2898433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet /*package*/ static void setHinting(Paint thisPaint, int mode) { 2908433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet // get the delegate from the native int. 2918433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 2928433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet if (delegate == null) { 2938433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet return; 2948433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet } 2958433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet 2968433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet delegate.mHintingMode = mode; 2978433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet } 2988433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet 2998433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet @LayoutlibDelegate 3009f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setAntiAlias(Paint thisPaint, boolean aa) { 3019f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet setFlag(thisPaint, Paint.ANTI_ALIAS_FLAG, aa); 3029f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3039f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3049a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 3059f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setSubpixelText(Paint thisPaint, boolean subpixelText) { 3069f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet setFlag(thisPaint, Paint.SUBPIXEL_TEXT_FLAG, subpixelText); 3079f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3089f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3099a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 3109f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setUnderlineText(Paint thisPaint, boolean underlineText) { 3119f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet setFlag(thisPaint, Paint.UNDERLINE_TEXT_FLAG, underlineText); 3129f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3139f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3149a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 3159f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setStrikeThruText(Paint thisPaint, boolean strikeThruText) { 3169f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet setFlag(thisPaint, Paint.STRIKE_THRU_TEXT_FLAG, strikeThruText); 3179f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3189f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3199a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 3209f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setFakeBoldText(Paint thisPaint, boolean fakeBoldText) { 3219f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet setFlag(thisPaint, Paint.FAKE_BOLD_TEXT_FLAG, fakeBoldText); 3229f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3239f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3249a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 3259f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setDither(Paint thisPaint, boolean dither) { 3269f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet setFlag(thisPaint, Paint.DITHER_FLAG, dither); 3279f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3289f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3299a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 3309f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setLinearText(Paint thisPaint, boolean linearText) { 3319f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet setFlag(thisPaint, Paint.LINEAR_TEXT_FLAG, linearText); 3329f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3339f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3349a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 3359f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int getColor(Paint thisPaint) { 3369f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 3379f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 3389f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 3399f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 3409f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3419f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3429f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mColor; 3439f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3449f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3459a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 3469f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setColor(Paint thisPaint, int color) { 3479f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 3489f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 3499f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 3509f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 3519f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3529f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3539f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mColor = color; 3549f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3559f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3569a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 3579f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int getAlpha(Paint thisPaint) { 3589f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 3599f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 3609f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 3619f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 3629f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3639f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 36463fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet return delegate.getAlpha(); 3659f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3669f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3679a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 3689f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setAlpha(Paint thisPaint, int a) { 3699f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 3709f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 3719f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 3729f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 3739f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3749f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 375d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet delegate.setAlpha(a); 3769f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3779f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3789a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 3799f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static float getStrokeWidth(Paint thisPaint) { 3809f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 3819f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 3829f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 3839f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 1.f; 3849f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3859f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3869f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mStrokeWidth; 3879f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3889f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3899a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 3909f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setStrokeWidth(Paint thisPaint, float width) { 3919f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 3929f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 3939f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 3949f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 3959f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3969f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3979f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mStrokeWidth = width; 3989f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3999f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4009a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 4019f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static float getStrokeMiter(Paint thisPaint) { 4029f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 4039f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 4049f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 4059f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 1.f; 4069f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4079f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4089f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mStrokeMiter; 4099f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4109f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4119a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 4129f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setStrokeMiter(Paint thisPaint, float miter) { 4139f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 4149f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 4159f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 4169f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 4179f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4189f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4199f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mStrokeMiter = miter; 4209f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4219f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4229a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 4239f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void nSetShadowLayer(Paint thisPaint, float radius, float dx, float dy, 4249f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet int color) { 4259f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // FIXME 426918aaa5717fce6081557c82ce1c439b6922737d5Xavier Ducrohet Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, 42751a7e5447de94791c464cda5cc6ebbf616d73c80Xavier Ducrohet "Paint.setShadowLayer is not supported.", null, null /*data*/); 4289f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4299f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4309a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 4319f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static float getTextSize(Paint thisPaint) { 4329f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 4339f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 4349f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 4359f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 1.f; 4369f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4379f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4389f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mTextSize; 4399f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4409f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4419a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 4429f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setTextSize(Paint thisPaint, float textSize) { 4439f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 4449f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 4459f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 4469f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 4479f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4489f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4499f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mTextSize = textSize; 450b5ddf041d61f9346a4055b5bc5d51bd812b2ec28Xavier Ducrohet delegate.updateFontObject(); 4519f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4529f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4539a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 4549f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static float getTextScaleX(Paint thisPaint) { 4559f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 4569f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 4579f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 4589f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 1.f; 4599f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4609f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4619f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mTextScaleX; 4629f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4639f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4649a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 4659f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setTextScaleX(Paint thisPaint, float scaleX) { 4669f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 4679f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 4689f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 4699f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 4709f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4719f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4729f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mTextScaleX = scaleX; 473b5ddf041d61f9346a4055b5bc5d51bd812b2ec28Xavier Ducrohet delegate.updateFontObject(); 4749f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4759f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4769a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 4779f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static float getTextSkewX(Paint thisPaint) { 4789f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 4799f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 4809f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 4819f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 1.f; 4829f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4839f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4849f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mTextSkewX; 4859f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4869f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4879a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 4889f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setTextSkewX(Paint thisPaint, float skewX) { 4899f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 4909f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 4919f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 4929f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 4939f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4949f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4959f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mTextSkewX = skewX; 496b5ddf041d61f9346a4055b5bc5d51bd812b2ec28Xavier Ducrohet delegate.updateFontObject(); 4979f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4989f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4999a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 5009f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static float ascent(Paint thisPaint) { 5018da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet // get the delegate 5028da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 5038da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet if (delegate == null) { 5048da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return 0; 5058da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet } 5069f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5078da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet if (delegate.mFonts.size() > 0) { 5088da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet java.awt.FontMetrics javaMetrics = delegate.mFonts.get(0).mMetrics; 5098da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet // Android expects negative ascent so we invert the value from Java. 5108da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return - javaMetrics.getAscent(); 5118da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet } 5128da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet 5138da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return 0; 5149f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5159f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5169a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 5178da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet /*package*/ static float descent(Paint thisPaint) { 5185802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // get the delegate 5195802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 5205802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet if (delegate == null) { 5215802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return 0; 5225802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 5239f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5245802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet if (delegate.mFonts.size() > 0) { 5255802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet java.awt.FontMetrics javaMetrics = delegate.mFonts.get(0).mMetrics; 5268da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return javaMetrics.getDescent(); 5275802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 5289f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5295802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return 0; 5308da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet 5318da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet } 5328da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet 5339a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 5348da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet /*package*/ static float getFontMetrics(Paint thisPaint, FontMetrics metrics) { 5358da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet // get the delegate 5368da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 5378da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet if (delegate == null) { 5388da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return 0; 5398da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet } 5408da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet 5418da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return delegate.getFontMetrics(metrics); 5425802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 5435802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 5449a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 5455802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet /*package*/ static int getFontMetricsInt(Paint thisPaint, FontMetricsInt fmi) { 5469f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate 5479f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 5489f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 5499f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 5509f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5519f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5529f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate.mFonts.size() > 0) { 5535802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet java.awt.FontMetrics javaMetrics = delegate.mFonts.get(0).mMetrics; 5545802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet if (fmi != null) { 5555802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // Android expects negative ascent so we invert the value from Java. 5565802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet fmi.top = - javaMetrics.getMaxAscent(); 5575802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet fmi.ascent = - javaMetrics.getAscent(); 5585802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet fmi.descent = javaMetrics.getDescent(); 5595802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet fmi.bottom = javaMetrics.getMaxDescent(); 5605802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet fmi.leading = javaMetrics.getLeading(); 5615802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 5629f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5635802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return javaMetrics.getHeight(); 5645802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 5659f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5665802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return 0; 5675802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 5689f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5699a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 5705802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet /*package*/ static float native_measureText(Paint thisPaint, char[] text, int index, 571279c00e8e0abb20f7e10577c77937c058da080bfDeepanshu Gupta int count, int bidiFlags) { 5725802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // get the delegate 5735802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 5745802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet if (delegate == null) { 5755802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return 0; 5769f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5779f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5780d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta return delegate.measureText(text, index, count, isRtl(bidiFlags)); 5799f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5809f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5819a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 582279c00e8e0abb20f7e10577c77937c058da080bfDeepanshu Gupta /*package*/ static float native_measureText(Paint thisPaint, String text, int start, int end, 583279c00e8e0abb20f7e10577c77937c058da080bfDeepanshu Gupta int bidiFlags) { 584279c00e8e0abb20f7e10577c77937c058da080bfDeepanshu Gupta return native_measureText(thisPaint, text.toCharArray(), start, end - start, bidiFlags); 5859f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5869f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5879a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 588279c00e8e0abb20f7e10577c77937c058da080bfDeepanshu Gupta /*package*/ static float native_measureText(Paint thisPaint, String text, int bidiFlags) { 589279c00e8e0abb20f7e10577c77937c058da080bfDeepanshu Gupta return native_measureText(thisPaint, text.toCharArray(), 0, text.length(), bidiFlags); 5909f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5919f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5929a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 5939f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_breakText(Paint thisPaint, char[] text, int index, int count, 594279c00e8e0abb20f7e10577c77937c058da080bfDeepanshu Gupta float maxWidth, int bidiFlags, float[] measuredWidth) { 595c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet 596c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet // get the delegate 597c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 598c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet if (delegate == null) { 599c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet return 0; 600c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet } 601c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet 602c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet int inc = count > 0 ? 1 : -1; 603c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet 604c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet int measureIndex = 0; 605c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet float measureAcc = 0; 606c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet for (int i = index; i != index + count; i += inc, measureIndex++) { 607c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet int start, end; 608c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet if (i < index) { 609c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet start = i; 610c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet end = index; 611c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet } else { 612c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet start = index; 613c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet end = i; 614c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet } 615c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet 616c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet // measure from start to end 6170d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta float res = delegate.measureText(text, start, end - start + 1, isRtl(bidiFlags)); 618c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet 619c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet if (measuredWidth != null) { 620c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet measuredWidth[measureIndex] = res; 621c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet } 622c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet 623c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet measureAcc += res; 624c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet if (res > maxWidth) { 625c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet // we should not return this char index, but since it's 0-based 626c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet // and we need to return a count, we simply return measureIndex; 627c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet return measureIndex; 628c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet } 629c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet 630c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet } 631c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet 632c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet return measureIndex; 6339f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6349f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6359a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 6369f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_breakText(Paint thisPaint, String text, boolean measureForwards, 637279c00e8e0abb20f7e10577c77937c058da080bfDeepanshu Gupta float maxWidth, int bidiFlags, float[] measuredWidth) { 638c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet return native_breakText(thisPaint, text.toCharArray(), 0, text.length(), maxWidth, 639279c00e8e0abb20f7e10577c77937c058da080bfDeepanshu Gupta bidiFlags, measuredWidth); 6409f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6419f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6429a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 64384151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath /*package*/ static long native_init() { 6449f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate newDelegate = new Paint_Delegate(); 645cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet return sManager.addNewDelegate(newDelegate); 6469f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6479f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6489a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 64984151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath /*package*/ static long native_initWithPaint(long paint) { 6509f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 6519f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(paint); 6529f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 6539f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 6549f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6559f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6569f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate newDelegate = new Paint_Delegate(delegate); 657cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet return sManager.addNewDelegate(newDelegate); 6589f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6599f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6609a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 66184151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath /*package*/ static void native_reset(long native_object) { 6629f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 6639f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 6649f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 6659f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 6669f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6679f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6689f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.reset(); 6699f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6709f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6719a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 67284151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath /*package*/ static void native_set(long native_dst, long native_src) { 6739f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 6749f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate_dst = sManager.getDelegate(native_dst); 6759f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate_dst == null) { 6769f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 6779f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6789f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6799f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 6809f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate_src = sManager.getDelegate(native_src); 6819f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate_src == null) { 6829f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 6839f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6849f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6859f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate_dst.set(delegate_src); 6869f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6879f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6889a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 68984151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath /*package*/ static long native_getStyle(long native_object) { 6909f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 6919f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 6929f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 6939f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 6949f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6959f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6969f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mStyle; 6979f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6989f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6999a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 70084151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath /*package*/ static void native_setStyle(long native_object, int style) { 7019f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 7029f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 7039f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 7049f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 7059f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7069f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7079f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mStyle = style; 7089f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7099f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7109a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 71184151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath /*package*/ static long native_getStrokeCap(long native_object) { 7129f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 7139f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 7149f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 7159f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 7169f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7179f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7189f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mCap; 7199f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7209f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7219a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 72284151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath /*package*/ static void native_setStrokeCap(long native_object, int cap) { 7239f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 7249f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 7259f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 7269f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 7279f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7289f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7299f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mCap = cap; 7309f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7319f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7329a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 73384151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath /*package*/ static long native_getStrokeJoin(long native_object) { 7349f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 7359f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 7369f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 7379f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 7389f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7399f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7409f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mJoin; 7419f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7429f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7439a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 74484151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath /*package*/ static void native_setStrokeJoin(long native_object, int join) { 7459f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 7469f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 7479f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 7489f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 7499f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7509f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7519f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mJoin = join; 7529f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7539f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7549a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 75584151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath /*package*/ static boolean native_getFillPath(long native_object, long src, long dst) { 756b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Paint_Delegate paint = sManager.getDelegate(native_object); 757b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (paint == null) { 758b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return false; 759b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 760b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 761b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Path_Delegate srcPath = Path_Delegate.getDelegate(src); 762b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (srcPath == null) { 763b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return true; 764b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 765b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 766b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Path_Delegate dstPath = Path_Delegate.getDelegate(dst); 767b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (dstPath == null) { 768b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return true; 769b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 770b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 771b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Stroke stroke = paint.getJavaStroke(); 772b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Shape strokeShape = stroke.createStrokedShape(srcPath.getJavaShape()); 773b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 774b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet dstPath.setJavaShape(strokeShape); 775b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 776b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet // FIXME figure out the return value? 777b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return true; 7789f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7799f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7809a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 78184151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath /*package*/ static long native_setShader(long native_object, long shader) { 782abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet // get the delegate from the native int. 783abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 784abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet if (delegate == null) { 785abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet return shader; 786abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet } 787abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet 788cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet delegate.mShader = Shader_Delegate.getDelegate(shader); 789cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet 790cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet return shader; 7919f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7929f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7939a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 79484151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath /*package*/ static long native_setColorFilter(long native_object, long filter) { 795abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet // get the delegate from the native int. 796abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 797abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet if (delegate == null) { 798abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet return filter; 799abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet } 800abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet 801cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet delegate.mColorFilter = ColorFilter_Delegate.getDelegate(filter);; 802d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet 803d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet // since none of those are supported, display a fidelity warning right away 804cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet if (delegate.mColorFilter != null && delegate.mColorFilter.isSupported() == false) { 805918aaa5717fce6081557c82ce1c439b6922737d5Xavier Ducrohet Bridge.getLog().fidelityWarning(LayoutLog.TAG_COLORFILTER, 806cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet delegate.mColorFilter.getSupportMessage(), null, null /*data*/); 807d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet } 808d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet 809d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet return filter; 8109f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 8119f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 8129a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 81384151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath /*package*/ static long native_setXfermode(long native_object, long xfermode) { 814abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet // get the delegate from the native int. 815abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 816abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet if (delegate == null) { 817abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet return xfermode; 818abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet } 819abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet 820cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet delegate.mXfermode = Xfermode_Delegate.getDelegate(xfermode); 821cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet 822cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet return xfermode; 8239f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 8249f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 8259a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 82684151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath /*package*/ static long native_setPathEffect(long native_object, long effect) { 827abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet // get the delegate from the native int. 828abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 829abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet if (delegate == null) { 830abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet return effect; 831abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet } 832abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet 833cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet delegate.mPathEffect = PathEffect_Delegate.getDelegate(effect); 834cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet 835cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet return effect; 8369f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 8379f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 8389a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 83984151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath /*package*/ static long native_setMaskFilter(long native_object, long maskfilter) { 840abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet // get the delegate from the native int. 841abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 842abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet if (delegate == null) { 843abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet return maskfilter; 844abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet } 845abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet 846cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet delegate.mMaskFilter = MaskFilter_Delegate.getDelegate(maskfilter); 847d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet 848d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet // since none of those are supported, display a fidelity warning right away 849cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet if (delegate.mMaskFilter != null && delegate.mMaskFilter.isSupported() == false) { 850918aaa5717fce6081557c82ce1c439b6922737d5Xavier Ducrohet Bridge.getLog().fidelityWarning(LayoutLog.TAG_MASKFILTER, 851cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet delegate.mMaskFilter.getSupportMessage(), null, null /*data*/); 852d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet } 853d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet 854d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet return maskfilter; 8559f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 8569f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 8579a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 85884151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath /*package*/ static long native_setTypeface(long native_object, long typeface) { 8599f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 8609f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 8619f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 8629f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 8639f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 8649f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 865cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet delegate.mTypeface = Typeface_Delegate.getDelegate(typeface); 866b5ddf041d61f9346a4055b5bc5d51bd812b2ec28Xavier Ducrohet delegate.updateFontObject(); 867cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet return typeface; 8689f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 8699f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 8709a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 87184151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath /*package*/ static long native_setRasterizer(long native_object, long rasterizer) { 872d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet // get the delegate from the native int. 873d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 874d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet if (delegate == null) { 875d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet return rasterizer; 876d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet } 877d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet 878cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet delegate.mRasterizer = Rasterizer_Delegate.getDelegate(rasterizer); 879d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet 880d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet // since none of those are supported, display a fidelity warning right away 881cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet if (delegate.mRasterizer != null && delegate.mRasterizer.isSupported() == false) { 882918aaa5717fce6081557c82ce1c439b6922737d5Xavier Ducrohet Bridge.getLog().fidelityWarning(LayoutLog.TAG_RASTERIZER, 883cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet delegate.mRasterizer.getSupportMessage(), null, null /*data*/); 884d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet } 885d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet 886d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet return rasterizer; 8879f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 8889f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 8899a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 89084151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath /*package*/ static long native_getTextAlign(long native_object) { 8919f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 8929f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 8939f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 8949f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 8959f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 8969f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 8975802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return delegate.mTextAlign; 8989f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 8999f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 9009a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 90184151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath /*package*/ static void native_setTextAlign(long native_object, int align) { 9029f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 9039f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 9049f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 9059f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 9069f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 9079f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 9085802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet delegate.mTextAlign = align; 9099f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 9109f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 9119a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 91284151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath /*package*/ static void native_setTextLocale(long native_object, String locale) { 913cb092e2b7fa46477651c8b8733d50307b0de9d6dXavier Ducrohet // get the delegate from the native int. 914cb092e2b7fa46477651c8b8733d50307b0de9d6dXavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 915cb092e2b7fa46477651c8b8733d50307b0de9d6dXavier Ducrohet if (delegate == null) { 916cb092e2b7fa46477651c8b8733d50307b0de9d6dXavier Ducrohet return; 917cb092e2b7fa46477651c8b8733d50307b0de9d6dXavier Ducrohet } 918cb092e2b7fa46477651c8b8733d50307b0de9d6dXavier Ducrohet 919cb092e2b7fa46477651c8b8733d50307b0de9d6dXavier Ducrohet delegate.setTextLocale(locale); 920cb092e2b7fa46477651c8b8733d50307b0de9d6dXavier Ducrohet } 921cb092e2b7fa46477651c8b8733d50307b0de9d6dXavier Ducrohet 922cb092e2b7fa46477651c8b8733d50307b0de9d6dXavier Ducrohet @LayoutlibDelegate 92384151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath /*package*/ static long native_getTextWidths(long native_object, char[] text, int index, 924279c00e8e0abb20f7e10577c77937c058da080bfDeepanshu Gupta int count, int bidiFlags, float[] widths) { 925c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet // get the delegate from the native int. 926c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 927c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet if (delegate == null) { 928c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet return 0; 929c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet } 930c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet 931c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet if (delegate.mFonts.size() > 0) { 932c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet // FIXME: handle multi-char characters (see measureText) 933c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet float totalAdvance = 0; 934c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet for (int i = 0; i < count; i++) { 935c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet char c = text[i + index]; 936c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet boolean found = false; 937c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet for (FontInfo info : delegate.mFonts) { 938c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet if (info.mFont.canDisplay(c)) { 939c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet float adv = info.mMetrics.charWidth(c); 940c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet totalAdvance += adv; 941c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet if (widths != null) { 942c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet widths[i] = adv; 943c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet } 944c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet 945c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet found = true; 946c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet break; 947c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet } 948c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet } 949c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet 950c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet if (found == false) { 951c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet // no advance for this char. 952c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet if (widths != null) { 953c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet widths[i] = 0.f; 954c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet } 955c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet } 956c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet } 957c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet 958c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet return (int) totalAdvance; 959c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet } 960c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet 9618a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet return 0; 9629f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 9639f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 9649a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 96584151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath /*package*/ static long native_getTextWidths(long native_object, String text, int start, 966279c00e8e0abb20f7e10577c77937c058da080bfDeepanshu Gupta int end, int bidiFlags, float[] widths) { 967279c00e8e0abb20f7e10577c77937c058da080bfDeepanshu Gupta return native_getTextWidths(native_object, text.toCharArray(), start, end - start, 968279c00e8e0abb20f7e10577c77937c058da080bfDeepanshu Gupta bidiFlags, widths); 9699f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 9709f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 9719a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 97284151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath /* package */static long native_getTextGlyphs(long native_object, String text, int start, 97366743a1ec0dddadec7cd8f026f9b6a2239f515beXavier Ducrohet int end, int contextStart, int contextEnd, int flags, char[] glyphs) { 97466743a1ec0dddadec7cd8f026f9b6a2239f515beXavier Ducrohet // FIXME 97566743a1ec0dddadec7cd8f026f9b6a2239f515beXavier Ducrohet return 0; 97666743a1ec0dddadec7cd8f026f9b6a2239f515beXavier Ducrohet } 97766743a1ec0dddadec7cd8f026f9b6a2239f515beXavier Ducrohet 97866743a1ec0dddadec7cd8f026f9b6a2239f515beXavier Ducrohet @LayoutlibDelegate 97984151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath /*package*/ static float native_getTextRunAdvances(long native_object, 9809f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet char[] text, int index, int count, int contextIndex, int contextCount, 981279c00e8e0abb20f7e10577c77937c058da080bfDeepanshu Gupta int flags, float[] advances, int advancesIndex) { 9820d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta 9830d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta if (advances != null) 9840d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta for (int i = advancesIndex; i< advancesIndex+count; i++) 9850d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta advances[i]=0; 9865802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // get the delegate from the native int. 9875802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 9880d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta if (delegate == null || delegate.mFonts == null || delegate.mFonts.size() == 0) { 9895802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return 0.f; 9905802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 9910d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta boolean isRtl = isRtl(flags); 9925802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 9930d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta int limit = index + count; 9940d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta return new BidiRenderer(null, delegate, text).renderText( 9950d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta index, limit, isRtl, advances, advancesIndex, false, 0, 0); 9969f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 9979f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 9989a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 99984151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath /*package*/ static float native_getTextRunAdvances(long native_object, 10009f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet String text, int start, int end, int contextStart, int contextEnd, 1001279c00e8e0abb20f7e10577c77937c058da080bfDeepanshu Gupta int flags, float[] advances, int advancesIndex) { 10020d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta // FIXME: support contextStart and contextEnd 10035802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet int count = end - start; 10045802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet char[] buffer = TemporaryBuffer.obtain(count); 10055802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet TextUtils.getChars(text, start, end, buffer, 0); 10065802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 10075802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return native_getTextRunAdvances(native_object, buffer, 0, count, contextStart, 1008279c00e8e0abb20f7e10577c77937c058da080bfDeepanshu Gupta contextEnd - contextStart, flags, advances, advancesIndex); 10099f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 10109f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 10119a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 101284151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath /*package*/ static long native_getTextRunCursor(Paint thisPaint, long native_object, char[] text, 10139f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet int contextStart, int contextLength, int flags, int offset, int cursorOpt) { 10149f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // FIXME 10158a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, 10168a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet "Paint.getTextRunCursor is not supported.", null, null /*data*/); 10178a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet return 0; 10189f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 10199f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 10209a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 102184151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath /*package*/ static long native_getTextRunCursor(Paint thisPaint, long native_object, String text, 10229f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet int contextStart, int contextEnd, int flags, int offset, int cursorOpt) { 10239f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // FIXME 10248a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, 10258a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet "Paint.getTextRunCursor is not supported.", null, null /*data*/); 10268a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet return 0; 10279f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 10289f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 10299a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 103084151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath /*package*/ static void native_getTextPath(long native_object, int bidiFlags, 103184151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath char[] text, int index, int count, float x, float y, long path) { 10329f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // FIXME 10338a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, 10348a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet "Paint.getTextPath is not supported.", null, null /*data*/); 10359f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 10369f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 10379a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 103884151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath /*package*/ static void native_getTextPath(long native_object, int bidiFlags, 103984151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath String text, int start, int end, float x, float y, long path) { 10409f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // FIXME 10418a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, 10428a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet "Paint.getTextPath is not supported.", null, null /*data*/); 10439f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 10449f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 10459a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 104684151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath /*package*/ static void nativeGetStringBounds(long nativePaint, String text, int start, 1047279c00e8e0abb20f7e10577c77937c058da080bfDeepanshu Gupta int end, int bidiFlags, Rect bounds) { 1048279c00e8e0abb20f7e10577c77937c058da080bfDeepanshu Gupta nativeGetCharArrayBounds(nativePaint, text.toCharArray(), start, end - start, bidiFlags, 1049279c00e8e0abb20f7e10577c77937c058da080bfDeepanshu Gupta bounds); 10509f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 10519f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 10529a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 105384151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath /*package*/ static void nativeGetCharArrayBounds(long nativePaint, char[] text, int index, 1054279c00e8e0abb20f7e10577c77937c058da080bfDeepanshu Gupta int count, int bidiFlags, Rect bounds) { 1055c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet 1056c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet // get the delegate from the native int. 1057c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(nativePaint); 10580d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta if (delegate == null || delegate.mFonts == null || delegate.mFonts.size() == 0) { 1059c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet return; 1060c6083f2c9eadb1f8a502ea9806868f5b0148667eXavier Ducrohet } 10610d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta int w = (int) delegate.measureText(text, index, count, isRtl(bidiFlags)); 10620d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta int h= delegate.getFonts().get(0).mMetrics.getHeight(); 10630d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta bounds.set(0, 0, w, h); 10649f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 10659f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 10669a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 106784151432e7ead6666eb8cf6377bff577b2027694Narayan Kamath /*package*/ static void finalizer(long nativePaint) { 1068cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet sManager.removeJavaReferenceFor(nativePaint); 10699f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 10709f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 10719f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // ---- Private delegate/helper methods ---- 10729f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 1073d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet /*package*/ Paint_Delegate() { 10749f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet reset(); 10759f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 10769f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 10779f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private Paint_Delegate(Paint_Delegate paint) { 10789f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet set(paint); 10799f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 10809f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 10819f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private void set(Paint_Delegate paint) { 10829f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mFlags = paint.mFlags; 10839f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mColor = paint.mColor; 10849f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mStyle = paint.mStyle; 10859f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mCap = paint.mCap; 10869f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mJoin = paint.mJoin; 10875802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet mTextAlign = paint.mTextAlign; 10889f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mTypeface = paint.mTypeface; 10899f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mStrokeWidth = paint.mStrokeWidth; 10909f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mStrokeMiter = paint.mStrokeMiter; 10919f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mTextSize = paint.mTextSize; 10929f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mTextScaleX = paint.mTextScaleX; 10939f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mTextSkewX = paint.mTextSkewX; 1094abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet mXfermode = paint.mXfermode; 1095abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet mColorFilter = paint.mColorFilter; 1096abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet mShader = paint.mShader; 1097abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet mPathEffect = paint.mPathEffect; 1098abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet mMaskFilter = paint.mMaskFilter; 1099d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet mRasterizer = paint.mRasterizer; 11008433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet mHintingMode = paint.mHintingMode; 1101b5ddf041d61f9346a4055b5bc5d51bd812b2ec28Xavier Ducrohet updateFontObject(); 11029f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 11039f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 11049f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private void reset() { 11059f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mFlags = Paint.DEFAULT_PAINT_FLAGS; 1106d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet mColor = 0xFF000000; 110763fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet mStyle = Paint.Style.FILL.nativeInt; 110863fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet mCap = Paint.Cap.BUTT.nativeInt; 110963fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet mJoin = Paint.Join.MITER.nativeInt; 11105802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet mTextAlign = 0; 1111cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet mTypeface = Typeface_Delegate.getDelegate(Typeface.sDefaults[0].native_instance); 11129f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mStrokeWidth = 1.f; 1113d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet mStrokeMiter = 4.f; 11149f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mTextSize = 20.f; 11159f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mTextScaleX = 1.f; 11169f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mTextSkewX = 0.f; 1117cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet mXfermode = null; 1118cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet mColorFilter = null; 1119cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet mShader = null; 1120cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet mPathEffect = null; 1121cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet mMaskFilter = null; 1122cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet mRasterizer = null; 1123b5ddf041d61f9346a4055b5bc5d51bd812b2ec28Xavier Ducrohet updateFontObject(); 11248433c36a98c9f45c37d2c60afc8a6a27514ddf2bXavier Ducrohet mHintingMode = Paint.HINTING_ON; 11259f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 11269f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 11279f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /** 11289f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * Update the {@link Font} object from the typeface, text size and scaling 11299f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet */ 1130d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet @SuppressWarnings("deprecation") 11319f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private void updateFontObject() { 1132cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet if (mTypeface != null) { 11339f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // Get the fonts from the TypeFace object. 1134cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet List<Font> fonts = mTypeface.getFonts(); 11359f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 11369f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // create new font objects as well as FontMetrics, based on the current text size 11379f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // and skew info. 11389f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet ArrayList<FontInfo> infoList = new ArrayList<FontInfo>(fonts.size()); 11399f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet for (Font font : fonts) { 11409f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet FontInfo info = new FontInfo(); 11419f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet info.mFont = font.deriveFont(mTextSize); 11429f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (mTextScaleX != 1.0 || mTextSkewX != 0) { 11439f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // TODO: support skew 11449f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet info.mFont = info.mFont.deriveFont(new AffineTransform( 1145d410bfb2001e7960a27fe6adb9d56f229e70fe5cXavier Ducrohet mTextScaleX, mTextSkewX, 0, 1, 0, 0)); 11469f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 11470d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta // The metrics here don't have anti-aliasing set. 11489f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet info.mMetrics = Toolkit.getDefaultToolkit().getFontMetrics(info.mFont); 11499f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 11509f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet infoList.add(info); 11519f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 11529f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 11539f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mFonts = Collections.unmodifiableList(infoList); 11549f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 11559f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 11569f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 11570d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta /*package*/ float measureText(char[] text, int index, int count, boolean isRtl) { 11580d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta return new BidiRenderer(null, this, text).renderText( 11590d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta index, index + count, isRtl, null, 0, false, 0, 0); 11608da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet } 11615802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 11628da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet private float getFontMetrics(FontMetrics metrics) { 11638da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet if (mFonts.size() > 0) { 11648da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet java.awt.FontMetrics javaMetrics = mFonts.get(0).mMetrics; 11658da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet if (metrics != null) { 11668da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet // Android expects negative ascent so we invert the value from Java. 11678da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet metrics.top = - javaMetrics.getMaxAscent(); 11688da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet metrics.ascent = - javaMetrics.getAscent(); 11698da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet metrics.descent = javaMetrics.getDescent(); 11708da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet metrics.bottom = javaMetrics.getMaxDescent(); 11718da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet metrics.leading = javaMetrics.getLeading(); 11728da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet } 11738da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet 11748da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return javaMetrics.getHeight(); 11758da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet } 11768da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet 11778da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return 0; 11785802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 11795802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 1180cb092e2b7fa46477651c8b8733d50307b0de9d6dXavier Ducrohet private void setTextLocale(String locale) { 1181cb092e2b7fa46477651c8b8733d50307b0de9d6dXavier Ducrohet mLocale = new Locale(locale); 1182cb092e2b7fa46477651c8b8733d50307b0de9d6dXavier Ducrohet } 11838da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet 11849f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private static void setFlag(Paint thisPaint, int flagMask, boolean flagValue) { 11859f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 11869f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 11879f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 11889f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 11899f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 11909f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 11919f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (flagValue) { 11929f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mFlags |= flagMask; 11939f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } else { 11949f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mFlags &= ~flagMask; 11959f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 11969f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 1197cb092e2b7fa46477651c8b8733d50307b0de9d6dXavier Ducrohet 11980d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta private static boolean isRtl(int flag) { 11990d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta switch(flag) { 12000d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta case Paint.BIDI_RTL: 12010d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta case Paint.BIDI_FORCE_RTL: 12020d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta case Paint.BIDI_DEFAULT_RTL: 12030d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta return true; 12040d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta default: 12050d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta return false; 12060d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta } 12070d9c922c9614147d1277cb36cfb7296774415d15Deepanshu Gupta } 12089f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet} 1209