Merge "Added more CanvasOps for various drawing commands"
This commit is contained in:
@@ -37,6 +37,12 @@ enum class CanvasOpType : int8_t {
|
||||
// Drawing ops
|
||||
DrawColor,
|
||||
DrawRect,
|
||||
DrawRoundRect,
|
||||
DrawCircle,
|
||||
DrawOval,
|
||||
DrawArc,
|
||||
DrawPaint,
|
||||
|
||||
|
||||
// TODO: Rest
|
||||
|
||||
|
||||
@@ -111,6 +111,13 @@ struct CanvasOp<CanvasOpType::DrawColor> {
|
||||
ASSERT_DRAWABLE()
|
||||
};
|
||||
|
||||
template <>
|
||||
struct CanvasOp<CanvasOpType::DrawPaint> {
|
||||
SkPaint paint;
|
||||
void draw(SkCanvas* canvas) const { canvas->drawPaint(paint); }
|
||||
ASSERT_DRAWABLE()
|
||||
};
|
||||
|
||||
template <>
|
||||
struct CanvasOp<CanvasOpType::DrawRect> {
|
||||
SkRect rect;
|
||||
@@ -119,6 +126,53 @@ struct CanvasOp<CanvasOpType::DrawRect> {
|
||||
ASSERT_DRAWABLE()
|
||||
};
|
||||
|
||||
template<>
|
||||
struct CanvasOp<CanvasOpType::DrawRoundRect> {
|
||||
SkRect rect;
|
||||
SkScalar rx;
|
||||
SkScalar ry;
|
||||
SkPaint paint;
|
||||
void draw(SkCanvas* canvas) const {
|
||||
canvas->drawRoundRect(rect, rx, ry, paint);
|
||||
}
|
||||
ASSERT_DRAWABLE()
|
||||
};
|
||||
|
||||
template<>
|
||||
struct CanvasOp<CanvasOpType::DrawCircle> {
|
||||
SkScalar cx;
|
||||
SkScalar cy;
|
||||
SkScalar radius;
|
||||
SkPaint paint;
|
||||
void draw(SkCanvas* canvas) const {
|
||||
canvas->drawCircle(cx, cy, radius, paint);
|
||||
}
|
||||
ASSERT_DRAWABLE()
|
||||
};
|
||||
|
||||
template<>
|
||||
struct CanvasOp<CanvasOpType::DrawOval> {
|
||||
SkRect oval;
|
||||
SkPaint paint;
|
||||
void draw(SkCanvas* canvas) const {
|
||||
canvas->drawOval(oval, paint);
|
||||
}
|
||||
ASSERT_DRAWABLE()
|
||||
};
|
||||
|
||||
template<>
|
||||
struct CanvasOp<CanvasOpType::DrawArc> {
|
||||
SkRect oval;
|
||||
SkScalar startAngle;
|
||||
SkScalar sweepAngle;
|
||||
bool useCenter;
|
||||
SkPaint paint;
|
||||
|
||||
void draw(SkCanvas* canvas) const {
|
||||
canvas->drawArc(oval, startAngle, sweepAngle, useCenter, paint);
|
||||
}
|
||||
ASSERT_DRAWABLE()
|
||||
};
|
||||
|
||||
// cleanup our macros
|
||||
#undef ASSERT_DRAWABLE
|
||||
|
||||
@@ -193,6 +193,73 @@ TEST(CanvasOp, simpleDrawRect) {
|
||||
EXPECT_EQ(1, canvas.sumTotalDrawCalls());
|
||||
}
|
||||
|
||||
TEST(CanvasOp, simpleDrawRoundRect) {
|
||||
CanvasOpBuffer buffer;
|
||||
EXPECT_EQ(buffer.size(), 0);
|
||||
buffer.push(CanvasOp<Op::DrawRoundRect> {
|
||||
.paint = SkPaint{},
|
||||
.rect = SkRect::MakeEmpty(),
|
||||
.rx = 10,
|
||||
.ry = 10
|
||||
});
|
||||
|
||||
CallCountingCanvas canvas;
|
||||
EXPECT_EQ(0, canvas.sumTotalDrawCalls());
|
||||
rasterizeCanvasBuffer(buffer, &canvas);
|
||||
EXPECT_EQ(1, canvas.drawRRectCount);
|
||||
EXPECT_EQ(1, canvas.sumTotalDrawCalls());
|
||||
}
|
||||
|
||||
TEST(CanvasOp, simpleDrawCircle) {
|
||||
CanvasOpBuffer buffer;
|
||||
EXPECT_EQ(buffer.size(), 0);
|
||||
buffer.push(CanvasOp<Op::DrawCircle> {
|
||||
.cx = 5,
|
||||
.cy = 7,
|
||||
.radius = 10,
|
||||
.paint = SkPaint{}
|
||||
});
|
||||
|
||||
CallCountingCanvas canvas;
|
||||
EXPECT_EQ(0, canvas.sumTotalDrawCalls());
|
||||
rasterizeCanvasBuffer(buffer, &canvas);
|
||||
EXPECT_EQ(1, canvas.drawOvalCount);
|
||||
EXPECT_EQ(1, canvas.sumTotalDrawCalls());
|
||||
}
|
||||
|
||||
TEST(CanvasOp, simpleDrawOval) {
|
||||
CanvasOpBuffer buffer;
|
||||
EXPECT_EQ(buffer.size(), 0);
|
||||
buffer.push(CanvasOp<Op::DrawOval> {
|
||||
.oval = SkRect::MakeEmpty(),
|
||||
.paint = SkPaint{}
|
||||
});
|
||||
|
||||
CallCountingCanvas canvas;
|
||||
EXPECT_EQ(0, canvas.sumTotalDrawCalls());
|
||||
rasterizeCanvasBuffer(buffer, &canvas);
|
||||
EXPECT_EQ(1, canvas.drawOvalCount);
|
||||
EXPECT_EQ(1, canvas.sumTotalDrawCalls());
|
||||
}
|
||||
|
||||
TEST(CanvasOp, simpleDrawArc) {
|
||||
CanvasOpBuffer buffer;
|
||||
EXPECT_EQ(buffer.size(), 0);
|
||||
buffer.push(CanvasOp<Op::DrawArc> {
|
||||
.oval = SkRect::MakeWH(100, 100),
|
||||
.startAngle = 120,
|
||||
.sweepAngle = 70,
|
||||
.useCenter = true,
|
||||
.paint = SkPaint{}
|
||||
});
|
||||
|
||||
CallCountingCanvas canvas;
|
||||
EXPECT_EQ(0, canvas.sumTotalDrawCalls());
|
||||
rasterizeCanvasBuffer(buffer, &canvas);
|
||||
EXPECT_EQ(1, canvas.drawArcCount);
|
||||
EXPECT_EQ(1, canvas.sumTotalDrawCalls());
|
||||
}
|
||||
|
||||
TEST(CanvasOp, immediateRendering) {
|
||||
auto canvas = std::make_shared<CallCountingCanvas>();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user