From 5ceb30f2164c745789c13bd0060e57fa8c04a8fd Mon Sep 17 00:00:00 2001 From: Diego Perez Date: Tue, 22 Mar 2016 11:29:47 +0000 Subject: [PATCH] Add fill type support to vector drawable The platform has added fill type to vector drawables. This CL implements the native replacement. Also remove a couple of delegates for classes that have been removed from the platform. Change-Id: Ie6ba344db9c9c2c45cd0ef4b99f11f9d8bcfd7de --- .../graphics/AvoidXfermode_Delegate.java | 70 ------------------ .../src/android/graphics/Path_Delegate.java | 4 +- .../graphics/PixelXorXfermode_Delegate.java | 70 ------------------ .../drawable/VectorDrawable_Delegate.java | 17 ++++- .../MyApplication/golden/vector_drawable.png | Bin 5655 -> 5966 bytes .../src/main/res/drawable/multi_path.xml | 19 +++++ .../tools/layoutlib/create/CreateInfo.java | 2 - 7 files changed, 37 insertions(+), 145 deletions(-) delete mode 100644 tools/layoutlib/bridge/src/android/graphics/AvoidXfermode_Delegate.java delete mode 100644 tools/layoutlib/bridge/src/android/graphics/PixelXorXfermode_Delegate.java diff --git a/tools/layoutlib/bridge/src/android/graphics/AvoidXfermode_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/AvoidXfermode_Delegate.java deleted file mode 100644 index 34ae825baac8a..0000000000000 --- a/tools/layoutlib/bridge/src/android/graphics/AvoidXfermode_Delegate.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (C) 2010 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.graphics; - -import com.android.layoutlib.bridge.impl.DelegateManager; -import com.android.tools.layoutlib.annotations.LayoutlibDelegate; - -import java.awt.Composite; - -/** - * Delegate implementing the native methods of android.graphics.AvoidXfermode - * - * Through the layoutlib_create tool, the original native methods of AvoidXfermode have been - * replaced by calls to methods of the same name in this delegate class. - * - * This class behaves like the original native implementation, but in Java, keeping previously - * native data into its own objects and mapping them to int that are sent back and forth between - * it and the original AvoidXfermode class. - * - * Because this extends {@link Xfermode_Delegate}, there's no need to use a - * {@link DelegateManager}, as all the PathEffect classes will be added to the manager owned by - * {@link Xfermode_Delegate}. - * - */ -public class AvoidXfermode_Delegate extends Xfermode_Delegate { - - // ---- delegate data ---- - - // ---- Public Helper methods ---- - - @Override - public Composite getComposite(int alpha) { - // FIXME - return null; - } - - @Override - public boolean isSupported() { - return false; - } - - @Override - public String getSupportMessage() { - return "Avoid Xfermodes are not supported in Layout Preview mode."; - } - - // ---- native methods ---- - - @LayoutlibDelegate - /*package*/ static long nativeCreate(int opColor, int tolerance, int nativeMode) { - AvoidXfermode_Delegate newDelegate = new AvoidXfermode_Delegate(); - return sManager.addNewDelegate(newDelegate); - } - - // ---- Private delegate/helper methods ---- -} diff --git a/tools/layoutlib/bridge/src/android/graphics/Path_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Path_Delegate.java index 08f0cb4918822..f5938cfa37a53 100644 --- a/tools/layoutlib/bridge/src/android/graphics/Path_Delegate.java +++ b/tools/layoutlib/bridge/src/android/graphics/Path_Delegate.java @@ -167,13 +167,13 @@ public final class Path_Delegate { } @LayoutlibDelegate - /*package*/ static void native_setFillType(long nPath, int ft) { + public static void native_setFillType(long nPath, int ft) { Path_Delegate pathDelegate = sManager.getDelegate(nPath); if (pathDelegate == null) { return; } - pathDelegate.mFillType = Path.sFillTypeArray[ft]; + pathDelegate.setFillType(Path.sFillTypeArray[ft]); } @LayoutlibDelegate diff --git a/tools/layoutlib/bridge/src/android/graphics/PixelXorXfermode_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/PixelXorXfermode_Delegate.java deleted file mode 100644 index f27144f45448a..0000000000000 --- a/tools/layoutlib/bridge/src/android/graphics/PixelXorXfermode_Delegate.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (C) 2010 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.graphics; - -import com.android.layoutlib.bridge.impl.DelegateManager; -import com.android.tools.layoutlib.annotations.LayoutlibDelegate; - -import java.awt.Composite; - -/** - * Delegate implementing the native methods of android.graphics.PixelXorXfermode - * - * Through the layoutlib_create tool, the original native methods of PixelXorXfermode have been - * replaced by calls to methods of the same name in this delegate class. - * - * This class behaves like the original native implementation, but in Java, keeping previously - * native data into its own objects and mapping them to int that are sent back and forth between - * it and the original PixelXorXfermode class. - * - * Because this extends {@link Xfermode_Delegate}, there's no need to use a - * {@link DelegateManager}, as all the PathEffect classes will be added to the manager owned by - * {@link Xfermode_Delegate}. - * - * @see Xfermode_Delegate - */ -public class PixelXorXfermode_Delegate extends Xfermode_Delegate { - // ---- delegate data ---- - - // ---- Public Helper methods ---- - - @Override - public Composite getComposite(int alpha) { - // FIXME - return null; - } - - @Override - public boolean isSupported() { - return false; - } - - @Override - public String getSupportMessage() { - return "Pixel XOR Xfermodes are not supported in Layout Preview mode."; - } - - // ---- native methods ---- - - @LayoutlibDelegate - /*package*/ static long nativeCreate(int opColor) { - PixelXorXfermode_Delegate newDelegate = new PixelXorXfermode_Delegate(); - return sManager.addNewDelegate(newDelegate); - } - - // ---- Private delegate/helper methods ---- -} diff --git a/tools/layoutlib/bridge/src/android/graphics/drawable/VectorDrawable_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/drawable/VectorDrawable_Delegate.java index 90b84f830e762..d8ff57bf0b7a1 100644 --- a/tools/layoutlib/bridge/src/android/graphics/drawable/VectorDrawable_Delegate.java +++ b/tools/layoutlib/bridge/src/android/graphics/drawable/VectorDrawable_Delegate.java @@ -178,6 +178,7 @@ public class VectorDrawable_Delegate { properties.putInt(VFullPath_Delegate.STROKE_LINE_JOIN_INDEX * 4, path.getStrokeLineJoin()); properties.putFloat(VFullPath_Delegate.STROKE_MITER_LIMIT_INDEX * 4, path.getStrokeMiterlimit()); + properties.putInt(VFullPath_Delegate.FILL_TYPE_INDEX * 4, path.getFillType()); return true; } @@ -186,7 +187,7 @@ public class VectorDrawable_Delegate { static void nUpdateFullPathProperties(long pathPtr, float strokeWidth, int strokeColor, float strokeAlpha, int fillColor, float fillAlpha, float trimPathStart, float trimPathEnd, float trimPathOffset, float strokeMiterLimit, int strokeLineCap, - int strokeLineJoin) { + int strokeLineJoin, int fillType) { VFullPath_Delegate path = VNativeObject.getDelegate(pathPtr); path.setStrokeWidth(strokeWidth); @@ -200,6 +201,7 @@ public class VectorDrawable_Delegate { path.setStrokeMiterlimit(strokeMiterLimit); path.setStrokeLineCap(strokeLineCap); path.setStrokeLineJoin(strokeLineJoin); + path.setFillType(fillType); } @LayoutlibDelegate @@ -530,6 +532,7 @@ public class VectorDrawable_Delegate { private static final int STROKE_LINE_CAP_INDEX = 8; private static final int STROKE_LINE_JOIN_INDEX = 9; private static final int STROKE_MITER_LIMIT_INDEX = 10; + private static final int FILL_TYPE_INDEX = 11; private static final int LINECAP_BUTT = 0; private static final int LINECAP_ROUND = 1; @@ -590,6 +593,8 @@ public class VectorDrawable_Delegate { Join mStrokeLineJoin = MITER; float mStrokeMiterlimit = 4; + int mFillType = 0; // WINDING(0) is the default value. See Path.FillType + private VFullPath_Delegate() { // Empty constructor. } @@ -612,6 +617,7 @@ public class VectorDrawable_Delegate { mStrokeGradient = copy.mStrokeGradient; mFillGradient = copy.mFillGradient; + mFillType = copy.mFillType; } private int getStrokeLineCap() { @@ -755,6 +761,14 @@ public class VectorDrawable_Delegate { private void setFillGradient(long gradientPtr) { mFillGradient = gradientPtr; } + + private void setFillType(int fillType) { + mFillType = fillType; + } + + private int getFillType() { + return mFillType; + } } static class VGroup_Delegate implements VNativeObject { @@ -1124,6 +1138,7 @@ public class VectorDrawable_Delegate { assert fillPaintDelegate != null; fillPaintDelegate.setColorFilter(filterPtr); fillPaintDelegate.setShader(fullPath.mFillGradient); + Path_Delegate.native_setFillType(mRenderPath.mNativePath, fullPath.mFillType); Canvas_Delegate.native_drawPath(canvasPtr, mRenderPath.mNativePath, fillPaint .getNativeInstance()); } diff --git a/tools/layoutlib/bridge/tests/res/testApp/MyApplication/golden/vector_drawable.png b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/golden/vector_drawable.png index 47cb04238e0c2f370228748c385ab75a654186fb..55d6a20949a221367fc85e9f313ba9f68e16219e 100644 GIT binary patch literal 5966 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 F{{V~=C^i59 literal 5655 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 E000QXW&i*H diff --git a/tools/layoutlib/bridge/tests/res/testApp/MyApplication/src/main/res/drawable/multi_path.xml b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/src/main/res/drawable/multi_path.xml index 5c19b082904e4..32e6e732bb5af 100644 --- a/tools/layoutlib/bridge/tests/res/testApp/MyApplication/src/main/res/drawable/multi_path.xml +++ b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/src/main/res/drawable/multi_path.xml @@ -63,6 +63,25 @@ android:fillColor="@color/gradient" android:pathData="M-20,-20 l0, 10 l10, 0 l0, -10 l-10,0 " /> + + + + + \ No newline at end of file diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java index bd376654e60f6..f32bb7667c7be 100644 --- a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java +++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java @@ -256,7 +256,6 @@ public final class CreateInfo implements ICreateInfo { */ public final static String[] DELEGATE_CLASS_NATIVES = new String[] { "android.animation.PropertyValuesHolder", - "android.graphics.AvoidXfermode", "android.graphics.Bitmap", "android.graphics.BitmapFactory", "android.graphics.BitmapShader", @@ -284,7 +283,6 @@ public final class CreateInfo implements ICreateInfo { "android.graphics.PathDashPathEffect", "android.graphics.PathEffect", "android.graphics.PathMeasure", - "android.graphics.PixelXorXfermode", "android.graphics.PorterDuffColorFilter", "android.graphics.PorterDuffXfermode", "android.graphics.RadialGradient",