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

Commit b76e5865 authored by Chris Craik's avatar Chris Craik Committed by Android (Google) Code Review
Browse files

Merge "Calculate clip bounds correctly when serializing" into nyc-dev

parents 950b3042 b4f4f3e1
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -361,17 +361,21 @@ const ClipBase* ClipArea::serializeClip(LinearAllocator& allocator) {
            "expect RectangleList to be trivially destructible");

    if (mLastSerialization == nullptr) {
        ClipBase* serialization;
        switch (mMode) {
        case ClipMode::Rectangle:
            mLastSerialization = allocator.create<ClipRect>(mClipRect);
            serialization = allocator.create<ClipRect>(mClipRect);
            break;
        case ClipMode::RectangleList:
            mLastSerialization = allocator.create<ClipRectList>(mRectangleList);
            serialization = allocator.create<ClipRectList>(mRectangleList);
            serialization->rect = mRectangleList.calculateBounds();
            break;
        case ClipMode::Region:
            mLastSerialization = allocator.create<ClipRegion>(mClipRegion);
            serialization = allocator.create<ClipRegion>(mClipRegion);
            serialization->rect.set(mClipRegion.getBounds());
            break;
        }
        mLastSerialization = serialization;
    }
    return mLastSerialization;
}
+7 −3
Original line number Diff line number Diff line
@@ -133,7 +133,7 @@ TEST(ClipArea, serializeClip) {
        ASSERT_NE(nullptr, serializedClip);
        ASSERT_EQ(ClipMode::Rectangle, serializedClip->mode);
        auto clipRect = reinterpret_cast<const ClipRect*>(serializedClip);
        ASSERT_EQ(Rect(200, 200), clipRect->rect);
        EXPECT_EQ(Rect(200, 200), clipRect->rect);
        EXPECT_EQ(serializedClip, area.serializeClip(allocator))
                << "Requery of clip on unmodified ClipArea must return same pointer.";
    }
@@ -147,7 +147,10 @@ TEST(ClipArea, serializeClip) {
        ASSERT_NE(nullptr, serializedClip);
        ASSERT_EQ(ClipMode::RectangleList, serializedClip->mode);
        auto clipRectList = reinterpret_cast<const ClipRectList*>(serializedClip);
        ASSERT_EQ(2, clipRectList->rectList.getTransformedRectanglesCount());
        EXPECT_EQ(2, clipRectList->rectList.getTransformedRectanglesCount());
        EXPECT_FALSE(clipRectList->rect.isEmpty());
        EXPECT_FLOAT_EQ(199.87817f, clipRectList->rect.right)
            << "Right side should be clipped by rotated rect";
        EXPECT_EQ(serializedClip, area.serializeClip(allocator))
                << "Requery of clip on unmodified ClipArea must return same pointer.";
    }
@@ -161,8 +164,9 @@ TEST(ClipArea, serializeClip) {
        ASSERT_NE(nullptr, serializedClip);
        ASSERT_EQ(ClipMode::Region, serializedClip->mode);
        auto clipRegion = reinterpret_cast<const ClipRegion*>(serializedClip);
        ASSERT_EQ(SkIRect::MakeWH(200, 200), clipRegion->region.getBounds())
        EXPECT_EQ(SkIRect::MakeWH(200, 200), clipRegion->region.getBounds())
                << "Clip region should be 200x200";
        EXPECT_EQ(Rect(200, 200), clipRegion->rect);
        EXPECT_EQ(serializedClip, area.serializeClip(allocator))
                << "Requery of clip on unmodified ClipArea must return same pointer.";
    }