Loading libs/hwui/RecordingCanvas.cpp +9 −5 Original line number Original line Diff line number Diff line Loading @@ -356,11 +356,15 @@ void RecordingCanvas::drawRegion(const SkRegion& region, const SkPaint& paint) { } } void RecordingCanvas::drawRoundRect(float left, float top, float right, float bottom, void RecordingCanvas::drawRoundRect(float left, float top, float right, float bottom, float rx, float ry, const SkPaint& paint) { float rx, float ry, const SkPaint& paint) { if (CC_LIKELY(MathUtils::isPositive(rx) || MathUtils::isPositive(ry))) { addOp(alloc().create_trivial<RoundRectOp>( addOp(alloc().create_trivial<RoundRectOp>( Rect(left, top, right, bottom), Rect(left, top, right, bottom), *(mState.currentSnapshot()->transform), *(mState.currentSnapshot()->transform), getRecordedClip(), getRecordedClip(), refPaint(&paint), rx, ry)); refPaint(&paint), rx, ry)); } else { drawRect(left, top, right, bottom, paint); } } } void RecordingCanvas::drawRoundRect( void RecordingCanvas::drawRoundRect( Loading libs/hwui/tests/unit/RecordingCanvasTests.cpp +17 −0 Original line number Original line Diff line number Diff line Loading @@ -114,6 +114,23 @@ TEST(RecordingCanvas, drawRect) { EXPECT_EQ(Rect(10, 20, 90, 180), op.unmappedBounds); 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) { TEST(RecordingCanvas, drawText) { auto dl = TestUtils::createDisplayList<RecordingCanvas>(200, 200, [](RecordingCanvas& canvas) { auto dl = TestUtils::createDisplayList<RecordingCanvas>(200, 200, [](RecordingCanvas& canvas) { SkPaint paint; SkPaint paint; Loading Loading
libs/hwui/RecordingCanvas.cpp +9 −5 Original line number Original line Diff line number Diff line Loading @@ -356,11 +356,15 @@ void RecordingCanvas::drawRegion(const SkRegion& region, const SkPaint& paint) { } } void RecordingCanvas::drawRoundRect(float left, float top, float right, float bottom, void RecordingCanvas::drawRoundRect(float left, float top, float right, float bottom, float rx, float ry, const SkPaint& paint) { float rx, float ry, const SkPaint& paint) { if (CC_LIKELY(MathUtils::isPositive(rx) || MathUtils::isPositive(ry))) { addOp(alloc().create_trivial<RoundRectOp>( addOp(alloc().create_trivial<RoundRectOp>( Rect(left, top, right, bottom), Rect(left, top, right, bottom), *(mState.currentSnapshot()->transform), *(mState.currentSnapshot()->transform), getRecordedClip(), getRecordedClip(), refPaint(&paint), rx, ry)); refPaint(&paint), rx, ry)); } else { drawRect(left, top, right, bottom, paint); } } } void RecordingCanvas::drawRoundRect( void RecordingCanvas::drawRoundRect( Loading
libs/hwui/tests/unit/RecordingCanvasTests.cpp +17 −0 Original line number Original line Diff line number Diff line Loading @@ -114,6 +114,23 @@ TEST(RecordingCanvas, drawRect) { EXPECT_EQ(Rect(10, 20, 90, 180), op.unmappedBounds); 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) { TEST(RecordingCanvas, drawText) { auto dl = TestUtils::createDisplayList<RecordingCanvas>(200, 200, [](RecordingCanvas& canvas) { auto dl = TestUtils::createDisplayList<RecordingCanvas>(200, 200, [](RecordingCanvas& canvas) { SkPaint paint; SkPaint paint; Loading