Merge "Unrounded round rects are just rects" into nyc-dev
This commit is contained in:
@@ -356,11 +356,15 @@ void RecordingCanvas::drawRegion(const SkRegion& region, const SkPaint& paint) {
|
||||
}
|
||||
void RecordingCanvas::drawRoundRect(float left, float top, float right, float bottom,
|
||||
float rx, float ry, const SkPaint& paint) {
|
||||
addOp(alloc().create_trivial<RoundRectOp>(
|
||||
Rect(left, top, right, bottom),
|
||||
*(mState.currentSnapshot()->transform),
|
||||
getRecordedClip(),
|
||||
refPaint(&paint), rx, ry));
|
||||
if (CC_LIKELY(MathUtils::isPositive(rx) || MathUtils::isPositive(ry))) {
|
||||
addOp(alloc().create_trivial<RoundRectOp>(
|
||||
Rect(left, top, right, bottom),
|
||||
*(mState.currentSnapshot()->transform),
|
||||
getRecordedClip(),
|
||||
refPaint(&paint), rx, ry));
|
||||
} else {
|
||||
drawRect(left, top, right, bottom, paint);
|
||||
}
|
||||
}
|
||||
|
||||
void RecordingCanvas::drawRoundRect(
|
||||
|
||||
@@ -114,6 +114,23 @@ TEST(RecordingCanvas, drawRect) {
|
||||
EXPECT_EQ(Rect(10, 20, 90, 180), op.unmappedBounds);
|
||||
}
|
||||
|
||||
TEST(RecordingCanvas, drawRoundRect) {
|
||||
// Round case - stays rounded
|
||||
auto dl = TestUtils::createDisplayList<RecordingCanvas>(100, 200, [](RecordingCanvas& canvas) {
|
||||
canvas.drawRoundRect(0, 0, 100, 100, 10, 10, SkPaint());
|
||||
});
|
||||
ASSERT_EQ(1u, dl->getOps().size()) << "Must be exactly one op";
|
||||
ASSERT_EQ(RecordedOpId::RoundRectOp, dl->getOps()[0]->opId);
|
||||
|
||||
// Non-rounded case - turned into drawRect
|
||||
dl = TestUtils::createDisplayList<RecordingCanvas>(100, 200, [](RecordingCanvas& canvas) {
|
||||
canvas.drawRoundRect(0, 0, 100, 100, 0, -1, SkPaint());
|
||||
});
|
||||
ASSERT_EQ(1u, dl->getOps().size()) << "Must be exactly one op";
|
||||
ASSERT_EQ(RecordedOpId::RectOp, dl->getOps()[0]->opId)
|
||||
<< "Non-rounded rects should be converted";
|
||||
}
|
||||
|
||||
TEST(RecordingCanvas, drawText) {
|
||||
auto dl = TestUtils::createDisplayList<RecordingCanvas>(200, 200, [](RecordingCanvas& canvas) {
|
||||
SkPaint paint;
|
||||
|
||||
Reference in New Issue
Block a user