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

Side by Side Diff: gm/patch.cpp

Issue 424663006: SkCanvas interface for drawing a patch. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Fixed implicit casting in patch.cpp Created 6 years, 4 months 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 unified diff | Download patch
« no previous file with comments | « no previous file | gyp/utils.gypi » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2014 Google Inc. 3 * Copyright 2014 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 8
9 // This test only works with the GPU backend. 9 // This test only works with the GPU backend.
10 10
11 #include "gm.h" 11 #include "gm.h"
12 12
13 #if SK_SUPPORT_GPU 13 #if SK_SUPPORT_GPU
14 14
15 #include "GrContext.h" 15 #include "GrContext.h"
16 #include "GrTest.h" 16 #include "GrTest.h"
17 #include "SkPatch.h"
17 18
18 #include "SkPatch.h" 19 static void draw_control_points(SkCanvas* canvas, SkPatch& patch, SkPaint& paint ) {
20 //draw control points
21 SkPaint copy(paint);
22 SkPoint bottom[4];
23 patch.getBottomPoints(bottom);
24 SkPoint top[4];
25 patch.getTopPoints(top);
26 SkPoint left[4];
27 patch.getLeftPoints(left);
28 SkPoint right[4];
29 patch.getRightPoints(right);
30
31 copy.setColor(SK_ColorBLACK);
32 copy.setStrokeWidth(0.5);
33 SkPoint corners[4] = { bottom[0], bottom[3], top[0], top[3] };
34 canvas->drawPoints(SkCanvas::kLines_PointMode, 4, bottom, copy);
35 canvas->drawPoints(SkCanvas::kLines_PointMode, 2, bottom+1, copy);
36 canvas->drawPoints(SkCanvas::kLines_PointMode, 4, top, copy);
37 canvas->drawPoints(SkCanvas::kLines_PointMode, 4, left, copy);
38 canvas->drawPoints(SkCanvas::kLines_PointMode, 4, right, copy);
39
40 canvas->drawPoints(SkCanvas::kLines_PointMode, 2, top+1, copy);
41 canvas->drawPoints(SkCanvas::kLines_PointMode, 2, left+1, copy);
42 canvas->drawPoints(SkCanvas::kLines_PointMode, 2, right+1, copy);
43
44 copy.setStrokeWidth(2);
45
46 copy.setColor(SK_ColorRED);
47 canvas->drawPoints(SkCanvas::kPoints_PointMode, 4, corners, copy);
48
49 copy.setColor(SK_ColorBLUE);
50 canvas->drawPoints(SkCanvas::kPoints_PointMode, 2, bottom+1, copy);
51
52 copy.setColor(SK_ColorCYAN);
53 canvas->drawPoints(SkCanvas::kPoints_PointMode, 2, top+1, copy);
54
55 copy.setColor(SK_ColorYELLOW);
56 canvas->drawPoints(SkCanvas::kPoints_PointMode, 2, left+1, copy);
57
58 copy.setColor(SK_ColorGREEN);
59 canvas->drawPoints(SkCanvas::kPoints_PointMode, 2, right+1, copy);
60 }
61
62 static void draw_random_patch(SkPoint points[12], SkColor colors[4], SkCanvas* c anvas,
63 SkPaint& paint, SkRandom* rnd) {
64 SkPoint ptsCpy[12];
65 memcpy(ptsCpy, points, 12 * sizeof(SkPoint));
66 for (int i = 0; i < 5; i++) {
67 int index = rnd->nextRangeU(0, 11);
68 SkScalar dx = rnd->nextRangeScalar(-50, 50), dy = rnd->nextRangeScalar(- 50, 50);
69 ptsCpy[index].offset(dx, dy);
70 }
71 SkPatch patch(ptsCpy, colors);
72 canvas->drawPatch(patch, paint);
73 draw_control_points(canvas, patch, paint);
74 }
19 75
20 namespace skiagm { 76 namespace skiagm {
21 /** 77 /**
22 * This GM draws a SkPatch. 78 * This GM draws a SkPatch.
23 */ 79 */
24 class SkPatchGM : public GM { 80 class SkPatchGM : public GM {
81
25 public: 82 public:
26 SkPatchGM() { 83 SkPatchGM() {
27 this->setBGColor(0xFFFFFFFF); 84 this->setBGColor(0xFFFFFFFF);
28 } 85 }
29 86
30 protected: 87 protected:
31 virtual SkString onShortName() SK_OVERRIDE { 88 virtual SkString onShortName() SK_OVERRIDE {
32 return SkString("patch_primitive"); 89 return SkString("patch_primitive");
33 } 90 }
34 91
35 virtual SkISize onISize() SK_OVERRIDE { 92 virtual SkISize onISize() SK_OVERRIDE {
36 return SkISize::Make(800, 800); 93 return SkISize::Make(800, 800);
37 } 94 }
38 95
39 virtual uint32_t onGetFlags() const SK_OVERRIDE { 96 virtual uint32_t onGetFlags() const SK_OVERRIDE {
40 return kGPUOnly_Flag; 97 return kSkipTiled_Flag | kSkipPipe_Flag | kSkipPicture_Flag;
41 } 98 }
42 99
43
44 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { 100 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
45 101
46 SkPaint paint; 102 SkPaint paint;
47 SkColor colors[4] = { 103 SkColor colors[4] = {
48 SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorCYAN 104 SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorCYAN
49 }; 105 };
50 SkPoint points[] = { 106 SkPoint points[12] = {
51 {100,100},{130,50},{500,70}, {650,60}, 107 {50,50},{75,20},{125,80}, {150,50},
52 {350,125},{490,555},{600,700}, 108 {120,75},{180,125},{150,150},
53 {515,595},{140,550},{110,590}, 109 {125,120},{75,180},{50,150},
54 {125,400},{70,150} 110 {20,125},{80,75}
55
56 }; 111 };
57
58 SkPatch coons(points, colors);
59 112
60 SkPatch::VertexData data; 113 SkRandom rnd;
61 coons.getVertexData(&data, 10); 114 SkScalar scale = 0.5f;
62 115 canvas->save();
63 canvas->drawVertices(SkCanvas::kTriangles_VertexMode,data.fVertexCount, 116 for (SkScalar x = 0; x < 4; x++) {
64 data.fPoints, data.fTexCoords, data.fColors, NULL, data.fIndices, 117 canvas->save();
65 data.fIndexCount, paint); 118 canvas->scale(scale * (x + 1), scale * (x + 1));
66 119 canvas->translate(x * 100, 0);
67 //draw control points 120 draw_random_patch(points, colors, canvas, paint, &rnd);
68 SkPoint bottom[4]; 121 canvas->restore();
69 coons.getBottomPoints(bottom); 122 }
70 SkPoint top[4]; 123 canvas->translate(0, 270);
71 coons.getTopPoints(top); 124 SkScalar skew = 0.1f;
72 SkPoint left[4]; 125 for (SkScalar x = 0; x < 4; x++) {
73 coons.getLeftPoints(left); 126 canvas->save();
74 SkPoint right[4]; 127 canvas->scale(scale * (x + 1), scale * (x + 1));
75 coons.getRightPoints(right); 128 canvas->skew(skew * (x + 1), skew * (x + 1));
76 129 canvas->translate(x * 100, 0);
77 SkPoint corners[4] = { bottom[0], bottom[3], top[0], top[3] }; 130 draw_random_patch(points, colors, canvas, paint, &rnd);
78 canvas->drawPoints(SkCanvas::kLines_PointMode, 4, bottom, paint); 131 canvas->restore();
79 canvas->drawPoints(SkCanvas::kLines_PointMode, 2, bottom+1, paint); 132 }
80 canvas->drawPoints(SkCanvas::kLines_PointMode, 4, top, paint); 133 canvas->restore();
81 canvas->drawPoints(SkCanvas::kLines_PointMode, 4, left, paint);
82 canvas->drawPoints(SkCanvas::kLines_PointMode, 4, right, paint);
83
84 canvas->drawPoints(SkCanvas::kLines_PointMode, 2, top+1, paint);
85 canvas->drawPoints(SkCanvas::kLines_PointMode, 2, left+1, paint);
86 canvas->drawPoints(SkCanvas::kLines_PointMode, 2, right+1, paint);
87
88 paint.setStrokeWidth(10);
89
90 paint.setColor(SK_ColorRED);
91 canvas->drawPoints(SkCanvas::kPoints_PointMode, 4, corners, paint);
92
93 paint.setColor(SK_ColorBLUE);
94 canvas->drawPoints(SkCanvas::kPoints_PointMode, 2, bottom+1, paint);
95
96 paint.setColor(SK_ColorCYAN);
97 canvas->drawPoints(SkCanvas::kPoints_PointMode, 2, top+1, paint);
98
99 paint.setColor(SK_ColorYELLOW);
100 canvas->drawPoints(SkCanvas::kPoints_PointMode, 2, left+1, paint);
101
102 paint.setColor(SK_ColorGREEN);
103 canvas->drawPoints(SkCanvas::kPoints_PointMode, 2, right+1, paint);
104 } 134 }
105 135
106 private: 136 private:
107 typedef GM INHERITED; 137 typedef GM INHERITED;
108 }; 138 };
109 139
110 DEF_GM( return SkNEW(SkPatchGM); ) 140 DEF_GM(return SkNEW(SkPatchGM); )
111 141
112 } 142 }
113 143
114 #endif 144 #endif
OLDNEW
« no previous file with comments | « no previous file | gyp/utils.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698