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

Commit 319f8fb2 authored by Chris Craik's avatar Chris Craik Committed by android-build-merger
Browse files

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

am: 5f082218

* commit '5f082218':
  Calculate clip bounds correctly when serializing
parents 8003c3d0 5f082218
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.";
    }