Add support for CanvasOps to draw multiple lines or
points in a single call
--DrawPoints
--DrawLines
Introduced wrapper Points class to
handle containing collections of SkPoints
that is compatible with ref counted pointer
implementations
Bug: 174854640
Test: Added tests to CanvasOpTests
Change-Id: Id4a47a470815d2970c54dac25e59af8512193348
diff --git a/libs/hwui/canvas/CanvasOps.h b/libs/hwui/canvas/CanvasOps.h
index b499733..242dbdb 100644
--- a/libs/hwui/canvas/CanvasOps.h
+++ b/libs/hwui/canvas/CanvasOps.h
@@ -26,6 +26,7 @@
#include <hwui/Bitmap.h>
#include <log/log.h>
#include "CanvasProperty.h"
+#include "Points.h"
#include "CanvasOpTypes.h"
#include "Layer.h"
@@ -166,6 +167,22 @@
};
template <>
+struct CanvasOp<CanvasOpType::DrawPoints> {
+ size_t count;
+ SkPaint paint;
+ sk_sp<Points> points;
+ void draw(SkCanvas* canvas) const {
+ canvas->drawPoints(
+ SkCanvas::kPoints_PointMode,
+ count,
+ points->data(),
+ paint
+ );
+ }
+ ASSERT_DRAWABLE()
+};
+
+template <>
struct CanvasOp<CanvasOpType::DrawRect> {
SkRect rect;
SkPaint paint;
@@ -264,6 +281,22 @@
};
template<>
+struct CanvasOp<CanvasOpType::DrawLines> {
+ size_t count;
+ SkPaint paint;
+ sk_sp<Points> points;
+ void draw(SkCanvas* canvas) const {
+ canvas->drawPoints(
+ SkCanvas::kLines_PointMode,
+ count,
+ points->data(),
+ paint
+ );
+ }
+ ASSERT_DRAWABLE()
+};
+
+template<>
struct CanvasOp<CanvasOpType::DrawVertices> {
sk_sp<SkVertices> vertices;
SkBlendMode mode;