Fix Two Pt Radial when circles are concentric.
Review URL: http://codereview.appspot.com/4368047/
git-svn-id: http://skia.googlecode.com/svn/trunk@1069 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/samplecode/SampleGradients.cpp b/samplecode/SampleGradients.cpp
index 8c65fe0..385062d 100644
--- a/samplecode/SampleGradients.cpp
+++ b/samplecode/SampleGradients.cpp
@@ -94,10 +94,21 @@
data.fColors, data.fPos, data.fCount, tm, mapper);
}
+static SkShader* Make2RadialConcentric(const SkPoint pts[2], const GradData& data,
+ SkShader::TileMode tm, SkUnitMapper* mapper) {
+ SkPoint center;
+ center.set(SkScalarAve(pts[0].fX, pts[1].fX),
+ SkScalarAve(pts[0].fY, pts[1].fY));
+ return SkGradientShader::CreateTwoPointRadial(
+ center, (pts[1].fX - pts[0].fX) / 7,
+ center, (pts[1].fX - pts[0].fX) / 2,
+ data.fColors, data.fPos, data.fCount, tm, mapper);
+}
+
typedef SkShader* (*GradMaker)(const SkPoint pts[2], const GradData& data,
SkShader::TileMode tm, SkUnitMapper* mapper);
static const GradMaker gGradMakers[] = {
- MakeLinear, MakeRadial, MakeSweep, Make2Radial
+ MakeLinear, MakeRadial, MakeSweep, Make2Radial, Make2RadialConcentric
};
///////////////////////////////////////////////////////////////////////////////
@@ -127,24 +138,29 @@
{ 0, 0 },
{ SkIntToScalar(100), SkIntToScalar(100) }
};
- SkShader::TileMode tm = SkShader::kClamp_TileMode;
SkRect r = { 0, 0, SkIntToScalar(100), SkIntToScalar(100) };
SkPaint paint;
paint.setDither(true);
canvas->save();
canvas->translate(SkIntToScalar(20), SkIntToScalar(10));
- for (size_t i = 0; i < SK_ARRAY_COUNT(gGradData); i++) {
+
+ for (int tm = 0; tm < SkShader::kTileModeCount; ++tm) {
canvas->save();
- for (size_t j = 0; j < SK_ARRAY_COUNT(gGradMakers); j++) {
- SkShader* shader;
- shader = gGradMakers[j](pts, gGradData[i], tm, NULL);
- paint.setShader(shader)->unref();
- canvas->drawRect(r, paint);
- canvas->translate(0, SkIntToScalar(120));
+ for (size_t i = 0; i < SK_ARRAY_COUNT(gGradData); i++) {
+ canvas->save();
+ for (size_t j = 0; j < SK_ARRAY_COUNT(gGradMakers); j++) {
+ SkShader* shader;
+ shader = gGradMakers[j](pts, gGradData[i], (SkShader::TileMode)tm, NULL);
+ paint.setShader(shader)->unref();
+ canvas->drawRect(r, paint);
+ canvas->translate(0, SkIntToScalar(120));
+ }
+ canvas->restore();
+ canvas->translate(SkIntToScalar(120), 0);
}
canvas->restore();
- canvas->translate(SkIntToScalar(120), 0);
+ canvas->translate(SK_ARRAY_COUNT(gGradData)*SkIntToScalar(120), 0);
}
canvas->restore();