Chromium Code Reviews| Index: samplecode/SampleArc.cpp |
| diff --git a/samplecode/SampleArc.cpp b/samplecode/SampleArc.cpp |
| index 8209c3b76489b2352726fe86381c15300e85eca6..c9310d6dd64b1fae55b1349bba10f102cd7489d4 100644 |
| --- a/samplecode/SampleArc.cpp |
| +++ b/samplecode/SampleArc.cpp |
| @@ -22,6 +22,8 @@ |
| #include "SkColorFilter.h" |
| #include "SkLayerRasterizer.h" |
| +#include "SkCanvasDrawable.h" |
| + |
| #include "SkParsePath.h" |
| static void testparse() { |
| SkRect r; |
| @@ -36,11 +38,58 @@ static void testparse() { |
| } |
| class ArcsView : public SampleView { |
| + class MyDrawable : public SkCanvasDrawable { |
| + SkRect fR; |
| + SkScalar fSweep; |
| + public: |
| + MyDrawable(const SkRect& r) : fR(r), fSweep(0) { |
| + } |
| + |
| + void setSweep(SkScalar sweep) { |
| + if (fSweep != sweep) { |
| + fSweep = sweep; |
| + this->notifyDrawingChanged(); |
| + } |
| + } |
| + |
| + void onDraw(SkCanvas* canvas) SK_OVERRIDE { |
| + SkPaint paint; |
| + paint.setAntiAlias(true); |
| + paint.setStrokeWidth(SkIntToScalar(2)); |
| + |
| + paint.setStyle(SkPaint::kFill_Style); |
| + paint.setColor(0x800000FF); |
| + canvas->drawArc(fR, 0, fSweep, true, paint); |
| + |
| + paint.setColor(0x800FF000); |
| + canvas->drawArc(fR, 0, fSweep, false, paint); |
| + |
| + paint.setStyle(SkPaint::kStroke_Style); |
| + paint.setColor(SK_ColorRED); |
| + canvas->drawArc(fR, 0, fSweep, true, paint); |
| + |
| + paint.setStrokeWidth(0); |
| + paint.setColor(SK_ColorBLUE); |
| + canvas->drawArc(fR, 0, fSweep, false, paint); |
| + } |
| + }; |
| + |
| public: |
| + SkRect fRect; |
| + MyDrawable* fDrawable; |
|
mtklein
2014/11/12 03:34:42
AutoTUnref?
|
| + |
| ArcsView() { |
| testparse(); |
| fSweep = SkIntToScalar(100); |
| this->setBGColor(0xFFDDDDDD); |
| + |
| + fRect.set(0, 0, SkIntToScalar(200), SkIntToScalar(200)); |
| + fRect.offset(SkIntToScalar(20), SkIntToScalar(20)); |
| + fDrawable = SkNEW_ARGS(MyDrawable, (fRect)); |
| + } |
| + |
| + virtual ~ArcsView() SK_OVERRIDE { |
| + fDrawable->unref(); |
| } |
| protected: |
| @@ -121,48 +170,17 @@ protected: |
| } |
| virtual void onDrawContent(SkCanvas* canvas) { |
| - fSweep = SampleCode::GetAnimScalar(SkIntToScalar(360)/24, |
| - SkIntToScalar(360)); |
| -// fSweep = 359.99f; |
| + fDrawable->setSweep(SampleCode::GetAnimScalar(SkIntToScalar(360)/24, |
| + SkIntToScalar(360))); |
| - SkRect r; |
| SkPaint paint; |
| - |
| paint.setAntiAlias(true); |
| paint.setStrokeWidth(SkIntToScalar(2)); |
| paint.setStyle(SkPaint::kStroke_Style); |
| - r.set(0, 0, SkIntToScalar(200), SkIntToScalar(200)); |
| - r.offset(SkIntToScalar(20), SkIntToScalar(20)); |
| - |
| - if (false) { |
| - const SkScalar d = SkIntToScalar(3); |
| - const SkScalar rad[] = { d, d, d, d, d, d, d, d }; |
| - SkPath path; |
| - path.addRoundRect(r, rad); |
| - canvas->drawPath(path, paint); |
| - return; |
| - } |
| - |
| - drawRectWithLines(canvas, r, paint); |
| - |
| - // printf("----- sweep %g %X\n", SkScalarToFloat(fSweep), SkDegreesToRadians(fSweep)); |
| - |
| - |
| - paint.setStyle(SkPaint::kFill_Style); |
| - paint.setColor(0x800000FF); |
| - canvas->drawArc(r, 0, fSweep, true, paint); |
| - |
| - paint.setColor(0x800FF000); |
| - canvas->drawArc(r, 0, fSweep, false, paint); |
| - |
| - paint.setStyle(SkPaint::kStroke_Style); |
| - paint.setColor(SK_ColorRED); |
| - canvas->drawArc(r, 0, fSweep, true, paint); |
| + drawRectWithLines(canvas, fRect, paint); |
| - paint.setStrokeWidth(0); |
| - paint.setColor(SK_ColorBLUE); |
| - canvas->drawArc(r, 0, fSweep, false, paint); |
| + canvas->EXPERIMENTAL_drawDrawable(fDrawable); |
| drawArcs(canvas); |
| this->inval(NULL); |