Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e93c9012 authored by Alan Viverette's avatar Alan Viverette Committed by Android (Google) Code Review
Browse files

Merge "Add support for tint attribute in VectorDrawable"

parents 83415838 9a77cb92
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -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
+10 −0
Original line number Diff line number Diff line
@@ -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. -->
+26 −0
Original line number Diff line number Diff line
@@ -378,6 +378,8 @@ public class VectorDrawable extends Drawable {
                        mVGTargetsMap.put(newChildGroup.getGroupName(), newChildGroup);
                    }
                    noGroupTag = false;
                } else if (SHAPE_VECTOR.equals(tagName)) {
                    parseVector(res, attrs);
                }
            } else if (eventType == XmlPullParser.END_TAG) {
                final String tagName = parser.getName();
@@ -417,9 +419,31 @@ public class VectorDrawable extends Drawable {
            throw new XmlPullParserException("no " + tag + " defined");
        }

        mTintFilter = updateTintFilter(mTintFilter, mVectorState.mTint, mVectorState.mTintMode);
        mVectorState.mVPathRenderer.setColorFilter(mTintFilter);

        return pathRenderer;
    }

    private void parseVector(Resources r, AttributeSet attrs) throws XmlPullParserException {
        final TypedArray a = r.obtainAttributes(attrs, R.styleable.VectorDrawable);
        final VectorDrawableState state = mVectorState;

        state.mThemeAttrs = a.extractThemeAttrs();

        final int tintMode = a.getInt(R.styleable.BitmapDrawable_tintMode, -1);
        if (tintMode != -1) {
            state.mTintMode = Drawable.parseTintMode(tintMode, Mode.SRC_IN);
        }

        final ColorStateList tint = a.getColorStateList(R.styleable.BitmapDrawable_tint);
        if (tint != null) {
            state.mTint = tint;
        }

        a.recycle();
    }

    private void printGroupTree(VGroup currentGroup, int level) {
        String indent = "";
        for (int i = 0 ; i < level ; i++) {
@@ -440,6 +464,7 @@ public class VectorDrawable extends Drawable {
    }

    private static class VectorDrawableState extends ConstantState {
        int[] mThemeAttrs;
        int mChangingConfigurations;
        VPathRenderer mVPathRenderer;
        Rect mPadding;
@@ -448,6 +473,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);