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

Commit 834653bc authored by Mike Reed's avatar Mike Reed
Browse files

try to stop using exotic clipps

Change-Id: Id11d7744daa69c19fdc9b7723862b3d71ad21384
parent 94b5c92a
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -187,10 +187,6 @@ static jboolean quickRejectPath(JNIEnv* env, jobject, jlong canvasHandle, jlong
// from one to the other (though SkClipOp is destined to become a strict subset)
static_assert(SkRegion::kDifference_Op == static_cast<SkRegion::Op>(SkClipOp::kDifference), "");
static_assert(SkRegion::kIntersect_Op == static_cast<SkRegion::Op>(SkClipOp::kIntersect), "");
static_assert(SkRegion::kUnion_Op == static_cast<SkRegion::Op>(SkClipOp::kUnion), "");
static_assert(SkRegion::kXOR_Op == static_cast<SkRegion::Op>(SkClipOp::kXOR), "");
static_assert(SkRegion::kReverseDifference_Op == static_cast<SkRegion::Op>(SkClipOp::kReverseDifference), "");
static_assert(SkRegion::kReplace_Op == static_cast<SkRegion::Op>(SkClipOp::kReplace), "");

static SkClipOp opHandleToClipOp(jint opHandle) {
    // The opHandle is defined in Canvas.java to be Region::Op
+2 −2
Original line number Diff line number Diff line
@@ -100,7 +100,7 @@ void SkiaPipeline::renderLayersImpl(const LayerUpdateQueue& layers, bool opaque)
            int saveCount = layerCanvas->save();
            SkASSERT(saveCount == 1);

            layerCanvas->clipRect(layerDamage.toSkRect(), SkClipOp::kReplace);
            layerCanvas->clipRect(layerDamage.toSkRect(), SkClipOp::kReplace_private_internal_do_not_use);

            auto savedLightCenter = mLightCenter;
            // map current light center into RenderNode's coordinate space
@@ -234,7 +234,7 @@ void SkiaPipeline::renderFrameImpl(const LayerUpdateQueue& layers, const SkRect&
        const std::vector<sp<RenderNode>>& nodes, bool opaque, const Rect &contentDrawBounds,
        SkCanvas* canvas) {

    canvas->clipRect(clip, SkClipOp::kReplace);
    canvas->clipRect(clip, SkClipOp::kReplace_private_internal_do_not_use);

    if (!opaque) {
        canvas->clear(SK_ColorTRANSPARENT);
+1 −1
Original line number Diff line number Diff line
@@ -74,7 +74,7 @@ TEST(CanvasState, simpleClipping) {
    state.clipRect(10, 10, 200, 200, SkClipOp::kIntersect);
    ASSERT_EQ(state.getRenderTargetClipBounds(), Rect(10, 10, 100, 100));

    state.clipRect(50, 50, 150, 150, SkClipOp::kReplace);
    state.clipRect(50, 50, 150, 150, SkClipOp::kReplace_private_internal_do_not_use);
    ASSERT_EQ(state.getRenderTargetClipBounds(), Rect(50, 50, 150, 150));
}

+13 −5
Original line number Diff line number Diff line
@@ -453,20 +453,28 @@ RENDERTHREAD_TEST(FrameBuilder, clippedMerging) {
        sk_sp<Bitmap> bitmap(TestUtils::createBitmap(20, 20));

        // left side clipped (to inset left half)
        canvas.clipRect(10, 0, 50, 100, SkClipOp::kReplace);
        canvas.save(SaveFlags::MatrixClip);
        canvas.clipRect(10, 0, 50, 100, SkClipOp::kIntersect);
        canvas.drawBitmap(*bitmap, 0, 40, nullptr);
        canvas.restore();

        // top side clipped (to inset top half)
        canvas.clipRect(0, 10, 100, 50, SkClipOp::kReplace);
        canvas.save(SaveFlags::MatrixClip);
        canvas.clipRect(0, 10, 100, 50, SkClipOp::kIntersect);
        canvas.drawBitmap(*bitmap, 40, 0, nullptr);
        canvas.restore();

        // right side clipped (to inset right half)
        canvas.clipRect(50, 0, 90, 100, SkClipOp::kReplace);
        canvas.save(SaveFlags::MatrixClip);
        canvas.clipRect(50, 0, 90, 100, SkClipOp::kIntersect);
        canvas.drawBitmap(*bitmap, 80, 40, nullptr);
        canvas.restore();

        // bottom not clipped, just abutting (inset bottom half)
        canvas.clipRect(0, 50, 100, 90, SkClipOp::kReplace);
        canvas.save(SaveFlags::MatrixClip);
        canvas.clipRect(0, 50, 100, 90, SkClipOp::kIntersect);
        canvas.drawBitmap(*bitmap, 40, 70, nullptr);
        canvas.restore();
    });

    FrameBuilder frameBuilder(SkRect::MakeWH(100, 100), 100, 100,
@@ -2252,7 +2260,7 @@ RENDERTHREAD_TEST(FrameBuilder, clip_replace) {
    };
    auto node = TestUtils::createNode<RecordingCanvas>(20, 20, 30, 30,
            [](RenderProperties& props, RecordingCanvas& canvas) {
        canvas.clipRect(0, -20, 10, 30, SkClipOp::kReplace);
        canvas.clipRect(0, -20, 10, 30, SkClipOp::kReplace_private_internal_do_not_use);
        canvas.drawColor(SK_ColorWHITE, SkBlendMode::kSrcOver);
    });

+1 −4
Original line number Diff line number Diff line
@@ -459,9 +459,6 @@ TEST(RecordingCanvas, saveLayer_addClipFlag) {

TEST(RecordingCanvas, saveLayer_viewportCrop) {
    auto dl = TestUtils::createDisplayList<RecordingCanvas>(200, 200, [](RecordingCanvas& canvas) {
        // shouldn't matter, since saveLayer will clip to its bounds
        canvas.clipRect(-1000, -1000, 1000, 1000, SkClipOp::kReplace);

        canvas.saveLayerAlpha(100, 100, 300, 300, 128, SaveFlags::ClipToLayer);
        canvas.drawRect(0, 0, 400, 400, SkPaint());
        canvas.restore();
@@ -638,7 +635,7 @@ TEST(RecordingCanvas, firstClipWillReplace) {
TEST(RecordingCanvas, replaceClipIntersectWithRoot) {
    auto dl = TestUtils::createDisplayList<RecordingCanvas>(100, 100, [](RecordingCanvas& canvas) {
        canvas.save(SaveFlags::MatrixClip);
        canvas.clipRect(-10, -10, 110, 110, SkClipOp::kReplace);
        canvas.clipRect(-10, -10, 110, 110, SkClipOp::kReplace_private_internal_do_not_use);
        canvas.drawColor(SK_ColorWHITE, SkBlendMode::kSrcOver);
        canvas.restore();
    });
Loading