Index: gm/meshgradient.cpp |
diff --git a/gm/patch.cpp b/gm/meshgradient.cpp |
similarity index 56% |
copy from gm/patch.cpp |
copy to gm/meshgradient.cpp |
index 3f1e07910be6ea21407018c8a2bb5134ea03e77c..128cd08b17b7748de7c4ce14db6828f8e7489f83 100644 |
--- a/gm/patch.cpp |
+++ b/gm/meshgradient.cpp |
@@ -14,18 +14,19 @@ |
#include "GrContext.h" |
#include "GrTest.h" |
-#include "SkPatch.h" |
+ |
+#include "../src/effects/gradients/SkMeshGradient.h" |
static void draw_control_points(SkCanvas* canvas, const SkPatch& patch) { |
//draw control points |
SkPaint paint; |
- SkPoint bottom[SkPatch::kNumPtsCubic]; |
+ SkPoint bottom[4]; |
patch.getBottomPoints(bottom); |
- SkPoint top[SkPatch::kNumPtsCubic]; |
+ SkPoint top[4]; |
patch.getTopPoints(top); |
- SkPoint left[SkPatch::kNumPtsCubic]; |
+ SkPoint left[4]; |
patch.getLeftPoints(left); |
- SkPoint right[SkPatch::kNumPtsCubic]; |
+ SkPoint right[4]; |
patch.getRightPoints(right); |
paint.setColor(SK_ColorBLACK); |
@@ -61,18 +62,18 @@ static void draw_control_points(SkCanvas* canvas, const SkPatch& patch) { |
namespace skiagm { |
/** |
- * This GM draws a SkPatch. |
+ * This GM draws a mesh gradient. |
*/ |
-class SkPatchGM : public GM { |
+class SkMeshGradientGM : public GM { |
public: |
- SkPatchGM() { |
+ SkMeshGradientGM() { |
this->setBGColor(0xFFFFFFFF); |
} |
protected: |
virtual SkString onShortName() SK_OVERRIDE { |
- return SkString("patch_primitive"); |
+ return SkString("mesh_gradient"); |
} |
virtual SkISize onISize() SK_OVERRIDE { |
@@ -82,59 +83,55 @@ protected: |
virtual uint32_t onGetFlags() const SK_OVERRIDE { |
return kSkipTiled_Flag; |
} |
- |
+ |
virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { |
- |
+ |
SkPaint paint; |
- // The order of the colors and points is clockwise starting at upper-left corner. |
- SkColor colors[SkPatch::kNumColors] = { |
- SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorCYAN |
+ SkPoint vertices[] = { |
+ {50,50}, {150,50}, {250,50}, |
+ {50,150}, {160,140}, {250,150}, |
+ {50,250}, {170,460}, {250,250} |
}; |
- SkPoint points[SkPatch::kNumCtrlPts] = { |
- //top points |
- {50,50},{75,20},{125,80}, {150,50}, |
- //right points |
- {120,75},{180,125}, |
- //bottom points |
- {150,150},{125,120},{75,180},{50,150}, |
- //left points |
- {20,125},{80,75} |
+ |
+ SkColor cornerColors[] = { |
+ SK_ColorBLUE, SK_ColorRED, SK_ColorBLUE, |
+ SK_ColorRED, SK_ColorBLUE, SK_ColorRED, |
+ SK_ColorBLUE, SK_ColorRED, SK_ColorBLUE |
}; |
- SkPatch patch(points, colors); |
- static const SkScalar kScale = 0.5f; |
- canvas->translate(100, 100); |
- canvas->save(); |
- for (SkScalar x = 0; x < 4; x++) { |
- canvas->save(); |
- canvas->scale(kScale * (x + 1), kScale * (x + 1)); |
- canvas->translate(x * 100, 0); |
- canvas->drawPatch(patch, paint); |
- draw_control_points(canvas, patch); |
- canvas->restore(); |
- } |
+ SkPoint hrzCtrl[] = { |
+ {75,80},{125,20},{175,50},{225,50}, |
+ {75,180},{125,120},{175,150},{225,150}, |
+ {75,250},{125,250},{175,250},{225,250} |
+ }; |
+ |
+ SkPoint vrtCtrl[] = { |
+ {50,75},{150,75},{250,75}, |
+ {50,125},{150,125},{250,125}, |
+ {50,175},{150,175},{250,175}, |
+ {50,225},{150,225},{250,225} |
+ }; |
- canvas->translate(0, 270); |
+ canvas->scale(5, 5); |
+ SkMeshGradient grad(2, 2, vertices, hrzCtrl, vrtCtrl, cornerColors); |
- static const SkScalar kSkew = 0.2f; |
- for (SkScalar x = 0; x < 4; x++) { |
- canvas->save(); |
- canvas->scale(kScale * (x + 1), kScale * (x + 1)); |
- canvas->translate(x * 100, 0); |
- canvas->skew(kSkew * (x + 1), kSkew * (x + 1)); |
- canvas->drawPatch(patch, paint); |
- draw_control_points(canvas, patch); |
- canvas->restore(); |
+ grad.draw(canvas, paint); |
+ SkISize dims = grad.getDimensions(); |
+ for (int y = 0; y < dims.height(); y++) { |
+ for (int x = 0; x < dims.width(); x++) { |
+ SkPatch patch; |
+ grad.getPatchAt(x, y, &patch); |
+ draw_control_points(canvas, patch); |
+ } |
} |
- canvas->restore(); |
} |
private: |
typedef GM INHERITED; |
}; |
-DEF_GM(return SkNEW(SkPatchGM); ) |
+DEF_GM(return SkNEW(SkMeshGradientGM); ) |
} |