Merge "Remove SaveFlags from saveLayer(Alpha)"

This commit is contained in:
John Reck
2020-11-17 21:48:30 +00:00
committed by Android (Google) Code Review
9 changed files with 28 additions and 47 deletions

View File

@@ -550,8 +550,7 @@ public class Canvas extends BaseCanvas {
@Saveflags int saveFlags) {
checkValidSaveFlags(saveFlags);
return nSaveLayer(mNativeCanvasWrapper, left, top, right, bottom,
paint != null ? paint.getNativeInstance() : 0,
ALL_SAVE_FLAG);
paint != null ? paint.getNativeInstance() : 0);
}
/**
@@ -626,8 +625,7 @@ public class Canvas extends BaseCanvas {
@Saveflags int saveFlags) {
checkValidSaveFlags(saveFlags);
alpha = Math.min(255, Math.max(0, alpha));
return nSaveLayerAlpha(mNativeCanvasWrapper, left, top, right, bottom,
alpha, ALL_SAVE_FLAG);
return nSaveLayerAlpha(mNativeCanvasWrapper, left, top, right, bottom, alpha);
}
/**
@@ -1420,10 +1418,10 @@ public class Canvas extends BaseCanvas {
private static native int nSave(long canvasHandle, int saveFlags);
@CriticalNative
private static native int nSaveLayer(long nativeCanvas, float l, float t, float r, float b,
long nativePaint, int layerFlags);
long nativePaint);
@CriticalNative
private static native int nSaveLayerAlpha(long nativeCanvas, float l, float t, float r, float b,
int alpha, int layerFlags);
int alpha);
@CriticalNative
private static native int nSaveUnclippedLayer(long nativeCanvas, int l, int t, int r, int b);
@CriticalNative

View File

@@ -160,32 +160,20 @@ void SkiaCanvas::restoreToCount(int restoreCount) {
}
}
static inline SkCanvas::SaveLayerFlags layerFlags(SaveFlags::Flags flags) {
SkCanvas::SaveLayerFlags layerFlags = 0;
if (!(flags & SaveFlags::ClipToLayer)) {
layerFlags |= SkCanvasPriv::kDontClipToLayer_SaveLayerFlag;
}
return layerFlags;
}
int SkiaCanvas::saveLayer(float left, float top, float right, float bottom, const SkPaint* paint,
SaveFlags::Flags flags) {
int SkiaCanvas::saveLayer(float left, float top, float right, float bottom, const SkPaint* paint) {
const SkRect bounds = SkRect::MakeLTRB(left, top, right, bottom);
const SkCanvas::SaveLayerRec rec(&bounds, paint, layerFlags(flags));
const SkCanvas::SaveLayerRec rec(&bounds, paint);
return mCanvas->saveLayer(rec);
}
int SkiaCanvas::saveLayerAlpha(float left, float top, float right, float bottom, int alpha,
SaveFlags::Flags flags) {
int SkiaCanvas::saveLayerAlpha(float left, float top, float right, float bottom, int alpha) {
if (static_cast<unsigned>(alpha) < 0xFF) {
SkPaint alphaPaint;
alphaPaint.setAlpha(alpha);
return this->saveLayer(left, top, right, bottom, &alphaPaint, flags);
return this->saveLayer(left, top, right, bottom, &alphaPaint);
}
return this->saveLayer(left, top, right, bottom, nullptr, flags);
return this->saveLayer(left, top, right, bottom, nullptr);
}
int SkiaCanvas::saveUnclippedLayer(int left, int top, int right, int bottom) {

View File

@@ -73,10 +73,8 @@ public:
virtual void restoreToCount(int saveCount) override;
virtual void restoreUnclippedLayer(int saveCount, const SkPaint& paint) override;
virtual int saveLayer(float left, float top, float right, float bottom, const SkPaint* paint,
SaveFlags::Flags flags) override;
virtual int saveLayerAlpha(float left, float top, float right, float bottom, int alpha,
SaveFlags::Flags flags) override;
virtual int saveLayer(float left, float top, float right, float bottom, const SkPaint* paint) override;
virtual int saveLayerAlpha(float left, float top, float right, float bottom, int alpha) override;
virtual int saveUnclippedLayer(int left, int top, int right, int bottom) override;
virtual void getMatrix(SkMatrix* outMatrix) const override;

View File

@@ -178,10 +178,8 @@ public:
virtual void restoreToCount(int saveCount) = 0;
virtual void restoreUnclippedLayer(int saveCount, const SkPaint& paint) = 0;
virtual int saveLayer(float left, float top, float right, float bottom, const SkPaint* paint,
SaveFlags::Flags flags) = 0;
virtual int saveLayerAlpha(float left, float top, float right, float bottom, int alpha,
SaveFlags::Flags flags) = 0;
virtual int saveLayer(float left, float top, float right, float bottom, const SkPaint* paint) = 0;
virtual int saveLayerAlpha(float left, float top, float right, float bottom, int alpha) = 0;
virtual int saveUnclippedLayer(int, int, int, int) = 0;
// Matrix

View File

@@ -93,16 +93,14 @@ static jint save(CRITICAL_JNI_PARAMS_COMMA jlong canvasHandle, jint flagsHandle)
}
static jint saveLayer(CRITICAL_JNI_PARAMS_COMMA jlong canvasHandle, jfloat l, jfloat t,
jfloat r, jfloat b, jlong paintHandle, jint flagsHandle) {
jfloat r, jfloat b, jlong paintHandle) {
Paint* paint = reinterpret_cast<Paint*>(paintHandle);
SaveFlags::Flags flags = static_cast<SaveFlags::Flags>(flagsHandle);
return static_cast<jint>(get_canvas(canvasHandle)->saveLayer(l, t, r, b, paint, flags));
return static_cast<jint>(get_canvas(canvasHandle)->saveLayer(l, t, r, b, paint));
}
static jint saveLayerAlpha(CRITICAL_JNI_PARAMS_COMMA jlong canvasHandle, jfloat l, jfloat t,
jfloat r, jfloat b, jint alpha, jint flagsHandle) {
SaveFlags::Flags flags = static_cast<SaveFlags::Flags>(flagsHandle);
return static_cast<jint>(get_canvas(canvasHandle)->saveLayerAlpha(l, t, r, b, alpha, flags));
jfloat r, jfloat b, jint alpha) {
return static_cast<jint>(get_canvas(canvasHandle)->saveLayerAlpha(l, t, r, b, alpha));
}
static jint saveUnclippedLayer(CRITICAL_JNI_PARAMS_COMMA jlong canvasHandle, jint l, jint t, jint r, jint b) {
@@ -688,8 +686,8 @@ static const JNINativeMethod gMethods[] = {
{"nGetWidth","(J)I", (void*) CanvasJNI::getWidth},
{"nGetHeight","(J)I", (void*) CanvasJNI::getHeight},
{"nSave","(JI)I", (void*) CanvasJNI::save},
{"nSaveLayer","(JFFFFJI)I", (void*) CanvasJNI::saveLayer},
{"nSaveLayerAlpha","(JFFFFII)I", (void*) CanvasJNI::saveLayerAlpha},
{"nSaveLayer","(JFFFFJ)I", (void*) CanvasJNI::saveLayer},
{"nSaveLayerAlpha","(JFFFFI)I", (void*) CanvasJNI::saveLayerAlpha},
{"nSaveUnclippedLayer","(JIIII)I", (void*) CanvasJNI::saveUnclippedLayer},
{"nRestoreUnclippedLayer","(JIJ)V", (void*) CanvasJNI::restoreUnclippedLayer},
{"nGetSaveCount","(J)I", (void*) CanvasJNI::getSaveCount},

View File

@@ -32,7 +32,7 @@ class ListOfFadedTextAnimation : public TestListViewSceneBase {
int itemHeight) override {
canvas.drawColor(Color::White, SkBlendMode::kSrcOver);
int length = dp(100);
canvas.saveLayer(0, 0, length, itemHeight, nullptr, SaveFlags::HasAlphaLayer);
canvas.saveLayer(0, 0, length, itemHeight, nullptr);
Paint textPaint;
textPaint.getSkFont().setSize(dp(20));
textPaint.setAntiAlias(true);

View File

@@ -47,8 +47,7 @@ public:
// interleave drawText and drawRect with saveLayer ops
for (int i = 0; i < regions; i++, top += smallRectHeight) {
canvas.saveLayer(bounds.fLeft, top, bounds.fRight, top + padding, &mBluePaint,
SaveFlags::ClipToLayer | SaveFlags::MatrixClip);
canvas.saveLayer(bounds.fLeft, top, bounds.fRight, top + padding, &mBluePaint);
canvas.drawColor(SkColorSetARGB(255, 255, 255, 0), SkBlendMode::kSrcOver);
std::string stri = std::to_string(i);
std::string offscreen = "offscreen line " + stri;

View File

@@ -33,10 +33,10 @@ public:
card = TestUtils::createNode(0, 0, 400, 800, [](RenderProperties& props, Canvas& canvas) {
// nested clipped saveLayers
canvas.saveLayerAlpha(0, 0, 400, 400, 200, SaveFlags::ClipToLayer);
canvas.saveLayerAlpha(0, 0, 400, 400, 200);
canvas.drawColor(Color::Green_700, SkBlendMode::kSrcOver);
canvas.clipRect(50, 50, 350, 350, SkClipOp::kIntersect);
canvas.saveLayerAlpha(100, 100, 300, 300, 128, SaveFlags::ClipToLayer);
canvas.saveLayerAlpha(100, 100, 300, 300, 128);
canvas.drawColor(Color::Blue_500, SkBlendMode::kSrcOver);
canvas.restore();
canvas.restore();
@@ -44,12 +44,14 @@ public:
// single unclipped saveLayer
canvas.save(SaveFlags::MatrixClip);
canvas.translate(0, 400);
canvas.saveLayerAlpha(100, 100, 300, 300, 128, SaveFlags::Flags(0)); // unclipped
int unclippedSaveLayer = canvas.saveUnclippedLayer(100, 100, 300, 300);
Paint paint;
paint.setAntiAlias(true);
paint.setColor(Color::Green_700);
canvas.drawCircle(200, 200, 200, paint);
canvas.restore();
SkPaint alphaPaint;
alphaPaint.setAlpha(128);
canvas.restoreUnclippedLayer(unclippedSaveLayer, alphaPaint);
canvas.restore();
});

View File

@@ -198,7 +198,7 @@ TEST(RenderNodeDrawable, saveLayerClipAndMatrixRestore) {
EXPECT_TRUE(getRecorderMatrix(recorder).isIdentity());
// note we don't pass SaveFlags::MatrixClip, but matrix and clip will be saved
recorder.saveLayer(0, 0, 400, 400, &layerPaint, SaveFlags::ClipToLayer);
recorder.saveLayer(0, 0, 400, 400, &layerPaint);
ASSERT_EQ(SkRect::MakeLTRB(0, 0, 400, 400), getRecorderClipBounds(recorder));
EXPECT_TRUE(getRecorderMatrix(recorder).isIdentity());