| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 #include "SampleCode.h" | 8 #include "SampleCode.h" |
| 9 #include "SkView.h" | 9 #include "SkView.h" |
| 10 #include "SkCanvas.h" | 10 #include "SkCanvas.h" |
| 11 #include "SkGradientShader.h" | 11 #include "SkGradientShader.h" |
| 12 #include "SkPath.h" | 12 #include "SkPath.h" |
| 13 #include "SkRegion.h" | 13 #include "SkRegion.h" |
| 14 #include "SkShader.h" | 14 #include "SkShader.h" |
| 15 #include "SkUtils.h" | 15 #include "SkUtils.h" |
| 16 #include "SkComposeShader.h" | 16 #include "SkComposeShader.h" |
| 17 #include "Sk1DPathEffect.h" | 17 #include "Sk1DPathEffect.h" |
| 18 #include "SkCornerPathEffect.h" | 18 #include "SkCornerPathEffect.h" |
| 19 #include "SkPathMeasure.h" | 19 #include "SkPathMeasure.h" |
| 20 #include "SkPictureRecorder.h" |
| 20 #include "SkRandom.h" | 21 #include "SkRandom.h" |
| 21 #include "SkColorPriv.h" | 22 #include "SkColorPriv.h" |
| 22 #include "SkColorFilter.h" | 23 #include "SkColorFilter.h" |
| 23 #include "SkLayerRasterizer.h" | 24 #include "SkLayerRasterizer.h" |
| 24 | 25 |
| 25 #include "SkCanvasDrawable.h" | 26 #include "SkCanvasDrawable.h" |
| 26 | 27 |
| 27 #include "SkParsePath.h" | 28 #include "SkParsePath.h" |
| 28 static void testparse() { | 29 static void testparse() { |
| 29 SkRect r; | 30 SkRect r; |
| 30 r.set(0, 0, 10, 10.5f); | 31 r.set(0, 0, 10, 10.5f); |
| 31 SkPath p, p2; | 32 SkPath p, p2; |
| 32 SkString str, str2; | 33 SkString str, str2; |
| 33 | 34 |
| 34 p.addRect(r); | 35 p.addRect(r); |
| 35 SkParsePath::ToSVGString(p, &str); | 36 SkParsePath::ToSVGString(p, &str); |
| 36 SkParsePath::FromSVGString(str.c_str(), &p2); | 37 SkParsePath::FromSVGString(str.c_str(), &p2); |
| 37 SkParsePath::ToSVGString(p2, &str2); | 38 SkParsePath::ToSVGString(p2, &str2); |
| 38 } | 39 } |
| 39 | 40 |
| 40 class ArcsView : public SampleView { | 41 class ArcsView : public SampleView { |
| 41 class MyDrawable : public SkCanvasDrawable { | 42 class MyDrawable : public SkCanvasDrawable { |
| 42 SkRect fR; | 43 SkRect fR; |
| 43 SkScalar fSweep; | 44 SkScalar fSweep; |
| 44 public: | 45 public: |
| 45 MyDrawable(const SkRect& r) : fR(r), fSweep(0) { | 46 MyDrawable(const SkRect& r) : fR(r), fSweep(0) {} |
| 46 } | |
| 47 | 47 |
| 48 void setSweep(SkScalar sweep) { | 48 void setSweep(SkScalar sweep) { |
| 49 if (fSweep != sweep) { | 49 if (fSweep != sweep) { |
| 50 fSweep = sweep; | 50 fSweep = sweep; |
| 51 this->notifyDrawingChanged(); | 51 this->notifyDrawingChanged(); |
| 52 } | 52 } |
| 53 } | 53 } |
| 54 | 54 |
| 55 void onDraw(SkCanvas* canvas) SK_OVERRIDE { | 55 void onDraw(SkCanvas* canvas) SK_OVERRIDE { |
| 56 SkPaint paint; | 56 SkPaint paint; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 75 | 75 |
| 76 SkRect onGetBounds() SK_OVERRIDE { | 76 SkRect onGetBounds() SK_OVERRIDE { |
| 77 SkRect r(fR); | 77 SkRect r(fR); |
| 78 r.outset(2, 2); | 78 r.outset(2, 2); |
| 79 return r; | 79 return r; |
| 80 } | 80 } |
| 81 }; | 81 }; |
| 82 | 82 |
| 83 public: | 83 public: |
| 84 SkRect fRect; | 84 SkRect fRect; |
| 85 MyDrawable* fDrawable; | 85 MyDrawable* fAnimatingDrawable; |
| 86 SkCanvasDrawable* fRootDrawable; |
| 86 | 87 |
| 87 ArcsView() { | 88 ArcsView() { |
| 88 testparse(); | 89 testparse(); |
| 89 fSweep = SkIntToScalar(100); | 90 fSweep = SkIntToScalar(100); |
| 90 this->setBGColor(0xFFDDDDDD); | 91 this->setBGColor(0xFFDDDDDD); |
| 91 | 92 |
| 92 fRect.set(0, 0, SkIntToScalar(200), SkIntToScalar(200)); | 93 fRect.set(0, 0, SkIntToScalar(200), SkIntToScalar(200)); |
| 93 fRect.offset(SkIntToScalar(20), SkIntToScalar(20)); | 94 fRect.offset(SkIntToScalar(20), SkIntToScalar(20)); |
| 94 fDrawable = SkNEW_ARGS(MyDrawable, (fRect)); | 95 fAnimatingDrawable = SkNEW_ARGS(MyDrawable, (fRect)); |
| 96 |
| 97 SkPictureRecorder recorder; |
| 98 this->drawRoot(recorder.beginRecording(SkRect::MakeWH(800, 500))); |
| 99 fRootDrawable = recorder.EXPERIMENTAL_endRecordingAsDrawable(); |
| 95 } | 100 } |
| 96 | 101 |
| 97 virtual ~ArcsView() SK_OVERRIDE { | 102 virtual ~ArcsView() SK_OVERRIDE { |
| 98 fDrawable->unref(); | 103 fAnimatingDrawable->unref(); |
| 104 fRootDrawable->unref(); |
| 99 } | 105 } |
| 100 | 106 |
| 101 protected: | 107 protected: |
| 102 // overrides from SkEventSink | 108 // overrides from SkEventSink |
| 103 virtual bool onQuery(SkEvent* evt) { | 109 bool onQuery(SkEvent* evt) SK_OVERRIDE { |
| 104 if (SampleCode::TitleQ(*evt)) { | 110 if (SampleCode::TitleQ(*evt)) { |
| 105 SampleCode::TitleR(evt, "Arcs"); | 111 SampleCode::TitleR(evt, "Arcs"); |
| 106 return true; | 112 return true; |
| 107 } | 113 } |
| 108 return this->INHERITED::onQuery(evt); | 114 return this->INHERITED::onQuery(evt); |
| 109 } | 115 } |
| 110 | 116 |
| 111 static void drawRectWithLines(SkCanvas* canvas, const SkRect& r, const SkPai
nt& p) { | 117 static void DrawRectWithLines(SkCanvas* canvas, const SkRect& r, const SkPai
nt& p) { |
| 112 canvas->drawRect(r, p); | 118 canvas->drawRect(r, p); |
| 113 canvas->drawLine(r.fLeft, r.fTop, r.fRight, r.fBottom, p); | 119 canvas->drawLine(r.fLeft, r.fTop, r.fRight, r.fBottom, p); |
| 114 canvas->drawLine(r.fLeft, r.fBottom, r.fRight, r.fTop, p); | 120 canvas->drawLine(r.fLeft, r.fBottom, r.fRight, r.fTop, p); |
| 115 canvas->drawLine(r.fLeft, r.centerY(), r.fRight, r.centerY(), p); | 121 canvas->drawLine(r.fLeft, r.centerY(), r.fRight, r.centerY(), p); |
| 116 canvas->drawLine(r.centerX(), r.fTop, r.centerX(), r.fBottom, p); | 122 canvas->drawLine(r.centerX(), r.fTop, r.centerX(), r.fBottom, p); |
| 117 } | 123 } |
| 118 | 124 |
| 119 static void draw_label(SkCanvas* canvas, const SkRect& rect, | 125 static void DrawLabel(SkCanvas* canvas, const SkRect& rect, |
| 120 int start, int sweep) { | 126 int start, int sweep) { |
| 121 SkPaint paint; | 127 SkPaint paint; |
| 122 | 128 |
| 123 paint.setAntiAlias(true); | 129 paint.setAntiAlias(true); |
| 124 paint.setTextAlign(SkPaint::kCenter_Align); | 130 paint.setTextAlign(SkPaint::kCenter_Align); |
| 125 | 131 |
| 126 SkString str; | 132 SkString str; |
| 127 | 133 |
| 128 str.appendS32(start); | 134 str.appendS32(start); |
| 129 str.append(", "); | 135 str.append(", "); |
| 130 str.appendS32(sweep); | 136 str.appendS32(sweep); |
| 131 canvas->drawText(str.c_str(), str.size(), rect.centerX(), | 137 canvas->drawText(str.c_str(), str.size(), rect.centerX(), |
| 132 rect.fBottom + paint.getTextSize() * 5/4, paint); | 138 rect.fBottom + paint.getTextSize() * 5/4, paint); |
| 133 } | 139 } |
| 134 | 140 |
| 135 static void drawArcs(SkCanvas* canvas) { | 141 static void DrawArcs(SkCanvas* canvas) { |
| 136 SkPaint paint; | 142 SkPaint paint; |
| 137 SkRect r; | 143 SkRect r; |
| 138 SkScalar w = SkIntToScalar(75); | 144 SkScalar w = SkIntToScalar(75); |
| 139 SkScalar h = SkIntToScalar(50); | 145 SkScalar h = SkIntToScalar(50); |
| 140 | 146 |
| 141 r.set(0, 0, w, h); | 147 r.set(0, 0, w, h); |
| 142 paint.setAntiAlias(true); | 148 paint.setAntiAlias(true); |
| 143 paint.setStyle(SkPaint::kStroke_Style); | 149 paint.setStyle(SkPaint::kStroke_Style); |
| 144 | 150 |
| 145 canvas->save(); | 151 canvas->save(); |
| 146 canvas->translate(SkIntToScalar(10), SkIntToScalar(300)); | 152 canvas->translate(SkIntToScalar(10), SkIntToScalar(300)); |
| 147 | 153 |
| 148 paint.setStrokeWidth(SkIntToScalar(1)); | 154 paint.setStrokeWidth(SkIntToScalar(1)); |
| 149 | 155 |
| 150 static const int gAngles[] = { | 156 static const int gAngles[] = { |
| 151 0, 360, | 157 0, 360, |
| 152 0, 45, | 158 0, 45, |
| 153 0, -45, | 159 0, -45, |
| 154 720, 135, | 160 720, 135, |
| 155 -90, 269, | 161 -90, 269, |
| 156 -90, 270, | 162 -90, 270, |
| 157 -90, 271, | 163 -90, 271, |
| 158 -180, -270, | 164 -180, -270, |
| 159 225, 90 | 165 225, 90 |
| 160 }; | 166 }; |
| 161 | 167 |
| 162 for (size_t i = 0; i < SK_ARRAY_COUNT(gAngles); i += 2) { | 168 for (size_t i = 0; i < SK_ARRAY_COUNT(gAngles); i += 2) { |
| 163 paint.setColor(SK_ColorBLACK); | 169 paint.setColor(SK_ColorBLACK); |
| 164 drawRectWithLines(canvas, r, paint); | 170 DrawRectWithLines(canvas, r, paint); |
| 165 | 171 |
| 166 paint.setColor(SK_ColorRED); | 172 paint.setColor(SK_ColorRED); |
| 167 canvas->drawArc(r, SkIntToScalar(gAngles[i]), | 173 canvas->drawArc(r, SkIntToScalar(gAngles[i]), |
| 168 SkIntToScalar(gAngles[i+1]), false, paint); | 174 SkIntToScalar(gAngles[i+1]), false, paint); |
| 169 | 175 |
| 170 draw_label(canvas, r, gAngles[i], gAngles[i+1]); | 176 DrawLabel(canvas, r, gAngles[i], gAngles[i+1]); |
| 171 | 177 |
| 172 canvas->translate(w * 8 / 7, 0); | 178 canvas->translate(w * 8 / 7, 0); |
| 173 } | 179 } |
| 174 | 180 |
| 175 canvas->restore(); | 181 canvas->restore(); |
| 176 } | 182 } |
| 177 | 183 |
| 178 virtual void onDrawContent(SkCanvas* canvas) { | 184 void drawRoot(SkCanvas* canvas) { |
| 179 fDrawable->setSweep(SampleCode::GetAnimScalar(SkIntToScalar(360)/24, | |
| 180 SkIntToScalar(360))); | |
| 181 | |
| 182 SkPaint paint; | 185 SkPaint paint; |
| 183 paint.setAntiAlias(true); | 186 paint.setAntiAlias(true); |
| 184 paint.setStrokeWidth(SkIntToScalar(2)); | 187 paint.setStrokeWidth(SkIntToScalar(2)); |
| 185 paint.setStyle(SkPaint::kStroke_Style); | 188 paint.setStyle(SkPaint::kStroke_Style); |
| 186 | 189 |
| 187 drawRectWithLines(canvas, fRect, paint); | 190 DrawRectWithLines(canvas, fRect, paint); |
| 188 | 191 |
| 189 canvas->EXPERIMENTAL_drawDrawable(fDrawable); | 192 canvas->EXPERIMENTAL_drawDrawable(fAnimatingDrawable); |
| 190 | 193 |
| 191 drawArcs(canvas); | 194 DrawArcs(canvas); |
| 195 } |
| 196 |
| 197 void onDrawContent(SkCanvas* canvas) SK_OVERRIDE { |
| 198 fAnimatingDrawable->setSweep(SampleCode::GetAnimScalar(360/24, 360)); |
| 199 canvas->EXPERIMENTAL_drawDrawable(fRootDrawable); |
| 192 this->inval(NULL); | 200 this->inval(NULL); |
| 193 } | 201 } |
| 194 | 202 |
| 195 virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y, | 203 SkView::Click* onFindClickHandler(SkScalar x, SkScalar y, unsigned modi) SK_
OVERRIDE { |
| 196 unsigned modi) { | |
| 197 // fSweep += SK_Scalar1; | 204 // fSweep += SK_Scalar1; |
| 198 this->inval(NULL); | 205 this->inval(NULL); |
| 199 return this->INHERITED::onFindClickHandler(x, y, modi); | 206 return this->INHERITED::onFindClickHandler(x, y, modi); |
| 200 } | 207 } |
| 201 | 208 |
| 202 virtual bool onClick(Click* click) { | |
| 203 return this->INHERITED::onClick(click); | |
| 204 } | |
| 205 | |
| 206 private: | 209 private: |
| 207 SkScalar fSweep; | 210 SkScalar fSweep; |
| 208 | 211 |
| 209 typedef SampleView INHERITED; | 212 typedef SampleView INHERITED; |
| 210 }; | 213 }; |
| 211 | 214 |
| 212 ////////////////////////////////////////////////////////////////////////////// | 215 ////////////////////////////////////////////////////////////////////////////// |
| 213 | 216 |
| 214 static SkView* MyFactory() { return new ArcsView; } | 217 static SkView* MyFactory() { return new ArcsView; } |
| 215 static SkViewRegister reg(MyFactory); | 218 static SkViewRegister reg(MyFactory); |
| OLD | NEW |