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

Commit 1b338cda authored by Diego Perez's avatar Diego Perez
Browse files

Add missing translate if the drawable top is not 0,0

If the vector drawable coordinates are not 0,0 we need to translate the
canvas to that position.

Change-Id: I3a829c427ec98061da3295e3cba8655f693d390c
parent 34bfcf1f
Loading
Loading
Loading
Loading
+14 −23
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@

package android.graphics.drawable;

import com.android.internal.R;
import com.android.layoutlib.bridge.impl.DelegateManager;
import com.android.tools.layoutlib.annotations.LayoutlibDelegate;

@@ -136,7 +135,21 @@ public class VectorDrawable_Delegate {
        VPathRenderer_Delegate nativePathRenderer =
                getDelegate(rendererPtr);

        Canvas_Delegate.native_save(canvasWrapperPtr, MATRIX_SAVE_FLAG | CLIP_SAVE_FLAG);
        Canvas_Delegate.native_translate(canvasWrapperPtr, bounds.left, bounds.top);

        if (needsMirroring) {
            Canvas_Delegate.native_translate(canvasWrapperPtr, bounds.width(), 0);
            Canvas_Delegate.native_scale(canvasWrapperPtr, -1.0f, 1.0f);
        }

        // At this point, canvas has been translated to the right position.
        // And we use this bound for the destination rect for the drawBitmap, so
        // we offset to (0, 0);
        bounds.offsetTo(0, 0);
        nativePathRenderer.draw(canvasWrapperPtr, colorFilterPtr, bounds.width(), bounds.height());

        Canvas_Delegate.native_restore(canvasWrapperPtr, true);
    }

    @LayoutlibDelegate
@@ -492,28 +505,6 @@ public class VectorDrawable_Delegate {
            super(copy);
        }

        public void inflate(Resources r, AttributeSet attrs, Theme theme) {
            final TypedArray a = obtainAttributes(r, theme, attrs,
                    R.styleable.VectorDrawableClipPath);
            updateStateFromTypedArray(a);
            a.recycle();
        }

        private void updateStateFromTypedArray(TypedArray a) {
            // Account for any configuration changes.
            mChangingConfigurations |= a.getChangingConfigurations();

            final String pathName = a.getString(R.styleable.VectorDrawableClipPath_name);
            if (pathName != null) {
                mPathName = pathName;
            }

            final String pathData = a.getString(R.styleable.VectorDrawableClipPath_pathData);
            if (pathData != null) {
                mNodes = PathParser_Delegate.createNodesFromPathData(pathData);
            }
        }

        @Override
        public boolean isClipPath() {
            return true;