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

This commit is contained in:
Chris Craik
2016-02-09 23:04:53 +00:00
committed by Android (Google) Code Review
2 changed files with 14 additions and 6 deletions

View File

@@ -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;
}

View File

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