aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools
diff options
context:
space:
mode:
authorGravatar bsalomon <bsalomon@google.com>2016-08-19 11:25:19 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-08-19 11:25:20 -0700
commitac3aa245acc7b469aa2f0d0078e53401d78ac8b9 (patch)
tree4fcfa94f89d607591187ac1584bb00b14cc1ccac /tools
parentaf0f6efa3502f03b52747f0ede5399e075dbfe5d (diff)
Plumb drawArc to SkDevice.
Plumbs the drawArc canvas method down to SkDevice without converting to a path. Plumbs through the various recording canvas classes. BUG=skia:5227 GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2257023003 Review-Url: https://codereview.chromium.org/2257023003
Diffstat (limited to 'tools')
-rw-r--r--tools/android/SkAndroidSDKCanvas.cpp5
-rw-r--r--tools/android/SkAndroidSDKCanvas.h2
-rw-r--r--tools/debugger/SkDebugCanvas.cpp5
-rw-r--r--tools/debugger/SkDebugCanvas.h1
-rw-r--r--tools/debugger/SkDrawCommand.cpp62
-rw-r--r--tools/debugger/SkDrawCommand.h19
6 files changed, 93 insertions, 1 deletions
diff --git a/tools/android/SkAndroidSDKCanvas.cpp b/tools/android/SkAndroidSDKCanvas.cpp
index 8d95d8a1b0..44ceccb15c 100644
--- a/tools/android/SkAndroidSDKCanvas.cpp
+++ b/tools/android/SkAndroidSDKCanvas.cpp
@@ -124,6 +124,11 @@ void SkAndroidSDKCanvas::onDrawOval(const SkRect& r, const SkPaint& paint) {
FILTER(paint);
fProxyTarget->drawOval(r, filteredPaint);
}
+void SkAndroidSDKCanvas::onDrawArc(const SkRect& r, SkScalar startAngle, SkScalar sweepAngle,
+ bool useCenter, const SkPaint& paint) {
+ FILTER(paint);
+ fProxyTarget->drawArc(r, startAngle, sweepAngle, useCenter, filteredPaint);
+}
void SkAndroidSDKCanvas::onDrawRect(const SkRect& r, const SkPaint& paint) {
FILTER(paint);
fProxyTarget->drawRect(r, filteredPaint);
diff --git a/tools/android/SkAndroidSDKCanvas.h b/tools/android/SkAndroidSDKCanvas.h
index b7be797b84..766860be2d 100644
--- a/tools/android/SkAndroidSDKCanvas.h
+++ b/tools/android/SkAndroidSDKCanvas.h
@@ -37,6 +37,8 @@ protected:
void onDrawPoints(PointMode pMode, size_t count, const SkPoint pts[],
const SkPaint& paint) override;
void onDrawOval(const SkRect& r, const SkPaint& paint) override;
+ void onDrawArc(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle, bool useCenter,
+ const SkPaint& paint) override;
void onDrawRect(const SkRect& r, const SkPaint& paint) override;
void onDrawRRect(const SkRRect& r, const SkPaint& paint) override;
void onDrawPath(const SkPath& path, const SkPaint& paint) override;
diff --git a/tools/debugger/SkDebugCanvas.cpp b/tools/debugger/SkDebugCanvas.cpp
index d5297ed980..3816ca4978 100644
--- a/tools/debugger/SkDebugCanvas.cpp
+++ b/tools/debugger/SkDebugCanvas.cpp
@@ -596,6 +596,11 @@ void SkDebugCanvas::onDrawOval(const SkRect& oval, const SkPaint& paint) {
this->addDrawCommand(new SkDrawOvalCommand(oval, paint));
}
+void SkDebugCanvas::onDrawArc(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle,
+ bool useCenter, const SkPaint& paint) {
+ this->addDrawCommand(new SkDrawArcCommand(oval, startAngle, sweepAngle, useCenter, paint));
+}
+
void SkDebugCanvas::onDrawPaint(const SkPaint& paint) {
this->addDrawCommand(new SkDrawPaintCommand(paint));
}
diff --git a/tools/debugger/SkDebugCanvas.h b/tools/debugger/SkDebugCanvas.h
index 851dfe1bd4..fd71f6921c 100644
--- a/tools/debugger/SkDebugCanvas.h
+++ b/tools/debugger/SkDebugCanvas.h
@@ -231,6 +231,7 @@ protected:
void onDrawRect(const SkRect&, const SkPaint&) override;
void onDrawOval(const SkRect&, const SkPaint&) override;
+ void onDrawArc(const SkRect&, SkScalar, SkScalar, bool, const SkPaint&) override;
void onDrawRRect(const SkRRect&, const SkPaint&) override;
void onDrawPoints(PointMode, size_t count, const SkPoint pts[], const SkPaint&) override;
void onDrawVertices(VertexMode vmode, int vertexCount,
diff --git a/tools/debugger/SkDrawCommand.cpp b/tools/debugger/SkDrawCommand.cpp
index 362325085c..65de258ed2 100644
--- a/tools/debugger/SkDrawCommand.cpp
+++ b/tools/debugger/SkDrawCommand.cpp
@@ -92,7 +92,9 @@
#define SKDEBUGCANVAS_ATTRIBUTE_COLORS "colors"
#define SKDEBUGCANVAS_ATTRIBUTE_TEXTURECOORDS "textureCoords"
#define SKDEBUGCANVAS_ATTRIBUTE_FILTERQUALITY "filterQuality"
-
+#define SKDEBUGCANVAS_ATTRIBUTE_STARTANGLE "startAngle"
+#define SKDEBUGCANVAS_ATTRIBUTE_SWEEPANGLE "sweepAngle"
+#define SKDEBUGCANVAS_ATTRIBUTE_USECENTER "useCenter"
#define SKDEBUGCANVAS_ATTRIBUTE_SHORTDESC "shortDesc"
#define SKDEBUGCANVAS_VERB_MOVE "move"
@@ -2260,6 +2262,64 @@ SkDrawOvalCommand* SkDrawOvalCommand::fromJSON(Json::Value& command,
return new SkDrawOvalCommand(coords, paint);
}
+SkDrawArcCommand::SkDrawArcCommand(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle,
+ bool useCenter, const SkPaint& paint)
+ : INHERITED(kDrawOval_OpType) {
+ fOval = oval;
+ fStartAngle = startAngle;
+ fSweepAngle = sweepAngle;
+ fUseCenter = useCenter;
+ fPaint = paint;
+
+ fInfo.push(SkObjectParser::RectToString(oval));
+ fInfo.push(SkObjectParser::ScalarToString(startAngle, "StartAngle: "));
+ fInfo.push(SkObjectParser::ScalarToString(sweepAngle, "SweepAngle: "));
+ fInfo.push(SkObjectParser::BoolToString(useCenter));
+ fInfo.push(SkObjectParser::PaintToString(paint));
+}
+
+void SkDrawArcCommand::execute(SkCanvas* canvas) const {
+ canvas->drawArc(fOval, fStartAngle, fSweepAngle, fUseCenter, fPaint);
+}
+
+bool SkDrawArcCommand::render(SkCanvas* canvas) const {
+ canvas->clear(0xFFFFFFFF);
+ canvas->save();
+
+ xlate_and_scale_to_bounds(canvas, fOval);
+
+ SkPaint p;
+ p.setColor(SK_ColorBLACK);
+ p.setStyle(SkPaint::kStroke_Style);
+
+ canvas->drawArc(fOval, fStartAngle, fSweepAngle, fUseCenter, p);
+ canvas->restore();
+
+ return true;
+}
+
+Json::Value SkDrawArcCommand::toJSON(UrlDataManager& urlDataManager) const {
+ Json::Value result = INHERITED::toJSON(urlDataManager);
+ result[SKDEBUGCANVAS_ATTRIBUTE_COORDS] = MakeJsonRect(fOval);
+ result[SKDEBUGCANVAS_ATTRIBUTE_STARTANGLE] = MakeJsonScalar(fStartAngle);
+ result[SKDEBUGCANVAS_ATTRIBUTE_SWEEPANGLE] = MakeJsonScalar(fSweepAngle);
+ result[SKDEBUGCANVAS_ATTRIBUTE_USECENTER] = fUseCenter;
+ result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = MakeJsonPaint(fPaint, urlDataManager);
+ return result;
+}
+
+SkDrawArcCommand* SkDrawArcCommand::fromJSON(Json::Value& command,
+ UrlDataManager& urlDataManager) {
+ SkRect coords;
+ extract_json_rect(command[SKDEBUGCANVAS_ATTRIBUTE_COORDS], &coords);
+ SkScalar startAngle = command[SKDEBUGCANVAS_ATTRIBUTE_STARTANGLE].asFloat();
+ SkScalar sweepAngle = command[SKDEBUGCANVAS_ATTRIBUTE_SWEEPANGLE].asFloat();
+ bool useCenter = command[SKDEBUGCANVAS_ATTRIBUTE_USECENTER].asBool();
+ SkPaint paint;
+ extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], urlDataManager, &paint);
+ return new SkDrawArcCommand(coords, startAngle, sweepAngle, useCenter, paint);
+}
+
SkDrawPaintCommand::SkDrawPaintCommand(const SkPaint& paint)
: INHERITED(kDrawPaint_OpType) {
fPaint = paint;
diff --git a/tools/debugger/SkDrawCommand.h b/tools/debugger/SkDrawCommand.h
index 14a7af5882..d3f2908ee6 100644
--- a/tools/debugger/SkDrawCommand.h
+++ b/tools/debugger/SkDrawCommand.h
@@ -399,6 +399,25 @@ private:
typedef SkDrawCommand INHERITED;
};
+class SkDrawArcCommand : public SkDrawCommand {
+public:
+ SkDrawArcCommand(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle, bool useCenter,
+ const SkPaint& paint);
+ void execute(SkCanvas* canvas) const override;
+ bool render(SkCanvas* canvas) const override;
+ Json::Value toJSON(UrlDataManager& urlDataManager) const override;
+ static SkDrawArcCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager);
+
+private:
+ SkRect fOval;
+ SkScalar fStartAngle;
+ SkScalar fSweepAngle;
+ bool fUseCenter;
+ SkPaint fPaint;
+
+ typedef SkDrawCommand INHERITED;
+};
+
class SkDrawPaintCommand : public SkDrawCommand {
public:
SkDrawPaintCommand(const SkPaint& paint);