Chromium Code Reviews| Index: gm/gradients.cpp |
| diff --git a/gm/gradients.cpp b/gm/gradients.cpp |
| index eeb5bcb9ff86ccba7e8116b6e501667b12bff702..1b5eba61d715fb0d14889897d82fb5a3ebf57a1a 100644 |
| --- a/gm/gradients.cpp |
| +++ b/gm/gradients.cpp |
| @@ -40,59 +40,57 @@ static const GradData gGradData[] = { |
| { 4, gColorClamp, gPosClamp } |
| }; |
| -static SkShader* MakeLinear(const SkPoint pts[2], const GradData& data, |
| - SkShader::TileMode tm, const SkMatrix& localMatrix) { |
| - return SkGradientShader::CreateLinear(pts, data.fColors, data.fPos, |
| - data.fCount, tm, 0, &localMatrix); |
| +static sk_sp<SkShader> MakeLinear(const SkPoint pts[2], const GradData& data, |
| + SkShader::TileMode tm, const SkMatrix& localMatrix) { |
| + return SkGradientShader::MakeLinear(pts, data.fColors, data.fPos, data.fCount, tm, 0, |
| + &localMatrix); |
| } |
| -static SkShader* MakeRadial(const SkPoint pts[2], const GradData& data, |
| - SkShader::TileMode tm, const SkMatrix& localMatrix) { |
| +static sk_sp<SkShader> MakeRadial(const SkPoint pts[2], const GradData& data, |
| + SkShader::TileMode tm, const SkMatrix& localMatrix) { |
| 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, 0, &localMatrix); |
| + return SkGradientShader::MakeRadial(center, center.fX, data.fColors, data.fPos, data.fCount, |
| + tm, 0, &localMatrix); |
| } |
| -static SkShader* MakeSweep(const SkPoint pts[2], const GradData& data, |
| - SkShader::TileMode, const SkMatrix& localMatrix) { |
| +static sk_sp<SkShader> MakeSweep(const SkPoint pts[2], const GradData& data, |
| + SkShader::TileMode, const SkMatrix& localMatrix) { |
| 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, 0, &localMatrix); |
| + return SkGradientShader::MakeSweep(center.fX, center.fY, data.fColors, data.fPos, data.fCount, |
| + 0, &localMatrix); |
| } |
| -static SkShader* Make2Radial(const SkPoint pts[2], const GradData& data, |
| - SkShader::TileMode tm, const SkMatrix& localMatrix) { |
| +static sk_sp<SkShader> Make2Radial(const SkPoint pts[2], const GradData& data, |
| + SkShader::TileMode tm, const SkMatrix& localMatrix) { |
| SkPoint center0, center1; |
| center0.set(SkScalarAve(pts[0].fX, pts[1].fX), |
| SkScalarAve(pts[0].fY, pts[1].fY)); |
| center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), |
| SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); |
| - return SkGradientShader::CreateTwoPointConical( |
| - center1, (pts[1].fX - pts[0].fX) / 7, |
| - center0, (pts[1].fX - pts[0].fX) / 2, |
| - data.fColors, data.fPos, data.fCount, tm, |
| - 0, &localMatrix); |
| + return SkGradientShader::MakeTwoPointConical(center1, (pts[1].fX - pts[0].fX) / 7, |
| + center0, (pts[1].fX - pts[0].fX) / 2, |
| + data.fColors, data.fPos, data.fCount, tm, |
| + 0, &localMatrix); |
| } |
| -static SkShader* Make2Conical(const SkPoint pts[2], const GradData& data, |
| +static sk_sp<SkShader> Make2Conical(const SkPoint pts[2], const GradData& data, |
| SkShader::TileMode tm, const SkMatrix& localMatrix) { |
| SkPoint center0, center1; |
| SkScalar radius0 = (pts[1].fX - pts[0].fX) / 10; |
| SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3; |
| center0.set(pts[0].fX + radius0, pts[0].fY + radius0); |
| center1.set(pts[1].fX - radius1, pts[1].fY - radius1); |
| - return SkGradientShader::CreateTwoPointConical(center1, radius1, |
| - center0, radius0, |
| - data.fColors, data.fPos, |
| - data.fCount, tm, 0, &localMatrix); |
| + return SkGradientShader::MakeTwoPointConical(center1, radius1, center0, radius0, |
| + data.fColors, data.fPos, |
| + data.fCount, tm, 0, &localMatrix); |
| } |
| -typedef SkShader* (*GradMaker)(const SkPoint pts[2], const GradData& data, |
| - SkShader::TileMode tm, const SkMatrix& localMatrix); |
| +typedef sk_sp<SkShader> (*GradMaker)(const SkPoint pts[2], const GradData& data, |
| + SkShader::TileMode tm, const SkMatrix& localMatrix); |
| static const GradMaker gGradMakers[] = { |
| MakeLinear, MakeRadial, MakeSweep, Make2Radial, Make2Conical |
| }; |
| @@ -136,11 +134,8 @@ protected: |
| scale.postTranslate(25.f, 25.f); |
| } |
| - SkShader* shader = gGradMakers[j](pts, gGradData[i], tm, scale); |
| - |
| - paint.setShader(shader); |
| + paint.setShader(gGradMakers[j](pts, gGradData[i], tm, scale)); |
| canvas->drawRect(r, paint); |
| - shader->unref(); |
| canvas->translate(0, SkIntToScalar(120)); |
| } |
| canvas->restore(); |
| @@ -196,11 +191,8 @@ protected: |
| perspective.setPerspY(SkIntToScalar(i+1) / 500); |
| perspective.setSkewX(SkIntToScalar(i+1) / 10); |
| - SkShader* shader = gGradMakers[j](pts, gGradData[i], tm, perspective); |
| - |
| - paint.setShader(shader); |
| + paint.setShader(gGradMakers[j](pts, gGradData[i], tm, perspective)); |
| canvas->drawRect(r, paint); |
| - shader->unref(); |
| canvas->translate(0, SkIntToScalar(120)); |
| } |
| canvas->restore(); |
| @@ -287,12 +279,11 @@ protected: |
| SkPoint c1; |
| c1.iset(0, 25); |
| SkScalar r1 = SkIntToScalar(150); |
| - SkShader* s = SkGradientShader::CreateTwoPointConical(c0, r0, c1, r1, colors, |
| - pos, SK_ARRAY_COUNT(pos), |
| - SkShader::kClamp_TileMode); |
| SkPaint paint; |
| + paint.setShader(SkGradientShader::MakeTwoPointConical(c0, r0, c1, r1, colors, |
| + pos, SK_ARRAY_COUNT(pos), |
| + SkShader::kClamp_TileMode)); |
| paint.setDither(fDither); |
| - paint.setShader(s)->unref(); |
| canvas->drawPaint(paint); |
| } |
| @@ -329,13 +320,13 @@ DEF_SIMPLE_GM(small_color_stop, canvas, 100, 150) { |
| SkScalar r0 = 20; |
| SkPoint c1 = { 200, 25 }; |
| SkScalar r1 = 10; |
| - SkShader* s = SkGradientShader::CreateTwoPointConical(c0, r0, c1, r1, colors, |
| - pos, SK_ARRAY_COUNT(pos), |
| - SkShader::kClamp_TileMode); |
| + |
| SkPaint paint; |
| paint.setColor(SK_ColorYELLOW); |
| canvas->drawRect(SkRect::MakeWH(100, 150), paint); |
| - paint.setShader(s)->unref(); |
| + paint.setShader(SkGradientShader::MakeTwoPointConical(c0, r0, c1, r1, colors, pos, |
| + SK_ARRAY_COUNT(pos), |
| + SkShader::kClamp_TileMode)); |
| canvas->drawRect(SkRect::MakeWH(100, 150), paint); |
| } |
| @@ -368,13 +359,11 @@ protected: |
| SkPoint center; |
| center.iset(0, 300); |
| canvas->translate(SkIntToScalar(20), SkIntToScalar(20)); |
| - SkShader* shader = SkGradientShader::CreateRadial( |
| + paint.setShader(SkGradientShader::MakeRadial( |
| SkPoint(center), |
| SkIntToScalar(200), gColors, nullptr, 5, |
| - SkShader::kClamp_TileMode); |
| - paint.setShader(shader); |
| + SkShader::kClamp_TileMode)); |
| canvas->drawRect(r, paint); |
| - shader->unref(); |
| } |
| private: |
| @@ -413,11 +402,9 @@ protected: |
| const SkScalar pos[] = { 0.0f, |
| 0.35f, |
| 1.0f }; |
| - SkShader* shader = |
| - SkGradientShader::CreateRadial(center, radius, colors, |
| - pos, SK_ARRAY_COUNT(pos), |
| - SkShader::kClamp_TileMode); |
| - paint.setShader(shader)->unref(); |
| + paint.setShader(SkGradientShader::MakeRadial(center, radius, colors, pos, |
| + SK_ARRAY_COUNT(pos), |
| + SkShader::kClamp_TileMode)); |
| SkRect r = { |
| 0, 0, SkIntToScalar(dim.width()), SkIntToScalar(dim.height()) |
| }; |
| @@ -464,20 +451,17 @@ protected: |
| const uint32_t flags[] = { 0, SkGradientShader::kInterpolateColorsInPremul_Flag }; |
| for (size_t i = 0; i < SK_ARRAY_COUNT(flags); i++) { |
| - SkAutoTUnref<SkShader> sweep( |
| - SkGradientShader::CreateSweep(cx, cy, sweep_colors, |
| - nullptr, SK_ARRAY_COUNT(sweep_colors), |
| - flags[i], nullptr)); |
| - SkAutoTUnref<SkShader> radial1( |
| - SkGradientShader::CreateRadial(center, radius, colors1, |
| - nullptr, SK_ARRAY_COUNT(colors1), |
| - SkShader::kClamp_TileMode, |
| - flags[i], nullptr)); |
| - SkAutoTUnref<SkShader> radial2( |
| - SkGradientShader::CreateRadial(center, radius, colors2, |
| - nullptr, SK_ARRAY_COUNT(colors2), |
| - SkShader::kClamp_TileMode, |
| - flags[i], nullptr)); |
| + auto sweep = SkGradientShader::MakeSweep(cx, cy, sweep_colors, |
| + nullptr, SK_ARRAY_COUNT(sweep_colors), |
| + flags[i], nullptr); |
| + auto radial1 = SkGradientShader::MakeRadial(center, radius, colors1, |
| + nullptr, SK_ARRAY_COUNT(colors1), |
| + SkShader::kClamp_TileMode, |
| + flags[i], nullptr); |
| + auto radial2 = SkGradientShader::MakeRadial(center, radius, colors2, |
| + nullptr, SK_ARRAY_COUNT(colors2), |
| + SkShader::kClamp_TileMode, |
| + flags[i], nullptr); |
| paint1.setShader(sweep); |
|
f(malita)
2016/03/13 16:18:01
nit: move
reed1
2016/03/13 18:25:24
Done.
|
| paint1.setDither(fDither); |
| paint2.setShader(radial1); |
|
f(malita)
2016/03/13 16:18:01
ditto
reed1
2016/03/13 18:25:23
Done.
|
| @@ -519,8 +503,8 @@ protected: |
| const SkPoint center = { 0, 0 }; |
| const SkScalar kRadius = 3000; |
| const SkColor gColors[] = { 0xFFFFFFFF, 0xFF000000 }; |
| - fShader.reset(SkGradientShader::CreateRadial(center, kRadius, gColors, nullptr, 2, |
| - SkShader::kClamp_TileMode)); |
| + fShader = SkGradientShader::MakeRadial(center, kRadius, gColors, nullptr, 2, |
| + SkShader::kClamp_TileMode); |
| } |
| void onDraw(SkCanvas* canvas) override { |
| @@ -531,7 +515,7 @@ protected: |
| } |
| private: |
| - SkAutoTUnref<SkShader> fShader; |
| + sk_sp<SkShader> fShader; |
| bool fDither; |
| typedef GM INHERITED; |
| @@ -556,8 +540,8 @@ protected: |
| const SkColor colors[] = { SK_ColorRED, SK_ColorRED, SK_ColorWHITE, SK_ColorWHITE, |
| SK_ColorRED }; |
| const SkScalar pos[] = { 0, .4f, .4f, .8f, .8f, 1 }; |
| - fShader.reset(SkGradientShader::CreateRadial(center, kRadius, colors, pos, |
| - SK_ARRAY_COUNT(gColors), SkShader::kClamp_TileMode)); |
| + fShader = SkGradientShader::MakeRadial(center, kRadius, colors, pos, |
| + SK_ARRAY_COUNT(gColors), SkShader::kClamp_TileMode); |
| } |
| void onDraw(SkCanvas* canvas) override { |
| @@ -569,7 +553,7 @@ protected: |
| } |
| private: |
| - SkAutoTUnref<SkShader> fShader; |
| + sk_sp<SkShader> fShader; |
| bool fDither; |
| typedef GM INHERITED; |
| @@ -604,8 +588,8 @@ protected: |
| for (int inner = 0; inner < (int) SK_ARRAY_COUNT(unitPos); ++inner) { |
| pos[inner] = unitPos[inner] / (kMinWidth + index * kWidthBump); |
| } |
| - fShader[index].reset(SkGradientShader::CreateLinear(pts, colors, pos, |
| - SK_ARRAY_COUNT(gColors), SkShader::kClamp_TileMode)); |
| + fShader[index] = SkGradientShader::MakeLinear(pts, colors, pos, |
| + SK_ARRAY_COUNT(gColors), SkShader::kClamp_TileMode); |
| } |
| } |
| @@ -621,7 +605,7 @@ protected: |
| } |
| private: |
| - SkAutoTUnref<SkShader> fShader[100]; |
| + sk_sp<SkShader> fShader[100]; |
| bool fDither; |
| typedef GM INHERITED; |
| @@ -673,13 +657,12 @@ protected: |
| SkPaint paint; |
| for (unsigned i = 0; i < SK_ARRAY_COUNT(configs); ++i) { |
| SkAutoCanvasRestore acr(canvas, true); |
| - SkAutoTUnref<SkShader> gradient( |
| - SkGradientShader::CreateLinear(configs[i].pts, colors, configs[i].pos, kStopCount, |
| - SkShader::kClamp_TileMode, fFlags, nullptr)); |
| + paint.setShader(SkGradientShader::MakeLinear(configs[i].pts, colors, configs[i].pos, |
| + kStopCount, SkShader::kClamp_TileMode, |
| + fFlags, nullptr)); |
| canvas->translate(kRectSize * ((i % 4) * 1.5f + 0.25f), |
| kRectSize * ((i / 4) * 1.5f + 0.25f)); |
| - paint.setShader(gradient); |
| canvas->drawRect(SkRect::MakeWH(kRectSize, kRectSize), paint); |
| } |
| } |
| @@ -704,27 +687,27 @@ struct GradRun { |
| #define SIZE 121 |
| -static SkShader* make_linear(const GradRun& run, SkShader::TileMode mode) { |
| +static sk_sp<SkShader> make_linear(const GradRun& run, SkShader::TileMode mode) { |
| const SkPoint pts[] { { 30, 30 }, { SIZE - 30, SIZE - 30 } }; |
| - return SkGradientShader::CreateLinear(pts, run.fColors, run.fPos, run.fCount, mode); |
| + return SkGradientShader::MakeLinear(pts, run.fColors, run.fPos, run.fCount, mode); |
| } |
| -static SkShader* make_radial(const GradRun& run, SkShader::TileMode mode) { |
| +static sk_sp<SkShader> make_radial(const GradRun& run, SkShader::TileMode mode) { |
| const SkScalar half = SIZE * 0.5f; |
| - return SkGradientShader::CreateRadial({half,half}, half - 10, |
| - run.fColors, run.fPos, run.fCount, mode); |
| + return SkGradientShader::MakeRadial({half,half}, half - 10, run.fColors, run.fPos, |
| + run.fCount, mode); |
| } |
| -static SkShader* make_conical(const GradRun& run, SkShader::TileMode mode) { |
| +static sk_sp<SkShader> make_conical(const GradRun& run, SkShader::TileMode mode) { |
| const SkScalar half = SIZE * 0.5f; |
| const SkPoint center { half, half }; |
| - return SkGradientShader::CreateTwoPointConical(center, 20, center, half - 10, |
| + return SkGradientShader::MakeTwoPointConical(center, 20, center, half - 10, |
| run.fColors, run.fPos, run.fCount, mode); |
|
f(malita)
2016/03/13 16:18:01
nit: indentation
reed1
2016/03/13 18:25:23
Done.
|
| } |
| -static SkShader* make_sweep(const GradRun& run, SkShader::TileMode) { |
| +static sk_sp<SkShader> make_sweep(const GradRun& run, SkShader::TileMode) { |
| const SkScalar half = SIZE * 0.5f; |
| - return SkGradientShader::CreateSweep(half, half, run.fColors, run.fPos, run.fCount); |
| + return SkGradientShader::MakeSweep(half, half, run.fColors, run.fPos, run.fCount); |
| } |
| /* |
| @@ -762,7 +745,7 @@ DEF_SIMPLE_GM(gradients_dup_color_stops, canvas, 704, 564) { |
| 4, |
| }, |
| }; |
| - SkShader* (*factories[])(const GradRun&, SkShader::TileMode) { |
| + sk_sp<SkShader> (*factories[])(const GradRun&, SkShader::TileMode) { |
| make_linear, make_radial, make_conical, make_sweep |
| }; |
| @@ -777,7 +760,7 @@ DEF_SIMPLE_GM(gradients_dup_color_stops, canvas, 704, 564) { |
| canvas->translate(0, dy); |
| SkAutoCanvasRestore acr(canvas, true); |
| for (const auto& run : runs) { |
| - paint.setShader(factory(run, mode))->unref(); |
| + paint.setShader(factory(run, mode)); |
| canvas->drawRect(rect, paint); |
| canvas->translate(dx, 0); |
| } |
| @@ -799,11 +782,9 @@ static void draw_many_stops(SkCanvas* canvas, uint32_t flags) { |
| } |
| } |
| - SkAutoTUnref<SkShader> shader(SkGradientShader::CreateLinear( |
| - pts, colors, nullptr, SK_ARRAY_COUNT(colors), SkShader::kClamp_TileMode, flags, nullptr)); |
| - |
| SkPaint p; |
| - p.setShader(shader); |
| + p.setShader(SkGradientShader::MakeLinear( |
| + pts, colors, nullptr, SK_ARRAY_COUNT(colors), SkShader::kClamp_TileMode, flags, nullptr)); |
| canvas->drawRect(SkRect::MakeXYWH(0, 0, 500, 500), p); |
| } |