Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit caa24184 authored by Chris Craik's avatar Chris Craik
Browse files

Support drawing circles with drawArc in new pipeline

bug:26764636

Change-Id: I37d2384fa5e6c1074bb8de85821d58c15659b762
parent bc163f07
Loading
Loading
Loading
Loading
+10 −6
Original line number Diff line number Diff line
@@ -406,6 +406,9 @@ void RecordingCanvas::drawOval(float left, float top, float right, float bottom,

void RecordingCanvas::drawArc(float left, float top, float right, float bottom,
        float startAngle, float sweepAngle, bool useCenter, const SkPaint& paint) {
    if (fabs(sweepAngle) >= 360.0f) {
        drawOval(left, top, right, bottom, paint);
    } else {
        addOp(alloc().create_trivial<ArcOp>(
                Rect(left, top, right, bottom),
                *(mState.currentSnapshot()->transform),
@@ -413,6 +416,7 @@ void RecordingCanvas::drawArc(float left, float top, float right, float bottom,
                refPaint(&paint),
                startAngle, sweepAngle, useCenter));
    }
}

void RecordingCanvas::drawPath(const SkPath& path, const SkPaint& paint) {
    addOp(alloc().create_trivial<PathOp>(
+16 −0
Original line number Diff line number Diff line
@@ -57,6 +57,22 @@ TEST(RecordingCanvas, clipRect) {
            << "Clip should be serialized once";
}

TEST(RecordingCanvas, drawArc) {
    auto dl = TestUtils::createDisplayList<RecordingCanvas>(200, 200, [](RecordingCanvas& canvas) {
        canvas.drawArc(0, 0, 200, 200, 0, 180, true, SkPaint());
        canvas.drawArc(0, 0, 100, 100, 0, 360, true, SkPaint());
    });

    auto&& ops = dl->getOps();
    ASSERT_EQ(2u, ops.size()) << "Must be exactly two ops";
    EXPECT_EQ(RecordedOpId::ArcOp, ops[0]->opId);
    EXPECT_EQ(Rect(200, 200), ops[0]->unmappedBounds);

    EXPECT_EQ(RecordedOpId::OvalOp, ops[1]->opId)
            << "Circular arcs should be converted to ovals";
    EXPECT_EQ(Rect(100, 100), ops[1]->unmappedBounds);
}

TEST(RecordingCanvas, drawLines) {
    auto dl = TestUtils::createDisplayList<RecordingCanvas>(100, 200, [](RecordingCanvas& canvas) {
        SkPaint paint;