Merge "Avoid reentrance on ClipArea APIs" into nyc-dev

This commit is contained in:
Chris Craik
2016-04-14 17:12:17 +00:00
committed by Android (Google) Code Review
2 changed files with 18 additions and 1 deletions

View File

@@ -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();
}
/*

View File

@@ -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.";
@@ -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);
@@ -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";
@@ -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;