Paint_Delegate.java revision cc4977d0fdaf657907912fd6cc2f9426dc8d2e36
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; 389f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 399f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet/** 409f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * Delegate implementing the native methods of android.graphics.Paint 419f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * 429f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * Through the layoutlib_create tool, the original native methods of Paint have been replaced 439f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * by calls to methods of the same name in this delegate class. 449f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * 459f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * This class behaves like the original native implementation, but in Java, keeping previously 469f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * native data into its own objects and mapping them to int that are sent back and forth between 479f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * it and the original Paint class. 489f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * 499f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * @see DelegateManager 509f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * 519f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet */ 529f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohetpublic class Paint_Delegate { 539f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 549f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /** 559f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * Class associating a {@link Font} and it's {@link java.awt.FontMetrics}. 569f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet */ 575802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet /*package*/ static final class FontInfo { 589f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Font mFont; 599f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet java.awt.FontMetrics mMetrics; 609f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 619f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 629f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // ---- delegate manager ---- 639f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private static final DelegateManager<Paint_Delegate> sManager = 649f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet new DelegateManager<Paint_Delegate>(); 659f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 669f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // ---- delegate helper data ---- 679f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private List<FontInfo> mFonts; 689f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private final FontRenderContext mFontContext = new FontRenderContext( 699f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet new AffineTransform(), true, true); 709f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 719f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // ---- delegate data ---- 729f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private int mFlags; 739f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private int mColor; 749f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private int mStyle; 759f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private int mCap; 769f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private int mJoin; 775802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet private int mTextAlign; 78cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet private Typeface_Delegate mTypeface; 799f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private float mStrokeWidth; 809f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private float mStrokeMiter; 819f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private float mTextSize; 829f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private float mTextScaleX; 839f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private float mTextSkewX; 849f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 85cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet private Xfermode_Delegate mXfermode; 86cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet private ColorFilter_Delegate mColorFilter; 87cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet private Shader_Delegate mShader; 88cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet private PathEffect_Delegate mPathEffect; 89cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet private MaskFilter_Delegate mMaskFilter; 90cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet private Rasterizer_Delegate mRasterizer; 91abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet 929f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 939f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // ---- Public Helper methods ---- 949f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 955802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet public static Paint_Delegate getDelegate(int native_paint) { 965802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return sManager.getDelegate(native_paint); 975802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 985802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 999f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /** 1009f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * Returns the list of {@link Font} objects. The first item is the main font, the rest 1019f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * are fall backs for characters not present in the main font. 1029f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet */ 1039f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet public List<FontInfo> getFonts() { 1049f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return mFonts; 1059f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 1069f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 107abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet public boolean isAntiAliased() { 108abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet return (mFlags & Paint.ANTI_ALIAS_FLAG) != 0; 109abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet } 110abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet 1115802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet public boolean isFilterBitmap() { 1125802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return (mFlags & Paint.FILTER_BITMAP_FLAG) != 0; 1135802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1145802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 1155802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet public int getStyle() { 1165802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return mStyle; 1175802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1185802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 1195802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet public int getColor() { 1205802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return mColor; 1215802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1225802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 12363fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet public int getAlpha() { 12463fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet return mColor >>> 24; 12563fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet } 12663fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet 127d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet public void setAlpha(int alpha) { 128d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet mColor = (alpha << 24) | (mColor & 0x00FFFFFF); 129d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet } 130d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet 1315802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet public int getTextAlign() { 1325802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return mTextAlign; 1335802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1345802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 1355802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet public float getStrokeWidth() { 1365802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return mStrokeWidth; 1375802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1385802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 13963fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet /** 14063fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet * returns the value of stroke miter needed by the java api. 14163fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet */ 14263fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet public float getJavaStrokeMiter() { 143d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet float miter = mStrokeMiter * mStrokeWidth; 144d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet if (miter < 1.f) { 145d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet miter = 1.f; 146d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet } 147d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet return miter; 1485802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1495802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 1505802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet public int getJavaCap() { 1515802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet switch (Paint.sCapArray[mCap]) { 1525802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet case BUTT: 1535802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return BasicStroke.CAP_BUTT; 1545802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet case ROUND: 1555802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return BasicStroke.CAP_ROUND; 1565802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet default: 1575802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet case SQUARE: 1585802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return BasicStroke.CAP_SQUARE; 1595802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1605802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1615802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 1625802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet public int getJavaJoin() { 1635802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet switch (Paint.sJoinArray[mJoin]) { 1645802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet default: 1655802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet case MITER: 1665802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return BasicStroke.JOIN_MITER; 1675802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet case ROUND: 1685802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return BasicStroke.JOIN_ROUND; 1695802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet case BEVEL: 1705802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return BasicStroke.JOIN_BEVEL; 1715802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1725802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 1739f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 174b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet public Stroke getJavaStroke() { 175cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet if (mPathEffect != null) { 176cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet if (mPathEffect.isSupported()) { 177cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet Stroke stroke = mPathEffect.getStroke(this); 178b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet assert stroke != null; 179b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (stroke != null) { 180b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return stroke; 181b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 182b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } else { 183918aaa5717fce6081557c82ce1c439b6922737d5Xavier Ducrohet Bridge.getLog().fidelityWarning(LayoutLog.TAG_PATHEFFECT, 184cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet mPathEffect.getSupportMessage(), 18551a7e5447de94791c464cda5cc6ebbf616d73c80Xavier Ducrohet null, null /*data*/); 186b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 187b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 188b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 189b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet // if no custom stroke as been set, set the default one. 190b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return new BasicStroke( 191b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet getStrokeWidth(), 192b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet getJavaCap(), 193b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet getJavaJoin(), 194b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet getJavaStrokeMiter()); 195b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 196b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 197d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet /** 198d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * Returns the {@link Xfermode} delegate or null if none have been set 199d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * 200d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * @return the delegate or null. 201d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet */ 202d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet public Xfermode_Delegate getXfermode() { 203cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet return mXfermode; 204251d2e99245095369b52d891a660b2ed270f02e0Xavier Ducrohet } 205251d2e99245095369b52d891a660b2ed270f02e0Xavier Ducrohet 206d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet /** 207d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * Returns the {@link ColorFilter} delegate or null if none have been set 208d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * 209d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * @return the delegate or null. 210d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet */ 211d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet public ColorFilter_Delegate getColorFilter() { 212cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet return mColorFilter; 213251d2e99245095369b52d891a660b2ed270f02e0Xavier Ducrohet } 214251d2e99245095369b52d891a660b2ed270f02e0Xavier Ducrohet 215d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet /** 216d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * Returns the {@link Shader} delegate or null if none have been set 217d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * 218d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * @return the delegate or null. 219d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet */ 220d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet public Shader_Delegate getShader() { 221cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet return mShader; 222251d2e99245095369b52d891a660b2ed270f02e0Xavier Ducrohet } 223251d2e99245095369b52d891a660b2ed270f02e0Xavier Ducrohet 224d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet /** 225d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * Returns the {@link MaskFilter} delegate or null if none have been set 226d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * 227d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * @return the delegate or null. 228d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet */ 229d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet public MaskFilter_Delegate getMaskFilter() { 230cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet return mMaskFilter; 231d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet } 232d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet 233d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet /** 234d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * Returns the {@link Rasterizer} delegate or null if none have been set 235d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * 236d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet * @return the delegate or null. 237d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet */ 238d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet public Rasterizer_Delegate getRasterizer() { 239cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet return mRasterizer; 240251d2e99245095369b52d891a660b2ed270f02e0Xavier Ducrohet } 241251d2e99245095369b52d891a660b2ed270f02e0Xavier Ducrohet 2429f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // ---- native methods ---- 2439f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 2449a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 2459f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int getFlags(Paint thisPaint) { 2469f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 2479f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 2489f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 2499f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 2509f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 2519f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 2529f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mFlags; 2539f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 2549f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 2559a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 2569f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setFlags(Paint thisPaint, int flags) { 2579f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 2589f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 2599f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 2609f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 2619f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 2629f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 2639f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mFlags = flags; 2649f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 2659f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 2669a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 2679f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setFilterBitmap(Paint thisPaint, boolean filter) { 2685802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet setFlag(thisPaint, Paint.FILTER_BITMAP_FLAG, filter); 2699f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 2709f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 2719a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 2729f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setAntiAlias(Paint thisPaint, boolean aa) { 2739f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet setFlag(thisPaint, Paint.ANTI_ALIAS_FLAG, aa); 2749f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 2759f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 2769a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 2779f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setSubpixelText(Paint thisPaint, boolean subpixelText) { 2789f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet setFlag(thisPaint, Paint.SUBPIXEL_TEXT_FLAG, subpixelText); 2799f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 2809f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 2819a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 2829f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setUnderlineText(Paint thisPaint, boolean underlineText) { 2839f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet setFlag(thisPaint, Paint.UNDERLINE_TEXT_FLAG, underlineText); 2849f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 2859f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 2869a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 2879f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setStrikeThruText(Paint thisPaint, boolean strikeThruText) { 2889f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet setFlag(thisPaint, Paint.STRIKE_THRU_TEXT_FLAG, strikeThruText); 2899f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 2909f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 2919a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 2929f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setFakeBoldText(Paint thisPaint, boolean fakeBoldText) { 2939f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet setFlag(thisPaint, Paint.FAKE_BOLD_TEXT_FLAG, fakeBoldText); 2949f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 2959f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 2969a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 2979f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setDither(Paint thisPaint, boolean dither) { 2989f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet setFlag(thisPaint, Paint.DITHER_FLAG, dither); 2999f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3009f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3019a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 3029f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setLinearText(Paint thisPaint, boolean linearText) { 3039f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet setFlag(thisPaint, Paint.LINEAR_TEXT_FLAG, linearText); 3049f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3059f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3069a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 3079f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int getColor(Paint thisPaint) { 3089f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 3099f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 3109f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 3119f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 3129f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3139f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3149f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mColor; 3159f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3169f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3179a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 3189f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setColor(Paint thisPaint, int color) { 3199f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 3209f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 3219f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 3229f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 3239f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3249f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3259f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mColor = color; 3269f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3279f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3289a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 3299f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int getAlpha(Paint thisPaint) { 3309f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 3319f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 3329f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 3339f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 3349f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3359f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 33663fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet return delegate.getAlpha(); 3379f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3389f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3399a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 3409f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setAlpha(Paint thisPaint, int a) { 3419f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 3429f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 3439f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 3449f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 3459f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3469f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 347d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet delegate.setAlpha(a); 3489f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3499f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3509a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 3519f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static float getStrokeWidth(Paint thisPaint) { 3529f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 3539f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 3549f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 3559f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 1.f; 3569f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3579f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3589f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mStrokeWidth; 3599f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3609f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3619a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 3629f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setStrokeWidth(Paint thisPaint, float width) { 3639f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 3649f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 3659f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 3669f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 3679f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3689f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3699f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mStrokeWidth = width; 3709f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3719f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3729a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 3739f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static float getStrokeMiter(Paint thisPaint) { 3749f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 3759f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 3769f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 3779f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 1.f; 3789f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3799f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3809f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mStrokeMiter; 3819f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3829f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3839a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 3849f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setStrokeMiter(Paint thisPaint, float miter) { 3859f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 3869f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 3879f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 3889f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 3899f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3909f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3919f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mStrokeMiter = miter; 3929f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 3939f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 3949a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 3959f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void nSetShadowLayer(Paint thisPaint, float radius, float dx, float dy, 3969f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet int color) { 3979f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // FIXME 398918aaa5717fce6081557c82ce1c439b6922737d5Xavier Ducrohet Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, 39951a7e5447de94791c464cda5cc6ebbf616d73c80Xavier Ducrohet "Paint.setShadowLayer is not supported.", null, null /*data*/); 4009f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4019f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4029a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 4039f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static float getTextSize(Paint thisPaint) { 4049f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 4059f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 4069f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 4079f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 1.f; 4089f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4099f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4109f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mTextSize; 4119f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4129f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4139a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 4149f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setTextSize(Paint thisPaint, float textSize) { 4159f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 4169f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 4179f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 4189f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 4199f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4209f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4219f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mTextSize = textSize; 422b5ddf041d61f9346a4055b5bc5d51bd812b2ec28Xavier Ducrohet delegate.updateFontObject(); 4239f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4249f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4259a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 4269f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static float getTextScaleX(Paint thisPaint) { 4279f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 4289f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 4299f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 4309f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 1.f; 4319f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4329f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4339f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mTextScaleX; 4349f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4359f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4369a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 4379f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setTextScaleX(Paint thisPaint, float scaleX) { 4389f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 4399f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 4409f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 4419f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 4429f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4439f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4449f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mTextScaleX = scaleX; 445b5ddf041d61f9346a4055b5bc5d51bd812b2ec28Xavier Ducrohet delegate.updateFontObject(); 4469f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4479f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4489a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 4499f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static float getTextSkewX(Paint thisPaint) { 4509f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 4519f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 4529f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 4539f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 1.f; 4549f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4559f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4569f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mTextSkewX; 4579f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4589f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4599a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 4609f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void setTextSkewX(Paint thisPaint, float skewX) { 4619f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 4629f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 4639f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 4649f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 4659f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4669f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4679f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mTextSkewX = skewX; 468b5ddf041d61f9346a4055b5bc5d51bd812b2ec28Xavier Ducrohet delegate.updateFontObject(); 4699f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4709f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4719a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 4729f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static float ascent(Paint thisPaint) { 4738da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet // get the delegate 4748da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 4758da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet if (delegate == null) { 4768da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return 0; 4778da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet } 4789f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4798da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet if (delegate.mFonts.size() > 0) { 4808da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet java.awt.FontMetrics javaMetrics = delegate.mFonts.get(0).mMetrics; 4818da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet // Android expects negative ascent so we invert the value from Java. 4828da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return - javaMetrics.getAscent(); 4838da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet } 4848da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet 4858da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return 0; 4869f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 4879f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4889a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 4898da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet /*package*/ static float descent(Paint thisPaint) { 4905802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // get the delegate 4915802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 4925802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet if (delegate == null) { 4935802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return 0; 4945802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 4959f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 4965802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet if (delegate.mFonts.size() > 0) { 4975802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet java.awt.FontMetrics javaMetrics = delegate.mFonts.get(0).mMetrics; 4988da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return javaMetrics.getDescent(); 4995802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 5009f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5015802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return 0; 5028da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet 5038da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet } 5048da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet 5059a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 5068da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet /*package*/ static float getFontMetrics(Paint thisPaint, FontMetrics metrics) { 5078da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet // get the delegate 5088da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 5098da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet if (delegate == null) { 5108da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return 0; 5118da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet } 5128da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet 5138da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return delegate.getFontMetrics(metrics); 5145802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 5155802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 5169a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 5175802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet /*package*/ static int getFontMetricsInt(Paint thisPaint, FontMetricsInt fmi) { 5189f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate 5199f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 5209f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 5219f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 5229f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5239f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5249f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate.mFonts.size() > 0) { 5255802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet java.awt.FontMetrics javaMetrics = delegate.mFonts.get(0).mMetrics; 5265802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet if (fmi != null) { 5275802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // Android expects negative ascent so we invert the value from Java. 5285802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet fmi.top = - javaMetrics.getMaxAscent(); 5295802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet fmi.ascent = - javaMetrics.getAscent(); 5305802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet fmi.descent = javaMetrics.getDescent(); 5315802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet fmi.bottom = javaMetrics.getMaxDescent(); 5325802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet fmi.leading = javaMetrics.getLeading(); 5335802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 5349f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5355802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return javaMetrics.getHeight(); 5365802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 5379f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5385802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return 0; 5395802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 5409f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5419a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 5425802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet /*package*/ static float native_measureText(Paint thisPaint, char[] text, int index, 5435802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet int count) { 5445802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // WARNING: the logic in this method is similar to Canvas.drawText. 5455802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // Any change to this method should be reflected in Canvas.drawText 5469f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5475802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // get the delegate 5485802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 5495802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet if (delegate == null) { 5505802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return 0; 5519f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5529f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5535802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return delegate.measureText(text, index, count); 5549f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5559f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5569a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 5579f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static float native_measureText(Paint thisPaint, String text, int start, int end) { 5589f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return native_measureText(thisPaint, text.toCharArray(), start, end - start); 5599f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5609f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5619a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 5629f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static float native_measureText(Paint thisPaint, String text) { 5639f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return native_measureText(thisPaint, text.toCharArray(), 0, text.length()); 5649f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5659f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5669a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 5679f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_breakText(Paint thisPaint, char[] text, int index, int count, 5689f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet float maxWidth, float[] measuredWidth) { 5699f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // FIXME 5708a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, 5718a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet "Paint.native_breakText is not supported.", null, null /*data*/); 5728a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet return 0; 5739f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5749f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5759a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 5769f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_breakText(Paint thisPaint, String text, boolean measureForwards, 5779f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet float maxWidth, float[] measuredWidth) { 5789f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // FIXME 5798a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, 5808a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet "Paint.native_breakText is not supported.", null, null /*data*/); 5818a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet return 0; 5829f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5839f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5849a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 5859f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_init() { 5869f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate newDelegate = new Paint_Delegate(); 587cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet return sManager.addNewDelegate(newDelegate); 5889f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5899f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5909a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 5919f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_initWithPaint(int paint) { 5929f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 5939f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(paint); 5949f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 5959f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 5969f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 5979f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 5989f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate newDelegate = new Paint_Delegate(delegate); 599cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet return sManager.addNewDelegate(newDelegate); 6009f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6019f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6029a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 6039f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void native_reset(int native_object) { 6049f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 6059f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 6069f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 6079f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 6089f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6099f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6109f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.reset(); 6119f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6129f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6139a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 6149f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void native_set(int native_dst, int native_src) { 6159f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 6169f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate_dst = sManager.getDelegate(native_dst); 6179f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate_dst == null) { 6189f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 6199f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6209f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6219f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 6229f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate_src = sManager.getDelegate(native_src); 6239f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate_src == null) { 6249f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 6259f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6269f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6279f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate_dst.set(delegate_src); 6289f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6299f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6309a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 6319f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_getStyle(int native_object) { 6329f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 6339f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 6349f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 6359f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 6369f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6379f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6389f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mStyle; 6399f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6409f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6419a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 6429f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void native_setStyle(int native_object, int style) { 6439f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 6449f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 6459f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 6469f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 6479f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6489f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6499f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mStyle = style; 6509f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6519f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6529a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 6539f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_getStrokeCap(int native_object) { 6549f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 6559f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 6569f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 6579f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 6589f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6599f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6609f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mCap; 6619f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6629f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6639a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 6649f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void native_setStrokeCap(int native_object, int cap) { 6659f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 6669f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 6679f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 6689f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 6699f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6709f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6719f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mCap = cap; 6729f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6739f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6749a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 6759f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_getStrokeJoin(int native_object) { 6769f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 6779f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 6789f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 6799f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 6809f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6819f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6829f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return delegate.mJoin; 6839f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6849f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6859a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 6869f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void native_setStrokeJoin(int native_object, int join) { 6879f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 6889f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 6899f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 6909f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 6919f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6929f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6939f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mJoin = join; 6949f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 6959f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 6969a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 6979f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static boolean native_getFillPath(int native_object, int src, int dst) { 698b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Paint_Delegate paint = sManager.getDelegate(native_object); 699b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (paint == null) { 700b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return false; 701b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 702b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 703b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Path_Delegate srcPath = Path_Delegate.getDelegate(src); 704b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (srcPath == null) { 705b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return true; 706b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 707b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 708b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Path_Delegate dstPath = Path_Delegate.getDelegate(dst); 709b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet if (dstPath == null) { 710b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return true; 711b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet } 712b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 713b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Stroke stroke = paint.getJavaStroke(); 714b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet Shape strokeShape = stroke.createStrokedShape(srcPath.getJavaShape()); 715b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 716b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet dstPath.setJavaShape(strokeShape); 717b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet 718b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet // FIXME figure out the return value? 719b44b43b1579486ff7ecd0f7528f17711acdeae98Xavier Ducrohet return true; 7209f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7219f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7229a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 7239f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_setShader(int native_object, int shader) { 724abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet // get the delegate from the native int. 725abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 726abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet if (delegate == null) { 727abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet return shader; 728abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet } 729abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet 730cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet delegate.mShader = Shader_Delegate.getDelegate(shader); 731cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet 732cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet return shader; 7339f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7349f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7359a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 7369f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_setColorFilter(int native_object, int filter) { 737abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet // get the delegate from the native int. 738abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 739abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet if (delegate == null) { 740abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet return filter; 741abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet } 742abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet 743cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet delegate.mColorFilter = ColorFilter_Delegate.getDelegate(filter);; 744d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet 745d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet // since none of those are supported, display a fidelity warning right away 746cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet if (delegate.mColorFilter != null && delegate.mColorFilter.isSupported() == false) { 747918aaa5717fce6081557c82ce1c439b6922737d5Xavier Ducrohet Bridge.getLog().fidelityWarning(LayoutLog.TAG_COLORFILTER, 748cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet delegate.mColorFilter.getSupportMessage(), null, null /*data*/); 749d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet } 750d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet 751d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet return filter; 7529f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7539f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7549a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 7559f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_setXfermode(int native_object, int xfermode) { 756abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet // get the delegate from the native int. 757abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 758abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet if (delegate == null) { 759abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet return xfermode; 760abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet } 761abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet 762cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet delegate.mXfermode = Xfermode_Delegate.getDelegate(xfermode); 763cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet 764cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet return xfermode; 7659f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7669f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7679a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 7689f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_setPathEffect(int native_object, int effect) { 769abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet // get the delegate from the native int. 770abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 771abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet if (delegate == null) { 772abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet return effect; 773abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet } 774abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet 775cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet delegate.mPathEffect = PathEffect_Delegate.getDelegate(effect); 776cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet 777cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet return effect; 7789f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7799f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7809a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 7819f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_setMaskFilter(int native_object, int maskfilter) { 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 maskfilter; 786abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet } 787abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet 788cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet delegate.mMaskFilter = MaskFilter_Delegate.getDelegate(maskfilter); 789d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet 790d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet // since none of those are supported, display a fidelity warning right away 791cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet if (delegate.mMaskFilter != null && delegate.mMaskFilter.isSupported() == false) { 792918aaa5717fce6081557c82ce1c439b6922737d5Xavier Ducrohet Bridge.getLog().fidelityWarning(LayoutLog.TAG_MASKFILTER, 793cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet delegate.mMaskFilter.getSupportMessage(), null, null /*data*/); 794d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet } 795d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet 796d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet return maskfilter; 7979f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 7989f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 7999a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 8009f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_setTypeface(int native_object, int typeface) { 8019f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 8029f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 8039f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 8049f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 8059f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 8069f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 807cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet delegate.mTypeface = Typeface_Delegate.getDelegate(typeface); 808b5ddf041d61f9346a4055b5bc5d51bd812b2ec28Xavier Ducrohet delegate.updateFontObject(); 809cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet return typeface; 8109f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 8119f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 8129a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 8139f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_setRasterizer(int native_object, int rasterizer) { 814d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet // get the delegate from the native int. 815d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 816d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet if (delegate == null) { 817d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet return rasterizer; 818d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet } 819d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet 820cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet delegate.mRasterizer = Rasterizer_Delegate.getDelegate(rasterizer); 821d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet 822d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet // since none of those are supported, display a fidelity warning right away 823cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet if (delegate.mRasterizer != null && delegate.mRasterizer.isSupported() == false) { 824918aaa5717fce6081557c82ce1c439b6922737d5Xavier Ducrohet Bridge.getLog().fidelityWarning(LayoutLog.TAG_RASTERIZER, 825cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet delegate.mRasterizer.getSupportMessage(), null, null /*data*/); 826d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet } 827d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet 828d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet return rasterizer; 8299f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 8309f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 8319a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 8329f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_getTextAlign(int native_object) { 8339f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 8349f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 8359f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 8369f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return 0; 8379f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 8389f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 8395802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return delegate.mTextAlign; 8409f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 8419f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 8429a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 8439f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void native_setTextAlign(int native_object, int align) { 8449f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 8459f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 8469f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 8479f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 8489f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 8499f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 8505802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet delegate.mTextAlign = align; 8519f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 8529f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 8539a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 8549f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static float native_getFontMetrics(int native_paint, FontMetrics metrics) { 8558da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet // get the delegate from the native int. 8568da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_paint); 8578da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet if (delegate == null) { 8588da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return 0.f; 8598da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet } 8608da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet 8618da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return delegate.getFontMetrics(metrics); 8629f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 8639f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 8649a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 8659f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_getTextWidths(int native_object, char[] text, int index, 8669f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet int count, float[] widths) { 8679f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // FIXME 8688a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, 8698a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet "Paint.getTextWidths is not supported.", null, null /*data*/); 8708a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet return 0; 8719f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 8729f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 8739a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 8749f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_getTextWidths(int native_object, String text, int start, 8759f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet int end, float[] widths) { 8769f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // FIXME 8778a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, 8788a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet "Paint.getTextWidths is not supported.", null, null /*data*/); 8798a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet return 0; 8809f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 8819f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 8829a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 8839f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static float native_getTextRunAdvances(int native_object, 8849f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet char[] text, int index, int count, int contextIndex, int contextCount, 8859f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet int flags, float[] advances, int advancesIndex) { 8865802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // get the delegate from the native int. 8875802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(native_object); 8885802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet if (delegate == null) { 8895802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return 0.f; 8905802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 8915802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 8925802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet if (delegate.mFonts.size() > 0) { 893251d2e99245095369b52d891a660b2ed270f02e0Xavier Ducrohet // FIXME: handle multi-char characters (see measureText) 8945802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet float totalAdvance = 0; 8955802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet for (int i = 0; i < count; i++) { 8965802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet char c = text[i + index]; 8975802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet boolean found = false; 8985802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet for (FontInfo info : delegate.mFonts) { 8995802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet if (info.mFont.canDisplay(c)) { 9005802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet float adv = info.mMetrics.charWidth(c); 9015802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet totalAdvance += adv; 9025802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet if (advances != null) { 9035802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet advances[i] = adv; 9045802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 9055802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 9065802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet found = true; 9075802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet break; 9085802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 9095802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 9105802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 9115802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet if (found == false) { 9125802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // no advance for this char. 9135802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet if (advances != null) { 9145802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet advances[i] = 0.f; 9155802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 9165802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 9175802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 9185802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 9195802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return totalAdvance; 9205802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 9215802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 9225802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return 0; 9235802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 9249f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 9259f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 9269a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 9279f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static float native_getTextRunAdvances(int native_object, 9289f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet String text, int start, int end, int contextStart, int contextEnd, 9299f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet int flags, float[] advances, int advancesIndex) { 9305802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // FIXME: support contextStart, contextEnd and direction flag 9315802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet int count = end - start; 9325802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet char[] buffer = TemporaryBuffer.obtain(count); 9335802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet TextUtils.getChars(text, start, end, buffer, 0); 9345802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 9355802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return native_getTextRunAdvances(native_object, buffer, 0, count, contextStart, 9365802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet contextEnd - contextStart, flags, advances, advancesIndex); 9379f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 9389f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 9399a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 9409f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_getTextRunCursor(Paint thisPaint, int native_object, char[] text, 9419f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet int contextStart, int contextLength, int flags, int offset, int cursorOpt) { 9429f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // FIXME 9438a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, 9448a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet "Paint.getTextRunCursor is not supported.", null, null /*data*/); 9458a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet return 0; 9469f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 9479f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 9489a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 9499f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static int native_getTextRunCursor(Paint thisPaint, int native_object, String text, 9509f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet int contextStart, int contextEnd, int flags, int offset, int cursorOpt) { 9519f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // FIXME 9528a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, 9538a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet "Paint.getTextRunCursor is not supported.", null, null /*data*/); 9548a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet return 0; 9559f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 9569f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 9579a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 9589f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void native_getTextPath(int native_object, int bidiFlags, 9599f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet char[] text, int index, int count, float x, float y, int path) { 9609f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // FIXME 9618a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, 9628a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet "Paint.getTextPath is not supported.", null, null /*data*/); 9639f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 9649f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 9659a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 9669f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void native_getTextPath(int native_object, int bidiFlags, 9679f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet String text, int start, int end, float x, float y, int path) { 9689f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // FIXME 9698a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, 9708a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet "Paint.getTextPath is not supported.", null, null /*data*/); 9719f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 9729f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 9739a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 9749f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void nativeGetStringBounds(int nativePaint, String text, int start, 9759f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet int end, Rect bounds) { 9769f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // FIXME 9778a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, 9788a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet "Paint.getStringBounds is not supported.", null, null /*data*/); 9799f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 9809f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 9819a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 9829f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void nativeGetCharArrayBounds(int nativePaint, char[] text, int index, 9839f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet int count, Rect bounds) { 9849f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // FIXME 9858a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, 9868a80a8555238cc564f445f902aff5231993a8f96Xavier Ducrohet "Paint.getCharArrayBounds is not supported.", null, null /*data*/); 9879f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 9889f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 9899a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 9909f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /*package*/ static void finalizer(int nativePaint) { 991cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet sManager.removeJavaReferenceFor(nativePaint); 9929f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 9939f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 9949f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // ---- Private delegate/helper methods ---- 9959f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 996d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet /*package*/ Paint_Delegate() { 9979f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet reset(); 9989f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 9999f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 10009f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private Paint_Delegate(Paint_Delegate paint) { 10019f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet set(paint); 10029f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 10039f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 10049f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private void set(Paint_Delegate paint) { 10059f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mFlags = paint.mFlags; 10069f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mColor = paint.mColor; 10079f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mStyle = paint.mStyle; 10089f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mCap = paint.mCap; 10099f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mJoin = paint.mJoin; 10105802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet mTextAlign = paint.mTextAlign; 10119f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mTypeface = paint.mTypeface; 10129f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mStrokeWidth = paint.mStrokeWidth; 10139f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mStrokeMiter = paint.mStrokeMiter; 10149f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mTextSize = paint.mTextSize; 10159f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mTextScaleX = paint.mTextScaleX; 10169f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mTextSkewX = paint.mTextSkewX; 1017abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet mXfermode = paint.mXfermode; 1018abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet mColorFilter = paint.mColorFilter; 1019abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet mShader = paint.mShader; 1020abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet mPathEffect = paint.mPathEffect; 1021abff653ce84e5079f35afab008c906063b0b2b6cXavier Ducrohet mMaskFilter = paint.mMaskFilter; 1022d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet mRasterizer = paint.mRasterizer; 1023b5ddf041d61f9346a4055b5bc5d51bd812b2ec28Xavier Ducrohet updateFontObject(); 10249f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 10259f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 10269f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private void reset() { 10279f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mFlags = Paint.DEFAULT_PAINT_FLAGS; 1028d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet mColor = 0xFF000000; 102963fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet mStyle = Paint.Style.FILL.nativeInt; 103063fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet mCap = Paint.Cap.BUTT.nativeInt; 103163fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet mJoin = Paint.Join.MITER.nativeInt; 10325802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet mTextAlign = 0; 1033cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet mTypeface = Typeface_Delegate.getDelegate(Typeface.sDefaults[0].native_instance); 10349f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mStrokeWidth = 1.f; 1035d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet mStrokeMiter = 4.f; 10369f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mTextSize = 20.f; 10379f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mTextScaleX = 1.f; 10389f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mTextSkewX = 0.f; 1039cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet mXfermode = null; 1040cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet mColorFilter = null; 1041cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet mShader = null; 1042cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet mPathEffect = null; 1043cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet mMaskFilter = null; 1044cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet mRasterizer = null; 1045b5ddf041d61f9346a4055b5bc5d51bd812b2ec28Xavier Ducrohet updateFontObject(); 10469f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 10479f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 10489f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet /** 10499f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet * Update the {@link Font} object from the typeface, text size and scaling 10509f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet */ 1051d43909c7503e11eb335a452d296a10804bb01fd6Xavier Ducrohet @SuppressWarnings("deprecation") 10529f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private void updateFontObject() { 1053cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet if (mTypeface != null) { 10549f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // Get the fonts from the TypeFace object. 1055cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet List<Font> fonts = mTypeface.getFonts(); 10569f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 10579f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // create new font objects as well as FontMetrics, based on the current text size 10589f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // and skew info. 10599f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet ArrayList<FontInfo> infoList = new ArrayList<FontInfo>(fonts.size()); 10609f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet for (Font font : fonts) { 10619f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet FontInfo info = new FontInfo(); 10629f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet info.mFont = font.deriveFont(mTextSize); 10639f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (mTextScaleX != 1.0 || mTextSkewX != 0) { 10649f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // TODO: support skew 10659f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet info.mFont = info.mFont.deriveFont(new AffineTransform( 10669f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mTextScaleX, mTextSkewX, 0, 0, 1, 0)); 10679f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 10689f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet info.mMetrics = Toolkit.getDefaultToolkit().getFontMetrics(info.mFont); 10699f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 10709f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet infoList.add(info); 10719f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 10729f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 10739f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet mFonts = Collections.unmodifiableList(infoList); 10749f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 10759f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 10769f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 10775802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet /*package*/ float measureText(char[] text, int index, int count) { 10785802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet if (mFonts.size() > 0) { 10795802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet FontInfo mainFont = mFonts.get(0); 10805802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet int i = index; 10815802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet int lastIndex = index + count; 10825802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet float total = 0f; 10835802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet while (i < lastIndex) { 10845802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // always start with the main font. 10855802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet int upTo = mainFont.mFont.canDisplayUpTo(text, i, lastIndex); 10865802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet if (upTo == -1) { 10875802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // shortcut to exit 10885802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return total + mainFont.mMetrics.charsWidth(text, i, lastIndex - i); 10895802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } else if (upTo > 0) { 10905802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet total += mainFont.mMetrics.charsWidth(text, i, upTo - i); 10915802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet i = upTo; 10925802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // don't call continue at this point. Since it is certain the main font 10935802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // cannot display the font a index upTo (now ==i), we move on to the 10945802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // fallback fonts directly. 10955802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 10965802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 10975802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // no char supported, attempt to read the next char(s) with the 10985802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // fallback font. In this case we only test the first character 10995802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // and then go back to test with the main font. 11005802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // Special test for 2-char characters. 11015802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet boolean foundFont = false; 11025802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet for (int f = 1 ; f < mFonts.size() ; f++) { 11035802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet FontInfo fontInfo = mFonts.get(f); 11045802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 11055802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // need to check that the font can display the character. We test 11065802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // differently if the char is a high surrogate. 11075802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet int charCount = Character.isHighSurrogate(text[i]) ? 2 : 1; 11085802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet upTo = fontInfo.mFont.canDisplayUpTo(text, i, i + charCount); 11095802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet if (upTo == -1) { 11105802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet total += fontInfo.mMetrics.charsWidth(text, i, charCount); 11115802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet i += charCount; 11125802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet foundFont = true; 11135802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet break; 11145802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 11155802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 11165802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 11175802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 11185802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet // in case no font can display the char, measure it with the main font. 11195802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet if (foundFont == false) { 11205802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet int size = Character.isHighSurrogate(text[i]) ? 2 : 1; 11215802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet total += mainFont.mMetrics.charsWidth(text, i, size); 11225802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet i += size; 11235802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 11245802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 11255802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 11265802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 11275802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet return 0; 11288da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet } 11295802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 11308da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet private float getFontMetrics(FontMetrics metrics) { 11318da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet if (mFonts.size() > 0) { 11328da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet java.awt.FontMetrics javaMetrics = mFonts.get(0).mMetrics; 11338da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet if (metrics != null) { 11348da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet // Android expects negative ascent so we invert the value from Java. 11358da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet metrics.top = - javaMetrics.getMaxAscent(); 11368da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet metrics.ascent = - javaMetrics.getAscent(); 11378da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet metrics.descent = javaMetrics.getDescent(); 11388da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet metrics.bottom = javaMetrics.getMaxDescent(); 11398da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet metrics.leading = javaMetrics.getLeading(); 11408da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet } 11418da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet 11428da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return javaMetrics.getHeight(); 11438da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet } 11448da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet 11458da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet return 0; 11465802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet } 11475802deabf06a0754c36e990ce2af7b5c8727e543Xavier Ducrohet 11488da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet 11498da36314fd76ae6fe4549773ad00dc1883cb6bffXavier Ducrohet 11509f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet private static void setFlag(Paint thisPaint, int flagMask, boolean flagValue) { 11519f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet // get the delegate from the native int. 11529f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint); 11539f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (delegate == null) { 11549f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet return; 11559f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 11569f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet 11579f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet if (flagValue) { 11589f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mFlags |= flagMask; 11599f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } else { 11609f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet delegate.mFlags &= ~flagMask; 11619f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 11629f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet } 11639f63ff263b0a97f0fa63e97136c18f6abccbfc68Xavier Ducrohet} 1164