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

Commit 3ed3089f authored by Mike Reed's avatar Mike Reed
Browse files

Use SkSamplingOptions when creating image-shader

Test: make

Change-Id: Ie979cdb10263a08ea3d8c817234b94c9b61abb76
parent f010d5de
Loading
Loading
Loading
Loading
+30 −3
Original line number Original line Diff line number Diff line
@@ -31,6 +31,23 @@ public class BitmapShader extends Shader {
    private int mTileX;
    private int mTileX;
    private int mTileY;
    private int mTileY;


    /*
     *  This is cache of the last value from the Paint of bitmap-filtering.
     *  In the future, BitmapShaders will carry their own (expanded) data for this
     *  (e.g. including mipmap options, or bicubic weights)
     *
     *  When that happens, this bool will become those extended values, and we will
     *  need to track whether this Shader was created with those new constructors,
     *  or from the current "legacy" constructor, which (for compatibility) will
     *  still need to know the Paint's setting.
     *
     *  When the filter Paint setting is finally gone, we will be able to remove
     *  the filterFromPaint parameter currently being passed to createNativeInstance()
     *  and shouldDiscardNativeInstance(), as shaders will always know their filter
     *  settings.
     */
    private boolean mFilterFromPaint;

    /**
    /**
     * Call this to create a new shader that will draw with a bitmap.
     * Call this to create a new shader that will draw with a bitmap.
     *
     *
@@ -49,14 +66,24 @@ public class BitmapShader extends Shader {
        mBitmap = bitmap;
        mBitmap = bitmap;
        mTileX = tileX;
        mTileX = tileX;
        mTileY = tileY;
        mTileY = tileY;
        mFilterFromPaint = false;
    }
    }


    /** @hide */
    /** @hide */
    @Override
    @Override
    protected long createNativeInstance(long nativeMatrix) {
    protected long createNativeInstance(long nativeMatrix, boolean filterFromPaint) {
        return nativeCreate(nativeMatrix, mBitmap.getNativeInstance(), mTileX, mTileY);
        mFilterFromPaint = filterFromPaint;
        return nativeCreate(nativeMatrix, mBitmap.getNativeInstance(), mTileX, mTileY,
                            mFilterFromPaint);
    }

    /** @hide */
    @Override
    protected boolean shouldDiscardNativeInstance(boolean filterFromPaint) {
        return mFilterFromPaint != filterFromPaint;
    }
    }


    private static native long nativeCreate(long nativeMatrix, long bitmapHandle,
    private static native long nativeCreate(long nativeMatrix, long bitmapHandle,
            int shaderTileModeX, int shaderTileModeY);
            int shaderTileModeX, int shaderTileModeY, boolean filter);
}
}
+6 −4
Original line number Original line Diff line number Diff line
@@ -69,16 +69,18 @@ public final class BlurShader extends Shader {


    /** @hide **/
    /** @hide **/
    @Override
    @Override
    protected long createNativeInstance(long nativeMatrix) {
    protected long createNativeInstance(long nativeMatrix, boolean filterFromPaint) {
        mNativeInputShader = mInputShader != null ? mInputShader.getNativeInstance() : 0;
        mNativeInputShader = mInputShader != null
                ? mInputShader.getNativeInstance(filterFromPaint) : 0;
        return nativeCreate(nativeMatrix, mRadiusX, mRadiusY, mNativeInputShader,
        return nativeCreate(nativeMatrix, mRadiusX, mRadiusY, mNativeInputShader,
                mEdgeTreatment.nativeInt);
                mEdgeTreatment.nativeInt);
    }
    }


    /** @hide **/
    /** @hide **/
    @Override
    @Override
    protected boolean shouldDiscardNativeInstance() {
    protected boolean shouldDiscardNativeInstance(boolean filterFromPaint) {
        long currentNativeInstance = mInputShader != null ? mInputShader.getNativeInstance() : 0;
        long currentNativeInstance = mInputShader != null
                ? mInputShader.getNativeInstance(filterFromPaint) : 0;
        return mNativeInputShader != currentNativeInstance;
        return mNativeInputShader != currentNativeInstance;
    }
    }


+6 −6
Original line number Original line Diff line number Diff line
@@ -86,18 +86,18 @@ public class ComposeShader extends Shader {


    /** @hide */
    /** @hide */
    @Override
    @Override
    protected long createNativeInstance(long nativeMatrix) {
    protected long createNativeInstance(long nativeMatrix, boolean filterFromPaint) {
        mNativeInstanceShaderA = mShaderA.getNativeInstance();
        mNativeInstanceShaderA = mShaderA.getNativeInstance(filterFromPaint);
        mNativeInstanceShaderB = mShaderB.getNativeInstance();
        mNativeInstanceShaderB = mShaderB.getNativeInstance(filterFromPaint);
        return nativeCreate(nativeMatrix,
        return nativeCreate(nativeMatrix,
                mShaderA.getNativeInstance(), mShaderB.getNativeInstance(), mPorterDuffMode);
                mShaderA.getNativeInstance(), mShaderB.getNativeInstance(), mPorterDuffMode);
    }
    }


    /** @hide */
    /** @hide */
    @Override
    @Override
    protected boolean shouldDiscardNativeInstance() {
    protected boolean shouldDiscardNativeInstance(boolean filterFromPaint) {
        return mShaderA.getNativeInstance() != mNativeInstanceShaderA
        return mShaderA.getNativeInstance(filterFromPaint) != mNativeInstanceShaderA
                || mShaderB.getNativeInstance() != mNativeInstanceShaderB;
                || mShaderB.getNativeInstance(filterFromPaint) != mNativeInstanceShaderB;
    }
    }


    private static native long nativeCreate(long nativeMatrix,
    private static native long nativeCreate(long nativeMatrix,
+1 −1
Original line number Original line Diff line number Diff line
@@ -154,7 +154,7 @@ public class LinearGradient extends Shader {


    /** @hide */
    /** @hide */
    @Override
    @Override
    protected long createNativeInstance(long nativeMatrix) {
    protected long createNativeInstance(long nativeMatrix, boolean filterFromPaint) {
        return nativeCreate(nativeMatrix, mX0, mY0, mX1, mY1,
        return nativeCreate(nativeMatrix, mX0, mY0, mX1, mY1,
                mColorLongs, mPositions, mTileMode.nativeInt,
                mColorLongs, mPositions, mTileMode.nativeInt,
                colorSpace().getNativeInstance());
                colorSpace().getNativeInstance());
+2 −1
Original line number Original line Diff line number Diff line
@@ -698,7 +698,8 @@ public class Paint {
     */
     */
    @UnsupportedAppUsage
    @UnsupportedAppUsage
    public synchronized long getNativeInstance() {
    public synchronized long getNativeInstance() {
        long newNativeShader = mShader == null ? 0 : mShader.getNativeInstance();
        boolean filter = isFilterBitmap();
        long newNativeShader = mShader == null ? 0 : mShader.getNativeInstance(filter);
        if (newNativeShader != mNativeShader) {
        if (newNativeShader != mNativeShader) {
            mNativeShader = newNativeShader;
            mNativeShader = newNativeShader;
            nSetShader(mNativePaint, mNativeShader);
            nSetShader(mNativePaint, mNativeShader);
Loading