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

Unified Diff: gm/gradient_matrix.cpp

Issue 16467002: Added tests for radial gradients with shader matrices (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: radial gradients test Created 7 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gm/gradient_matrix.cpp
diff --git a/gm/gradient_matrix.cpp b/gm/gradient_matrix.cpp
index 8915b1699c709c2cc2afe36897c47801ba77eddf..21530b5668e5fe84359e3e3e50422a3d9a1c3bef 100644
--- a/gm/gradient_matrix.cpp
+++ b/gm/gradient_matrix.cpp
@@ -14,11 +14,21 @@ static const SkScalar gPosAll[] = {
0, SK_Scalar1
};
-static SkShader* SimpleGradient(const SkPoint pts[2]) {
+static SkShader* SimpleLinearGradient(const SkPoint pts[2]) {
vandebo (ex-Chrome) 2013/06/11 05:15:25 MakeLinearGradient
ducky 2013/06/11 19:51:01 Done.
return SkGradientShader::CreateLinear(pts, gColors, gPosAll,
2, SkShader::kClamp_TileMode, NULL);
}
+static SkShader* SimpleRadialGradient(const SkPoint pts[2], const GradData& data,
vandebo (ex-Chrome) 2013/06/11 05:15:25 MakeRadialGRadient
ducky 2013/06/11 19:51:01 Done.
+ SkShader::TileMode tm, SkUnitMapper* mapper) {
vandebo (ex-Chrome) 2013/06/11 05:15:25 line up previous line (first const).
ducky 2013/06/11 19:51:01 Done.
+ SkPoint center;
+ center.set(SkScalarAve(pts[0].fX, pts[1].fX),
+ SkScalarAve(pts[0].fY, pts[1].fY));
+ float radius = (center - pts[0]).length();
+ return SkGradientShader::CreateRadial(center, radius, gColors,
reed1 2013/06/11 13:54:16 Another common way to pass these... ..., gColors,
ducky 2013/06/11 19:51:01 Done.
+ gPosAll, 2, SkShader::kClamp_TileMode, NULL);
vandebo (ex-Chrome) 2013/06/11 05:15:25 nit: gPosAll, 2, on previous line.
ducky 2013/06/11 19:51:01 Done.
+}
+
namespace skiagm {
class GradientMatrixGM : public GM {
@@ -32,7 +42,7 @@ protected:
return SkString("gradient_matrix");
}
- virtual SkISize onISize() { return make_isize(800, 400); }
+ virtual SkISize onISize() { return make_isize(800, 800); }
reed1 2013/06/11 13:54:16 make_isize() is a hold-over from before we had goo
ducky 2013/06/11 19:51:01 Done.
virtual void onDraw(SkCanvas* canvas) {
vandebo (ex-Chrome) 2013/06/11 05:15:25 This method is rather repetitive. Can you pack th
ducky 2013/06/11 19:51:01 Done.
const int TESTGRID_X = 200;
@@ -40,28 +50,52 @@ protected:
canvas->save();
- testGrad(canvas, 0, 0, 1, 0);
+ drawLinearGradient(canvas, 0, 0, 1, 0);
+ canvas->translate(TESTGRID_X, 0);
+ drawLinearGradient(canvas, 0, 0, 0, 1);
+ canvas->translate(TESTGRID_X, 0);
+ drawLinearGradient(canvas, 1, 0, 0, 0);
+ canvas->translate(TESTGRID_X, 0);
+ drawLinearGradient(canvas, 0, 1, 0, 0);
+
+ canvas->restore();
+ canvas->translate(0, TESTGRID_Y);
+ canvas->save();
+
+ drawLinearGradient(canvas, 0, 0, 1, 1);
+ canvas->translate(TESTGRID_X, 0);
+ drawLinearGradient(canvas, 1, 1, 0, 0);
+ canvas->translate(TESTGRID_X, 0);
+ drawLinearGradient(canvas, 1, 0, 0, 1);
+ canvas->translate(TESTGRID_X, 0);
+ drawLinearGradient(canvas, 0, 1, 1, 0);
+
+ canvas->restore();
+ canvas->translate(0, TESTGRID_Y);
+ canvas->save();
+
+ drawRadialGradient(canvas, 0, 0.5, 1, 0.5);
canvas->translate(TESTGRID_X, 0);
- testGrad(canvas, 0, 0, 0, 1);
+ drawRadialGradient(canvas, 0.5, 0, 0.5, 1);
canvas->translate(TESTGRID_X, 0);
- testGrad(canvas, 1, 0, 0, 0);
+ drawRadialGradient(canvas, 1, 0.5, 0, 0.5);
canvas->translate(TESTGRID_X, 0);
- testGrad(canvas, 0, 1, 0, 0);
+ drawRadialGradient(canvas, 0.5, 1, 0.5, 0);
canvas->restore();
canvas->translate(0, TESTGRID_Y);
canvas->save();
- testGrad(canvas, 0, 0, 1, 1);
+ drawRadialGradient(canvas, 0, 0, 1, 1);
canvas->translate(TESTGRID_X, 0);
- testGrad(canvas, 1, 1, 0, 0);
+ drawRadialGradient(canvas, 1, 1, 0, 0);
canvas->translate(TESTGRID_X, 0);
- testGrad(canvas, 1, 0, 0, 1);
+ drawRadialGradient(canvas, 1, 0, 0, 1);
canvas->translate(TESTGRID_X, 0);
- testGrad(canvas, 0, 1, 1, 0);
+ drawRadialGradient(canvas, 0, 1, 1, 0);
}
- virtual void simpleGrad(SkCanvas* canvas) {
+ virtual void simpleGradient(SkCanvas* canvas) {
SkPoint pts[2] = {
{ 100, 0 },
{ 0, 0 }
@@ -72,7 +106,27 @@ protected:
0, 0, 1);
SkRect rectGrad = { 0, 0, 100, 100 }; // very simple numbers
- SkShader* shader = SimpleGradient(pts);
+ SkShader* shader = SimpleLinearGradient(pts);
+ shader->setLocalMatrix(shaderMat);
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ paint.setShader(shader);
+ canvas->drawRect(rectGrad, paint);
+ shader->unref();
+ }
+
+ virtual void drawRadialGradient(SkCanvas* canvas, float x1, float y1, float x2, float y2) {
vandebo (ex-Chrome) 2013/06/11 05:15:25 This method is basically a duplicate of the next o
ducky 2013/06/11 19:51:01 Done.
+ SkPoint pts[2] = {
+ { x1, y1 },
+ { x2, y2 }
+ };
+ SkMatrix shaderMat = SkMatrix();
+ shaderMat.setAll(138, 0, 43,
+ 0, 106, 61,
+ 0, 0, 1);
+ SkRect rectGrad = { 43, 61, 181, 167 }; // some nice prime numbers
+
+ SkShader* shader = SimpleRadialGradient(pts);
shader->setLocalMatrix(shaderMat);
SkPaint paint;
paint.setAntiAlias(true);
@@ -81,7 +135,7 @@ protected:
shader->unref();
}
- virtual void testGrad(SkCanvas* canvas, int x1, int y1, int x2, int y2) {
+ virtual void drawLinearGradient(SkCanvas* canvas, float x1, float y1, float x2, float y2) {
SkPoint pts[2] = {
{ x1, y1 },
{ x2, y2 }
@@ -92,7 +146,7 @@ protected:
0, 0, 1);
SkRect rectGrad = { 43, 61, 181, 167 }; // some nice prime numbers
- SkShader* shader = SimpleGradient(pts);
+ SkShader* shader = SimpleLinearGradient(pts);
shader->setLocalMatrix(shaderMat);
SkPaint paint;
paint.setAntiAlias(true);
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698