Loading libs/hwui/ClipArea.cpp +3 −1 Original line number Diff line number Diff line Loading @@ -253,7 +253,9 @@ void ClipArea::clipPathWithTransform(const SkPath& path, const mat4* transform, path.transform(skTransform, &transformed); SkRegion region; regionFromPath(transformed, region); clipRegion(region, op); enterRegionMode(); mClipRegion.op(region, op); onClipRegionUpdated(); } /* Loading libs/hwui/tests/unit/ClipAreaTests.cpp +15 −0 Original line number Diff line number Diff line Loading @@ -132,6 +132,7 @@ TEST(ClipArea, serializeClip) { auto serializedClip = area.serializeClip(allocator); ASSERT_NE(nullptr, serializedClip); ASSERT_EQ(ClipMode::Rectangle, serializedClip->mode); ASSERT_FALSE(serializedClip->intersectWithRoot) << "No replace, so no intersectWithRoot"; EXPECT_EQ(Rect(200, 200), serializedClip->rect); EXPECT_EQ(serializedClip, area.serializeClip(allocator)) << "Requery of clip on unmodified ClipArea must return same pointer."; Loading @@ -145,6 +146,7 @@ TEST(ClipArea, serializeClip) { auto serializedClip = area.serializeClip(allocator); ASSERT_NE(nullptr, serializedClip); ASSERT_EQ(ClipMode::RectangleList, serializedClip->mode); ASSERT_FALSE(serializedClip->intersectWithRoot) << "No replace, so no intersectWithRoot"; auto clipRectList = reinterpret_cast<const ClipRectList*>(serializedClip); EXPECT_EQ(2, clipRectList->rectList.getTransformedRectanglesCount()); EXPECT_EQ(Rect(37, 54, 145, 163), clipRectList->rect); Loading @@ -160,6 +162,7 @@ TEST(ClipArea, serializeClip) { auto serializedClip = area.serializeClip(allocator); ASSERT_NE(nullptr, serializedClip); ASSERT_EQ(ClipMode::Region, serializedClip->mode); ASSERT_TRUE(serializedClip->intersectWithRoot) << "Replace op, so expect intersectWithRoot"; auto clipRegion = reinterpret_cast<const ClipRegion*>(serializedClip); EXPECT_EQ(SkIRect::MakeWH(200, 200), clipRegion->region.getBounds()) << "Clip region should be 200x200"; Loading @@ -169,6 +172,18 @@ TEST(ClipArea, serializeClip) { } } TEST(ClipArea, serializeClip_pathIntersectWithRoot) { ClipArea area(createClipArea()); LinearAllocator allocator; SkPath circlePath; circlePath.addCircle(100, 100, 100); area.clipPathWithTransform(circlePath, &Matrix4::identity(), SkRegion::kIntersect_Op); auto serializedClip = area.serializeClip(allocator); ASSERT_NE(nullptr, serializedClip); EXPECT_FALSE(serializedClip->intersectWithRoot) << "No replace, so no intersectWithRoot"; } TEST(ClipArea, serializeIntersectedClip) { ClipArea area(createClipArea()); LinearAllocator allocator; Loading Loading
libs/hwui/ClipArea.cpp +3 −1 Original line number Diff line number Diff line Loading @@ -253,7 +253,9 @@ void ClipArea::clipPathWithTransform(const SkPath& path, const mat4* transform, path.transform(skTransform, &transformed); SkRegion region; regionFromPath(transformed, region); clipRegion(region, op); enterRegionMode(); mClipRegion.op(region, op); onClipRegionUpdated(); } /* Loading
libs/hwui/tests/unit/ClipAreaTests.cpp +15 −0 Original line number Diff line number Diff line Loading @@ -132,6 +132,7 @@ TEST(ClipArea, serializeClip) { auto serializedClip = area.serializeClip(allocator); ASSERT_NE(nullptr, serializedClip); ASSERT_EQ(ClipMode::Rectangle, serializedClip->mode); ASSERT_FALSE(serializedClip->intersectWithRoot) << "No replace, so no intersectWithRoot"; EXPECT_EQ(Rect(200, 200), serializedClip->rect); EXPECT_EQ(serializedClip, area.serializeClip(allocator)) << "Requery of clip on unmodified ClipArea must return same pointer."; Loading @@ -145,6 +146,7 @@ TEST(ClipArea, serializeClip) { auto serializedClip = area.serializeClip(allocator); ASSERT_NE(nullptr, serializedClip); ASSERT_EQ(ClipMode::RectangleList, serializedClip->mode); ASSERT_FALSE(serializedClip->intersectWithRoot) << "No replace, so no intersectWithRoot"; auto clipRectList = reinterpret_cast<const ClipRectList*>(serializedClip); EXPECT_EQ(2, clipRectList->rectList.getTransformedRectanglesCount()); EXPECT_EQ(Rect(37, 54, 145, 163), clipRectList->rect); Loading @@ -160,6 +162,7 @@ TEST(ClipArea, serializeClip) { auto serializedClip = area.serializeClip(allocator); ASSERT_NE(nullptr, serializedClip); ASSERT_EQ(ClipMode::Region, serializedClip->mode); ASSERT_TRUE(serializedClip->intersectWithRoot) << "Replace op, so expect intersectWithRoot"; auto clipRegion = reinterpret_cast<const ClipRegion*>(serializedClip); EXPECT_EQ(SkIRect::MakeWH(200, 200), clipRegion->region.getBounds()) << "Clip region should be 200x200"; Loading @@ -169,6 +172,18 @@ TEST(ClipArea, serializeClip) { } } TEST(ClipArea, serializeClip_pathIntersectWithRoot) { ClipArea area(createClipArea()); LinearAllocator allocator; SkPath circlePath; circlePath.addCircle(100, 100, 100); area.clipPathWithTransform(circlePath, &Matrix4::identity(), SkRegion::kIntersect_Op); auto serializedClip = area.serializeClip(allocator); ASSERT_NE(nullptr, serializedClip); EXPECT_FALSE(serializedClip->intersectWithRoot) << "No replace, so no intersectWithRoot"; } TEST(ClipArea, serializeIntersectedClip) { ClipArea area(createClipArea()); LinearAllocator allocator; Loading