diff options
author | 2016-08-19 11:25:19 -0700 | |
---|---|---|
committer | 2016-08-19 11:25:20 -0700 | |
commit | ac3aa245acc7b469aa2f0d0078e53401d78ac8b9 (patch) | |
tree | 4fcfa94f89d607591187ac1584bb00b14cc1ccac /tools | |
parent | af0f6efa3502f03b52747f0ede5399e075dbfe5d (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.cpp | 5 | ||||
-rw-r--r-- | tools/android/SkAndroidSDKCanvas.h | 2 | ||||
-rw-r--r-- | tools/debugger/SkDebugCanvas.cpp | 5 | ||||
-rw-r--r-- | tools/debugger/SkDebugCanvas.h | 1 | ||||
-rw-r--r-- | tools/debugger/SkDrawCommand.cpp | 62 | ||||
-rw-r--r-- | tools/debugger/SkDrawCommand.h | 19 |
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); |