Loading core/java/android/content/res/TypedArray.java +3 −3 Original line number Diff line number Diff line Loading @@ -885,9 +885,9 @@ public class TypedArray { /** * Extracts theme attributes from a typed array for later resolution using * {@link Theme#resolveAttributes(int[], int[])}. Removes the entries from * the typed array so that subsequent calls to typed getters will return the * default value without crashing. * {@link android.content.res.Resources.Theme#resolveAttributes(int[], int[])}. * Removes the entries from the typed array so that subsequent calls to typed * getters will return the default value without crashing. * * @return an array of length {@link #getIndexCount()} populated with theme * attributes, or null if there are no theme attributes in the typed Loading core/res/res/values/attrs.xml +10 −0 Original line number Diff line number Diff line Loading @@ -4978,6 +4978,16 @@ <!-- ========================== --> <eat-comment /> <!-- Drawable used to draw vector paths. --> <declare-styleable name="VectorDrawable"> <!-- If set, specifies the color to apply to the drawable as a tint. By default, no tint is applied. May be a color state list. --> <attr name="tint" /> <!-- When a tint color is set, specifies its Porter-Duff blending mode. The default value is src_in, which treats the drawable as an alpha mask. --> <attr name="tintMode" /> </declare-styleable> <!-- Define the virtual size of the drawing surface paths will draw to. --> <declare-styleable name="VectorDrawableViewport"> <!-- The width of the canvas the drawing is on. --> Loading graphics/java/android/graphics/drawable/VectorDrawable.java +36 −15 Original line number Diff line number Diff line Loading @@ -285,13 +285,6 @@ public class VectorDrawable extends Drawable { } } @Override public void inflate(Resources res, XmlPullParser parser, AttributeSet attrs, Theme theme) throws XmlPullParserException, IOException { final VPathRenderer p = inflateInternal(res, parser, attrs, theme); setPathRenderer(p); } @Override public boolean canApplyTheme() { return super.canApplyTheme() || mVectorState != null && mVectorState.canApplyTheme(); Loading Loading @@ -335,13 +328,44 @@ public class VectorDrawable extends Drawable { return color; } private VPathRenderer inflateInternal(Resources res, XmlPullParser parser, AttributeSet attrs, Theme theme) throws XmlPullParserException, IOException { @Override public void inflate(Resources res, XmlPullParser parser, AttributeSet attrs, Theme theme) throws XmlPullParserException, IOException { final TypedArray a = obtainAttributes(res, theme, attrs,R.styleable.VectorDrawable); updateStateFromTypedArray(a); a.recycle(); final VectorDrawableState state = mVectorState; state.mVPathRenderer = inflateInternal(res, parser, attrs, theme); mTintFilter = updateTintFilter(mTintFilter, state.mTint, state.mTintMode); state.mVPathRenderer.setColorFilter(mTintFilter); } private void updateStateFromTypedArray(TypedArray a) { final VectorDrawableState state = mVectorState; // Extract the theme attributes, if any. state.mThemeAttrs = a.extractThemeAttrs(); final int tintMode = a.getInt(R.styleable.VectorDrawable_tintMode, -1); if (tintMode != -1) { state.mTintMode = Drawable.parseTintMode(tintMode, Mode.SRC_IN); } final ColorStateList tint = a.getColorStateList(R.styleable.VectorDrawable_tint); if (tint != null) { state.mTint = tint; } } private VPathRenderer inflateInternal(Resources res, XmlPullParser parser, AttributeSet attrs, Theme theme) throws XmlPullParserException, IOException { final VPathRenderer pathRenderer = new VPathRenderer(); boolean noSizeTag = true; boolean noViewportTag = true; boolean noGroupTag = true; boolean noPathTag = true; // Use a stack to help to build the group tree. Loading Loading @@ -377,7 +401,6 @@ public class VectorDrawable extends Drawable { if (newChildGroup.getGroupName() != null) { mVGTargetsMap.put(newChildGroup.getGroupName(), newChildGroup); } noGroupTag = false; } } else if (eventType == XmlPullParser.END_TAG) { final String tagName = parser.getName(); Loading Loading @@ -435,11 +458,8 @@ public class VectorDrawable extends Drawable { } } private void setPathRenderer(VPathRenderer pathRenderer) { mVectorState.mVPathRenderer = pathRenderer; } private static class VectorDrawableState extends ConstantState { int[] mThemeAttrs; int mChangingConfigurations; VPathRenderer mVPathRenderer; Rect mPadding; Loading @@ -448,6 +468,7 @@ public class VectorDrawable extends Drawable { public VectorDrawableState(VectorDrawableState copy) { if (copy != null) { mThemeAttrs = copy.mThemeAttrs; mChangingConfigurations = copy.mChangingConfigurations; // TODO: Make sure the constant state are handled correctly. mVPathRenderer = new VPathRenderer(copy.mVPathRenderer); Loading Loading
core/java/android/content/res/TypedArray.java +3 −3 Original line number Diff line number Diff line Loading @@ -885,9 +885,9 @@ public class TypedArray { /** * Extracts theme attributes from a typed array for later resolution using * {@link Theme#resolveAttributes(int[], int[])}. Removes the entries from * the typed array so that subsequent calls to typed getters will return the * default value without crashing. * {@link android.content.res.Resources.Theme#resolveAttributes(int[], int[])}. * Removes the entries from the typed array so that subsequent calls to typed * getters will return the default value without crashing. * * @return an array of length {@link #getIndexCount()} populated with theme * attributes, or null if there are no theme attributes in the typed Loading
core/res/res/values/attrs.xml +10 −0 Original line number Diff line number Diff line Loading @@ -4978,6 +4978,16 @@ <!-- ========================== --> <eat-comment /> <!-- Drawable used to draw vector paths. --> <declare-styleable name="VectorDrawable"> <!-- If set, specifies the color to apply to the drawable as a tint. By default, no tint is applied. May be a color state list. --> <attr name="tint" /> <!-- When a tint color is set, specifies its Porter-Duff blending mode. The default value is src_in, which treats the drawable as an alpha mask. --> <attr name="tintMode" /> </declare-styleable> <!-- Define the virtual size of the drawing surface paths will draw to. --> <declare-styleable name="VectorDrawableViewport"> <!-- The width of the canvas the drawing is on. --> Loading
graphics/java/android/graphics/drawable/VectorDrawable.java +36 −15 Original line number Diff line number Diff line Loading @@ -285,13 +285,6 @@ public class VectorDrawable extends Drawable { } } @Override public void inflate(Resources res, XmlPullParser parser, AttributeSet attrs, Theme theme) throws XmlPullParserException, IOException { final VPathRenderer p = inflateInternal(res, parser, attrs, theme); setPathRenderer(p); } @Override public boolean canApplyTheme() { return super.canApplyTheme() || mVectorState != null && mVectorState.canApplyTheme(); Loading Loading @@ -335,13 +328,44 @@ public class VectorDrawable extends Drawable { return color; } private VPathRenderer inflateInternal(Resources res, XmlPullParser parser, AttributeSet attrs, Theme theme) throws XmlPullParserException, IOException { @Override public void inflate(Resources res, XmlPullParser parser, AttributeSet attrs, Theme theme) throws XmlPullParserException, IOException { final TypedArray a = obtainAttributes(res, theme, attrs,R.styleable.VectorDrawable); updateStateFromTypedArray(a); a.recycle(); final VectorDrawableState state = mVectorState; state.mVPathRenderer = inflateInternal(res, parser, attrs, theme); mTintFilter = updateTintFilter(mTintFilter, state.mTint, state.mTintMode); state.mVPathRenderer.setColorFilter(mTintFilter); } private void updateStateFromTypedArray(TypedArray a) { final VectorDrawableState state = mVectorState; // Extract the theme attributes, if any. state.mThemeAttrs = a.extractThemeAttrs(); final int tintMode = a.getInt(R.styleable.VectorDrawable_tintMode, -1); if (tintMode != -1) { state.mTintMode = Drawable.parseTintMode(tintMode, Mode.SRC_IN); } final ColorStateList tint = a.getColorStateList(R.styleable.VectorDrawable_tint); if (tint != null) { state.mTint = tint; } } private VPathRenderer inflateInternal(Resources res, XmlPullParser parser, AttributeSet attrs, Theme theme) throws XmlPullParserException, IOException { final VPathRenderer pathRenderer = new VPathRenderer(); boolean noSizeTag = true; boolean noViewportTag = true; boolean noGroupTag = true; boolean noPathTag = true; // Use a stack to help to build the group tree. Loading Loading @@ -377,7 +401,6 @@ public class VectorDrawable extends Drawable { if (newChildGroup.getGroupName() != null) { mVGTargetsMap.put(newChildGroup.getGroupName(), newChildGroup); } noGroupTag = false; } } else if (eventType == XmlPullParser.END_TAG) { final String tagName = parser.getName(); Loading Loading @@ -435,11 +458,8 @@ public class VectorDrawable extends Drawable { } } private void setPathRenderer(VPathRenderer pathRenderer) { mVectorState.mVPathRenderer = pathRenderer; } private static class VectorDrawableState extends ConstantState { int[] mThemeAttrs; int mChangingConfigurations; VPathRenderer mVPathRenderer; Rect mPadding; Loading @@ -448,6 +468,7 @@ public class VectorDrawable extends Drawable { public VectorDrawableState(VectorDrawableState copy) { if (copy != null) { mThemeAttrs = copy.mThemeAttrs; mChangingConfigurations = copy.mChangingConfigurations; // TODO: Make sure the constant state are handled correctly. mVPathRenderer = new VPathRenderer(copy.mVPathRenderer); Loading