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

Commit 2660a3ec authored by Romain Guy's avatar Romain Guy
Browse files

Move the drawable state to the correct class.

Bug #4170455

The state tracking whether the Paint's shader should be rebuilt was kept in the
wrong class. This lead to the Drawable keeping track of the dirty status of the
Paint stored in the ConstantState. This of course does not work properly when
several drawables are inflated form the same ConstantState. This change fixes
the issue by moving the dirty Paint state to the ConstantState class. This is
allowed to work because of the single-thread rule enforced by the UI toolkit.

Change-Id: I9bb31d8e7335d6bb418470b59ae25d9085d7bd23
parent 60355780
Loading
Loading
Loading
Loading
+7 −7
Original line number Original line Diff line number Diff line
@@ -67,7 +67,6 @@ public class BitmapDrawable extends Drawable {
    private final Rect mDstRect = new Rect();   // Gravity.apply() sets this
    private final Rect mDstRect = new Rect();   // Gravity.apply() sets this


    private boolean mApplyGravity;
    private boolean mApplyGravity;
    private boolean mRebuildShader;
    private boolean mMutated;
    private boolean mMutated;
    
    
     // These are scaled to match the target density.
     // These are scaled to match the target density.
@@ -348,7 +347,7 @@ public class BitmapDrawable extends Drawable {
        if (state.mTileModeX != xmode || state.mTileModeY != ymode) {
        if (state.mTileModeX != xmode || state.mTileModeY != ymode) {
            state.mTileModeX = xmode;
            state.mTileModeX = xmode;
            state.mTileModeY = ymode;
            state.mTileModeY = ymode;
            mRebuildShader = true;
            state.mRebuildShader = true;
            invalidateSelf();
            invalidateSelf();
        }
        }
    }
    }
@@ -369,7 +368,7 @@ public class BitmapDrawable extends Drawable {
        Bitmap bitmap = mBitmap;
        Bitmap bitmap = mBitmap;
        if (bitmap != null) {
        if (bitmap != null) {
            final BitmapState state = mBitmapState;
            final BitmapState state = mBitmapState;
            if (mRebuildShader) {
            if (state.mRebuildShader) {
                Shader.TileMode tmx = state.mTileModeX;
                Shader.TileMode tmx = state.mTileModeX;
                Shader.TileMode tmy = state.mTileModeY;
                Shader.TileMode tmy = state.mTileModeY;


@@ -380,7 +379,7 @@ public class BitmapDrawable extends Drawable {
                            tmx == null ? Shader.TileMode.CLAMP : tmx,
                            tmx == null ? Shader.TileMode.CLAMP : tmx,
                            tmy == null ? Shader.TileMode.CLAMP : tmy));
                            tmy == null ? Shader.TileMode.CLAMP : tmy));
                }
                }
                mRebuildShader = false;
                state.mRebuildShader = false;
                copyBounds(mDstRect);
                copyBounds(mDstRect);
            }
            }


@@ -424,7 +423,6 @@ public class BitmapDrawable extends Drawable {
    public Drawable mutate() {
    public Drawable mutate() {
        if (!mMutated && super.mutate() == this) {
        if (!mMutated && super.mutate() == this) {
            mBitmapState = new BitmapState(mBitmapState);
            mBitmapState = new BitmapState(mBitmapState);
            mRebuildShader = true;
            mMutated = true;
            mMutated = true;
        }
        }
        return this;
        return this;
@@ -511,6 +509,7 @@ public class BitmapDrawable extends Drawable {
        Shader.TileMode mTileModeX = null;
        Shader.TileMode mTileModeX = null;
        Shader.TileMode mTileModeY = null;
        Shader.TileMode mTileModeY = null;
        int mTargetDensity = DisplayMetrics.DENSITY_DEFAULT;
        int mTargetDensity = DisplayMetrics.DENSITY_DEFAULT;
        boolean mRebuildShader;


        BitmapState(Bitmap bitmap) {
        BitmapState(Bitmap bitmap) {
            mBitmap = bitmap;
            mBitmap = bitmap;
@@ -524,6 +523,7 @@ public class BitmapDrawable extends Drawable {
            mTileModeY = bitmapState.mTileModeY;
            mTileModeY = bitmapState.mTileModeY;
            mTargetDensity = bitmapState.mTargetDensity;
            mTargetDensity = bitmapState.mTargetDensity;
            mPaint = new Paint(bitmapState.mPaint);
            mPaint = new Paint(bitmapState.mPaint);
            mRebuildShader = bitmapState.mRebuildShader;
        }
        }


        @Override
        @Override