| Index: gm/shadertext.cpp
|
| diff --git a/gm/shadertext.cpp b/gm/shadertext.cpp
|
| index 292acdd7a61ad2c94676c0b21bf6c6a7f2d1ba6e..b9e28be898f6bc3e2201e881086d5ca23eeba79f 100644
|
| --- a/gm/shadertext.cpp
|
| +++ b/gm/shadertext.cpp
|
| @@ -1,13 +1,14 @@
|
| +
|
| /*
|
| * Copyright 2011 Google Inc.
|
| *
|
| * Use of this source code is governed by a BSD-style license that can be
|
| * found in the LICENSE file.
|
| */
|
| -
|
| #include "gm.h"
|
| #include "SkCanvas.h"
|
| #include "SkGradientShader.h"
|
| +#include "SkUnitMappers.h"
|
|
|
| namespace skiagm {
|
|
|
| @@ -22,9 +23,15 @@
|
| SkScalar pos[] = { 0, SK_Scalar1/2, SK_Scalar1 };
|
| SkPaint paint;
|
|
|
| + SkUnitMapper* um = NULL;
|
| +
|
| + um = new SkCosineMapper;
|
| +
|
| + SkAutoUnref au(um);
|
| +
|
| paint.setDither(true);
|
| paint.setShader(SkGradientShader::CreateLinear(pts, colors, pos,
|
| - SK_ARRAY_COUNT(colors), SkShader::kClamp_TileMode))->unref();
|
| + SK_ARRAY_COUNT(colors), SkShader::kClamp_TileMode, um))->unref();
|
| canvas.drawPaint(paint);
|
| }
|
|
|
| @@ -54,26 +61,32 @@
|
| { 5, gColors, NULL },
|
| };
|
|
|
| -static SkShader* MakeLinear(const SkPoint pts[2], const GradData& data, SkShader::TileMode tm) {
|
| - return SkGradientShader::CreateLinear(pts, data.fColors, data.fPos, data.fCount, tm);
|
| -}
|
| -
|
| -static SkShader* MakeRadial(const SkPoint pts[2], const GradData& data, SkShader::TileMode tm) {
|
| +static SkShader* MakeLinear(const SkPoint pts[2], const GradData& data,
|
| + SkShader::TileMode tm, SkUnitMapper* mapper) {
|
| + return SkGradientShader::CreateLinear(pts, data.fColors, data.fPos,
|
| + data.fCount, tm, mapper);
|
| +}
|
| +
|
| +static SkShader* MakeRadial(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::CreateRadial(center, center.fX, data.fColors,
|
| - data.fPos, data.fCount, tm);
|
| -}
|
| -
|
| -static SkShader* MakeSweep(const SkPoint pts[2], const GradData& data, SkShader::TileMode) {
|
| + data.fPos, data.fCount, tm, mapper);
|
| +}
|
| +
|
| +static SkShader* MakeSweep(const SkPoint pts[2], const GradData& data,
|
| + SkShader::TileMode, SkUnitMapper* mapper) {
|
| SkPoint center;
|
| center.set(SkScalarAve(pts[0].fX, pts[1].fX),
|
| SkScalarAve(pts[0].fY, pts[1].fY));
|
| - return SkGradientShader::CreateSweep(center.fX, center.fY, data.fColors, data.fPos, data.fCount);
|
| -}
|
| -
|
| -static SkShader* Make2Radial(const SkPoint pts[2], const GradData& data, SkShader::TileMode tm) {
|
| + return SkGradientShader::CreateSweep(center.fX, center.fY, data.fColors,
|
| + data.fPos, data.fCount, mapper);
|
| +}
|
| +
|
| +static SkShader* Make2Radial(const SkPoint pts[2], const GradData& data,
|
| + SkShader::TileMode tm, SkUnitMapper* mapper) {
|
| SkPoint center0, center1;
|
| center0.set(SkScalarAve(pts[0].fX, pts[1].fX),
|
| SkScalarAve(pts[0].fY, pts[1].fY));
|
| @@ -82,11 +95,11 @@
|
| return SkGradientShader::CreateTwoPointRadial(
|
| center1, (pts[1].fX - pts[0].fX) / 7,
|
| center0, (pts[1].fX - pts[0].fX) / 2,
|
| - data.fColors, data.fPos, data.fCount, tm);
|
| -}
|
| -
|
| -typedef SkShader* (*GradMaker)(const SkPoint pts[2], const GradData& data, SkShader::TileMode tm);
|
| -
|
| + 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
|
| };
|
| @@ -141,7 +154,8 @@
|
| for (size_t m = 0; m < SK_ARRAY_COUNT(gGradMakers); ++m) {
|
| shaders[shdIdx++] = gGradMakers[m](pts,
|
| gGradData[d],
|
| - SkShader::kClamp_TileMode);
|
| + SkShader::kClamp_TileMode,
|
| + NULL);
|
| }
|
| }
|
| for (size_t tx = 0; tx < SK_ARRAY_COUNT(tileModes); ++tx) {
|
|
|