| OLD | NEW |
| 1 | |
| 2 /* | 1 /* |
| 3 * Copyright 2014 Google Inc. | 2 * Copyright 2014 Google Inc. |
| 4 * | 3 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 7 */ | 6 */ |
| 8 | 7 |
| 9 #include "gm.h" | 8 #include "gm.h" |
| 10 #include "SkPatchGrid.h" | 9 #include "SkPatchGrid.h" |
| 11 | 10 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 50 | 49 |
| 51 paint.setColor(SK_ColorGREEN); | 50 paint.setColor(SK_ColorGREEN); |
| 52 canvas->drawPoints(SkCanvas::kPoints_PointMode, 2, right+1, paint); | 51 canvas->drawPoints(SkCanvas::kPoints_PointMode, 2, right+1, paint); |
| 53 } | 52 } |
| 54 | 53 |
| 55 namespace skiagm { | 54 namespace skiagm { |
| 56 /** | 55 /** |
| 57 * This GM draws a grid of patches, it only uses colors so it could be considere
d a mesh gradient. | 56 * This GM draws a grid of patches, it only uses colors so it could be considere
d a mesh gradient. |
| 58 */ | 57 */ |
| 59 class SkPatchGridGM : public GM { | 58 class SkPatchGridGM : public GM { |
| 60 | 59 |
| 61 public: | 60 public: |
| 62 SkPatchGridGM() { | 61 SkPatchGridGM() { |
| 63 this->setBGColor(0xFFFFFFFF); | 62 this->setBGColor(0xFFFFFFFF); |
| 64 } | 63 } |
| 65 | 64 |
| 66 protected: | 65 protected: |
| 67 SkString onShortName() override { | 66 SkString onShortName() override { |
| 68 return SkString("patch_grid"); | 67 return SkString("patch_grid"); |
| 69 } | 68 } |
| 70 | 69 |
| 71 SkISize onISize() override { | 70 SkISize onISize() override { |
| 72 return SkISize::Make(800, 800); | 71 return SkISize::Make(800, 800); |
| 73 } | 72 } |
| 74 | 73 |
| 75 void onDraw(SkCanvas* canvas) override { | 74 void onDraw(SkCanvas* canvas) override { |
| 76 | 75 |
| 77 SkPaint paint; | 76 SkPaint paint; |
| 78 | 77 |
| 79 SkPoint vertices[4][5] = { | 78 SkPoint vertices[4][5] = { |
| 80 {{50,50}, {150,50}, {250,50},{350,50},{450,50}}, | 79 {{50,50}, {150,50}, {250,50},{350,50},{450,50}}, |
| 81 {{50,150}, {120,120}, {250,150},{350,150},{450,150}}, | 80 {{50,150}, {120,120}, {250,150},{350,150},{450,150}}, |
| 82 {{50,250}, {150,250}, {250,250},{350,250},{450,250}}, | 81 {{50,250}, {150,250}, {250,250},{350,250},{450,250}}, |
| 83 {{100,300}, {150,350}, {250,350},{350,350},{450,350}} | 82 {{100,300}, {150,350}, {250,350},{350,350},{450,350}} |
| 84 }; | 83 }; |
| 85 | 84 |
| 86 SkColor cornerColors[4][5] = { | 85 SkColor cornerColors[4][5] = { |
| 87 {SK_ColorBLUE, SK_ColorRED, SK_ColorBLUE, SK_ColorRED, SK_ColorBLUE}
, | 86 {SK_ColorBLUE, SK_ColorRED, SK_ColorBLUE, SK_ColorRED, SK_ColorBLUE}
, |
| 88 {SK_ColorRED, SK_ColorBLUE, SK_ColorRED, SK_ColorBLUE, SK_ColorRED}, | 87 {SK_ColorRED, SK_ColorBLUE, SK_ColorRED, SK_ColorBLUE, SK_ColorRED}, |
| 89 {SK_ColorBLUE, SK_ColorRED, SK_ColorBLUE, SK_ColorRED, SK_ColorBLUE}
, | 88 {SK_ColorBLUE, SK_ColorRED, SK_ColorBLUE, SK_ColorRED, SK_ColorBLUE}
, |
| 90 {SK_ColorRED, SK_ColorBLUE, SK_ColorRED, SK_ColorBLUE, SK_ColorRED}, | 89 {SK_ColorRED, SK_ColorBLUE, SK_ColorRED, SK_ColorBLUE, SK_ColorRED}, |
| 91 }; | 90 }; |
| 92 | 91 |
| 93 SkPoint hrzCtrl[4][8] = { | 92 SkPoint hrzCtrl[4][8] = { |
| 94 {{75,30},{125,45},{175,70},{225,20},{275,50},{325,50},{375,5},{425,9
0}}, | 93 {{75,30},{125,45},{175,70},{225,20},{275,50},{325,50},{375,5},{425,9
0}}, |
| 95 {{75,150},{125,150},{175,150},{225,150},{275,150},{325,150},{375,150
},{425,150}}, | 94 {{75,150},{125,150},{175,150},{225,150},{275,150},{325,150},{375,150
},{425,150}}, |
| 96 {{75,250},{125,250},{175,250},{225,250},{275,200},{325,150},{375,250
},{425,250}}, | 95 {{75,250},{125,250},{175,250},{225,250},{275,200},{325,150},{375,250
},{425,250}}, |
| 97 {{75,350},{125,350},{175,350},{225,350},{275,350},{325,350},{375,350
},{425,350}} | 96 {{75,350},{125,350},{175,350},{225,350},{275,350},{325,350},{375,350
},{425,350}} |
| 98 }; | 97 }; |
| 99 | 98 |
| 100 SkPoint vrtCtrl[6][5] = { | 99 SkPoint vrtCtrl[6][5] = { |
| 101 {{50,75},{150,75},{250,75},{350,75},{450,75}}, | 100 {{50,75},{150,75},{250,75},{350,75},{450,75}}, |
| 102 {{50,125},{150,125},{250,125},{350,125},{450,125}}, | 101 {{50,125},{150,125},{250,125},{350,125},{450,125}}, |
| 103 {{50,175},{150,175},{220,225},{350,175},{470,225}}, | 102 {{50,175},{150,175},{220,225},{350,175},{470,225}}, |
| 104 {{50,225},{150,225},{220,175},{350,225},{470,155}}, | 103 {{50,225},{150,225},{220,175},{350,225},{470,155}}, |
| 105 {{50,275},{150,275},{250,275},{350,275},{400,305}}, | 104 {{50,275},{150,275},{250,275},{350,275},{400,305}}, |
| 106 {{50,325},{150,325},{250,325},{350,325},{450,325}} | 105 {{50,325},{150,325},{250,325},{350,325},{450,325}} |
| 107 }; | 106 }; |
| 108 | 107 |
| 109 static const int kRows = 3; | 108 static const int kRows = 3; |
| 110 static const int kCols = 4; | 109 static const int kCols = 4; |
| 111 | 110 |
| 112 canvas->scale(3, 3); | 111 canvas->scale(3, 3); |
| 113 SkPatchGrid grid(kRows, kCols, SkPatchGrid::kColors_VertexType, nullptr)
; | 112 SkPatchGrid grid(kRows, kCols, SkPatchGrid::kColors_VertexType, nullptr)
; |
| 114 for (int i = 0; i < kRows; i++) { | 113 for (int i = 0; i < kRows; i++) { |
| 115 for (int j = 0; j < kCols; j++) { | 114 for (int j = 0; j < kCols; j++) { |
| 116 SkPoint points[12]; | 115 SkPoint points[12]; |
| 117 | 116 |
| 118 //set corners | 117 //set corners |
| 119 points[SkPatchUtils::kTopP0_CubicCtrlPts] = vertices[i][j]; | 118 points[SkPatchUtils::kTopP0_CubicCtrlPts] = vertices[i][j]; |
| 120 points[SkPatchUtils::kTopP3_CubicCtrlPts] = vertices[i][j + 1]; | 119 points[SkPatchUtils::kTopP3_CubicCtrlPts] = vertices[i][j + 1]; |
| 121 points[SkPatchUtils::kBottomP0_CubicCtrlPts] = vertices[i + 1][j
]; | 120 points[SkPatchUtils::kBottomP0_CubicCtrlPts] = vertices[i + 1][j
]; |
| 122 points[SkPatchUtils::kBottomP3_CubicCtrlPts] = vertices[i + 1][j
+ 1]; | 121 points[SkPatchUtils::kBottomP3_CubicCtrlPts] = vertices[i + 1][j
+ 1]; |
| 123 | 122 |
| 124 points[SkPatchUtils::kTopP1_CubicCtrlPts] = hrzCtrl[i][j * 2]; | 123 points[SkPatchUtils::kTopP1_CubicCtrlPts] = hrzCtrl[i][j * 2]; |
| 125 points[SkPatchUtils::kTopP2_CubicCtrlPts] = hrzCtrl[i][j * 2 + 1
]; | 124 points[SkPatchUtils::kTopP2_CubicCtrlPts] = hrzCtrl[i][j * 2 + 1
]; |
| 126 points[SkPatchUtils::kBottomP1_CubicCtrlPts] = hrzCtrl[i + 1][j
* 2]; | 125 points[SkPatchUtils::kBottomP1_CubicCtrlPts] = hrzCtrl[i + 1][j
* 2]; |
| 127 points[SkPatchUtils::kBottomP2_CubicCtrlPts] = hrzCtrl[i + 1][j
* 2 + 1]; | 126 points[SkPatchUtils::kBottomP2_CubicCtrlPts] = hrzCtrl[i + 1][j
* 2 + 1]; |
| 128 | 127 |
| 129 points[SkPatchUtils::kLeftP1_CubicCtrlPts] = vrtCtrl[i * 2][j]; | 128 points[SkPatchUtils::kLeftP1_CubicCtrlPts] = vrtCtrl[i * 2][j]; |
| 130 points[SkPatchUtils::kLeftP2_CubicCtrlPts] = vrtCtrl[i * 2 + 1][
j]; | 129 points[SkPatchUtils::kLeftP2_CubicCtrlPts] = vrtCtrl[i * 2 + 1][
j]; |
| 131 points[SkPatchUtils::kRightP1_CubicCtrlPts] = vrtCtrl[i * 2][j +
1]; | 130 points[SkPatchUtils::kRightP1_CubicCtrlPts] = vrtCtrl[i * 2][j +
1]; |
| 132 points[SkPatchUtils::kRightP2_CubicCtrlPts] = vrtCtrl[i * 2 + 1]
[j + 1]; | 131 points[SkPatchUtils::kRightP2_CubicCtrlPts] = vrtCtrl[i * 2 + 1]
[j + 1]; |
| 133 | 132 |
| 134 SkColor colors[4]; | 133 SkColor colors[4]; |
| 135 colors[0] = cornerColors[i][j]; | 134 colors[0] = cornerColors[i][j]; |
| 136 colors[1] = cornerColors[i][j + 1]; | 135 colors[1] = cornerColors[i][j + 1]; |
| 137 colors[3] = cornerColors[i + 1][j]; | 136 colors[3] = cornerColors[i + 1][j]; |
| 138 colors[2] = cornerColors[i + 1][j + 1]; | 137 colors[2] = cornerColors[i + 1][j + 1]; |
| 139 | 138 |
| 140 grid.setPatch(j, i, points, colors, nullptr); | 139 grid.setPatch(j, i, points, colors, nullptr); |
| 141 } | 140 } |
| 142 } | 141 } |
| 143 | 142 |
| 144 grid.draw(canvas, paint); | 143 grid.draw(canvas, paint); |
| 145 SkISize dims = grid.getDimensions(); | 144 SkISize dims = grid.getDimensions(); |
| 146 for (int y = 0; y < dims.height(); y++) { | 145 for (int y = 0; y < dims.height(); y++) { |
| 147 for (int x = 0; x < dims.width(); x++) { | 146 for (int x = 0; x < dims.width(); x++) { |
| 148 SkPoint cubics[12]; | 147 SkPoint cubics[12]; |
| 149 grid.getPatch(x, y, cubics, nullptr, nullptr); | 148 grid.getPatch(x, y, cubics, nullptr, nullptr); |
| 150 draw_control_points(canvas, cubics); | 149 draw_control_points(canvas, cubics); |
| 151 } | 150 } |
| 152 } | 151 } |
| 153 } | 152 } |
| 154 | 153 |
| 155 private: | 154 private: |
| 156 typedef GM INHERITED; | 155 typedef GM INHERITED; |
| 157 }; | 156 }; |
| 158 | 157 |
| 159 DEF_GM(return new SkPatchGridGM;) | 158 DEF_GM(return new SkPatchGridGM;) |
| 160 } | 159 } |
| OLD | NEW |