Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(162)

Unified Diff: samplecode/SampleArc.cpp

Issue 732653004: option to return drawable from recording (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « include/core/SkPictureRecorder.h ('k') | src/core/SkCanvasDrawable.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: samplecode/SampleArc.cpp
diff --git a/samplecode/SampleArc.cpp b/samplecode/SampleArc.cpp
index a44eeb59ba1545cd30d5a2183355c48e71166e98..6943eb7a6c105f3552c88d2b74d7d1fe28ff3843 100644
--- a/samplecode/SampleArc.cpp
+++ b/samplecode/SampleArc.cpp
@@ -17,6 +17,7 @@
#include "Sk1DPathEffect.h"
#include "SkCornerPathEffect.h"
#include "SkPathMeasure.h"
+#include "SkPictureRecorder.h"
#include "SkRandom.h"
#include "SkColorPriv.h"
#include "SkColorFilter.h"
@@ -42,8 +43,7 @@ class ArcsView : public SampleView {
SkRect fR;
SkScalar fSweep;
public:
- MyDrawable(const SkRect& r) : fR(r), fSweep(0) {
- }
+ MyDrawable(const SkRect& r) : fR(r), fSweep(0) {}
void setSweep(SkScalar sweep) {
if (fSweep != sweep) {
@@ -82,7 +82,8 @@ class ArcsView : public SampleView {
public:
SkRect fRect;
- MyDrawable* fDrawable;
+ MyDrawable* fAnimatingDrawable;
+ SkCanvasDrawable* fRootDrawable;
ArcsView() {
testparse();
@@ -91,16 +92,21 @@ public:
fRect.set(0, 0, SkIntToScalar(200), SkIntToScalar(200));
fRect.offset(SkIntToScalar(20), SkIntToScalar(20));
- fDrawable = SkNEW_ARGS(MyDrawable, (fRect));
+ fAnimatingDrawable = SkNEW_ARGS(MyDrawable, (fRect));
+
+ SkPictureRecorder recorder;
+ this->drawRoot(recorder.beginRecording(SkRect::MakeWH(800, 500)));
+ fRootDrawable = recorder.EXPERIMENTAL_endRecordingAsDrawable();
}
virtual ~ArcsView() SK_OVERRIDE {
- fDrawable->unref();
+ fAnimatingDrawable->unref();
+ fRootDrawable->unref();
}
protected:
// overrides from SkEventSink
- virtual bool onQuery(SkEvent* evt) {
+ bool onQuery(SkEvent* evt) SK_OVERRIDE {
if (SampleCode::TitleQ(*evt)) {
SampleCode::TitleR(evt, "Arcs");
return true;
@@ -108,7 +114,7 @@ protected:
return this->INHERITED::onQuery(evt);
}
- static void drawRectWithLines(SkCanvas* canvas, const SkRect& r, const SkPaint& p) {
+ static void DrawRectWithLines(SkCanvas* canvas, const SkRect& r, const SkPaint& p) {
canvas->drawRect(r, p);
canvas->drawLine(r.fLeft, r.fTop, r.fRight, r.fBottom, p);
canvas->drawLine(r.fLeft, r.fBottom, r.fRight, r.fTop, p);
@@ -116,7 +122,7 @@ protected:
canvas->drawLine(r.centerX(), r.fTop, r.centerX(), r.fBottom, p);
}
- static void draw_label(SkCanvas* canvas, const SkRect& rect,
+ static void DrawLabel(SkCanvas* canvas, const SkRect& rect,
int start, int sweep) {
SkPaint paint;
@@ -132,7 +138,7 @@ protected:
rect.fBottom + paint.getTextSize() * 5/4, paint);
}
- static void drawArcs(SkCanvas* canvas) {
+ static void DrawArcs(SkCanvas* canvas) {
SkPaint paint;
SkRect r;
SkScalar w = SkIntToScalar(75);
@@ -161,13 +167,13 @@ protected:
for (size_t i = 0; i < SK_ARRAY_COUNT(gAngles); i += 2) {
paint.setColor(SK_ColorBLACK);
- drawRectWithLines(canvas, r, paint);
+ DrawRectWithLines(canvas, r, paint);
paint.setColor(SK_ColorRED);
canvas->drawArc(r, SkIntToScalar(gAngles[i]),
SkIntToScalar(gAngles[i+1]), false, paint);
- draw_label(canvas, r, gAngles[i], gAngles[i+1]);
+ DrawLabel(canvas, r, gAngles[i], gAngles[i+1]);
canvas->translate(w * 8 / 7, 0);
}
@@ -175,34 +181,31 @@ protected:
canvas->restore();
}
- virtual void onDrawContent(SkCanvas* canvas) {
- fDrawable->setSweep(SampleCode::GetAnimScalar(SkIntToScalar(360)/24,
- SkIntToScalar(360)));
-
+ void drawRoot(SkCanvas* canvas) {
SkPaint paint;
paint.setAntiAlias(true);
paint.setStrokeWidth(SkIntToScalar(2));
paint.setStyle(SkPaint::kStroke_Style);
- drawRectWithLines(canvas, fRect, paint);
+ DrawRectWithLines(canvas, fRect, paint);
- canvas->EXPERIMENTAL_drawDrawable(fDrawable);
+ canvas->EXPERIMENTAL_drawDrawable(fAnimatingDrawable);
- drawArcs(canvas);
+ DrawArcs(canvas);
+ }
+
+ void onDrawContent(SkCanvas* canvas) SK_OVERRIDE {
+ fAnimatingDrawable->setSweep(SampleCode::GetAnimScalar(360/24, 360));
+ canvas->EXPERIMENTAL_drawDrawable(fRootDrawable);
this->inval(NULL);
}
- virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y,
- unsigned modi) {
+ SkView::Click* onFindClickHandler(SkScalar x, SkScalar y, unsigned modi) SK_OVERRIDE {
// fSweep += SK_Scalar1;
this->inval(NULL);
return this->INHERITED::onFindClickHandler(x, y, modi);
}
- virtual bool onClick(Click* click) {
- return this->INHERITED::onClick(click);
- }
-
private:
SkScalar fSweep;
« no previous file with comments | « include/core/SkPictureRecorder.h ('k') | src/core/SkCanvasDrawable.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698