Merge "Remove SaveFlags from saveLayer(Alpha)"
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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},
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
});
|
||||
|
||||
|
||||
@@ -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());
|
||||
|
||||
|
||||
Reference in New Issue
Block a user