Merge "Fix savelayer rounding" into nyc-mr1-dev
This commit is contained in:
@@ -127,7 +127,8 @@ int RecordingCanvas::saveLayer(float left, float top, float right, float bottom,
|
|||||||
// operations will be able to store and restore the current clip and transform info, and
|
// operations will be able to store and restore the current clip and transform info, and
|
||||||
// quick rejection will be correct (for display lists)
|
// quick rejection will be correct (for display lists)
|
||||||
|
|
||||||
const Rect unmappedBounds(left, top, right, bottom);
|
Rect unmappedBounds(left, top, right, bottom);
|
||||||
|
unmappedBounds.roundOut();
|
||||||
|
|
||||||
// determine clipped bounds relative to previous viewport.
|
// determine clipped bounds relative to previous viewport.
|
||||||
Rect visibleBounds = unmappedBounds;
|
Rect visibleBounds = unmappedBounds;
|
||||||
|
|||||||
@@ -340,6 +340,36 @@ TEST(RecordingCanvas, saveLayer_simple) {
|
|||||||
EXPECT_EQ(3, count);
|
EXPECT_EQ(3, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(RecordingCanvas, saveLayer_rounding) {
|
||||||
|
auto dl = TestUtils::createDisplayList<RecordingCanvas>(100, 100, [](RecordingCanvas& canvas) {
|
||||||
|
canvas.saveLayerAlpha(10.25f, 10.75f, 89.25f, 89.75f, 128, SaveFlags::ClipToLayer);
|
||||||
|
canvas.drawRect(20, 20, 80, 80, SkPaint());
|
||||||
|
canvas.restore();
|
||||||
|
});
|
||||||
|
int count = 0;
|
||||||
|
playbackOps(*dl, [&count](const RecordedOp& op) {
|
||||||
|
Matrix4 expectedMatrix;
|
||||||
|
switch(count++) {
|
||||||
|
case 0:
|
||||||
|
EXPECT_EQ(RecordedOpId::BeginLayerOp, op.opId);
|
||||||
|
EXPECT_EQ(Rect(10, 10, 90, 90), op.unmappedBounds) << "Expect bounds rounded out";
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
EXPECT_EQ(RecordedOpId::RectOp, op.opId);
|
||||||
|
expectedMatrix.loadTranslate(-10, -10, 0);
|
||||||
|
EXPECT_MATRIX_APPROX_EQ(expectedMatrix, op.localMatrix) << "Expect rounded offset";
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
EXPECT_EQ(RecordedOpId::EndLayerOp, op.opId);
|
||||||
|
// Don't bother asserting recording state data - it's not used
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ADD_FAILURE();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
EXPECT_EQ(3, count);
|
||||||
|
}
|
||||||
|
|
||||||
TEST(RecordingCanvas, saveLayer_missingRestore) {
|
TEST(RecordingCanvas, saveLayer_missingRestore) {
|
||||||
auto dl = TestUtils::createDisplayList<RecordingCanvas>(200, 200, [](RecordingCanvas& canvas) {
|
auto dl = TestUtils::createDisplayList<RecordingCanvas>(200, 200, [](RecordingCanvas& canvas) {
|
||||||
canvas.saveLayerAlpha(0, 0, 200, 200, 128, SaveFlags::ClipToLayer);
|
canvas.saveLayerAlpha(0, 0, 200, 200, 128, SaveFlags::ClipToLayer);
|
||||||
|
|||||||
Reference in New Issue
Block a user