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

Side by Side Diff: gm/gradientDirtyLaundry.cpp

Issue 18259012: Gradient Fixes (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Removed unecessary bench file and renamed GM to gradientDirtyLaundry.cpp Created 7 years, 5 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1
2 /*
3 * Copyright 2011 Google Inc.
bsalomon 2013/07/08 19:28:46 2013
dierk 2013/07/09 17:52:52 Done.
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
8 #include "gm.h"
9 #include "SkGradientShader.h"
10
11 using namespace skiagm;
12
13 struct GradData {
14 int fCount;
15 const SkColor* fColors;
16 const SkScalar* fPos;
17 };
18
19 static const SkColor gColors[] = {
20 SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK,
21 SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK,
22 SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK,
23 SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK,
24 SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK,
25 SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK,
26 SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK,
27 SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK,
28 };
29
30 static const SkColor gCol2[] = {
31 0xFF555555, 0xFF444444,
32 };
33
34 static const SkScalar gPos[] = { SK_Scalar1*999/2000, SK_Scalar1*1001/2000 };
35
36 static const GradData gGradData[] = {
37 { 40, gColors, NULL },
38 { 2, gColors, gPos },
39 { 2, gCol2, NULL },
40 };
41
42 static SkShader* MakeLinear(const SkPoint pts[2], const GradData& data,
43 SkShader::TileMode tm, SkUnitMapper* mapper) {
44 return SkGradientShader::CreateLinear(pts, data.fColors, data.fPos,
45 data.fCount, tm, mapper);
46 }
47
48 static SkShader* MakeRadial(const SkPoint pts[2], const GradData& data,
49 SkShader::TileMode tm, SkUnitMapper* mapper) {
50 SkPoint center;
51 center.set(SkScalarAve(pts[0].fX, pts[1].fX),
52 SkScalarAve(pts[0].fY, pts[1].fY));
53 return SkGradientShader::CreateRadial(center, center.fX, data.fColors,
54 data.fPos, data.fCount, tm, mapper);
55 }
56
57 static SkShader* MakeSweep(const SkPoint pts[2], const GradData& data,
58 SkShader::TileMode, SkUnitMapper* mapper) {
59 SkPoint center;
60 center.set(SkScalarAve(pts[0].fX, pts[1].fX),
61 SkScalarAve(pts[0].fY, pts[1].fY));
62 return SkGradientShader::CreateSweep(center.fX, center.fY, data.fColors,
63 data.fPos, data.fCount, mapper);
64 }
65
66
67 typedef SkShader* (*GradMaker)(const SkPoint pts[2], const GradData& data,
68 SkShader::TileMode tm, SkUnitMapper* mapper);
69 static const GradMaker gGradMakers[] = {
70 MakeLinear, MakeRadial, MakeSweep,
71 };
72
73 ///////////////////////////////////////////////////////////////////////////////
74
75 class GradientsGM : public GM {
76 public:
77 GradientsGM() {
78 this->setBGColor(0xFFDDDDDD);
79 }
80
81 protected:
82 SkString onShortName() { return SkString("nate_gradients"); }
83 virtual SkISize onISize() { return make_isize(640, 615); }
bsalomon 2013/07/08 19:28:46 SK_OVERRIDE
dierk 2013/07/09 17:52:52 Done.
84
85 virtual void onDraw(SkCanvas* canvas) {
bsalomon 2013/07/08 19:28:46 SK_OVERRIDE
dierk 2013/07/09 17:52:52 Done.
86 SkPoint pts[2] = { { 0, 0 },
87 { SkIntToScalar(100), SkIntToScalar(100) }
88 };
89 SkShader::TileMode tm = SkShader::kClamp_TileMode;
90 SkRect r = { 0, 0, SkIntToScalar(100), SkIntToScalar(100) };
91 SkPaint paint;
92 paint.setAntiAlias(true);
93
94 canvas->translate(SkIntToScalar(20), SkIntToScalar(20));
95 for (size_t i = 0; i < SK_ARRAY_COUNT(gGradData); i++) {
96 canvas->save();
97 for (size_t j = 0; j < SK_ARRAY_COUNT(gGradMakers); j++) {
98 SkShader* shader = gGradMakers[j](pts, gGradData[i], tm, NULL);
99 paint.setShader(shader);
bsalomon 2013/07/08 19:28:46 you can just unref here instead of below (paint wi
dierk 2013/07/09 17:52:52 Done.
100 canvas->drawRect(r, paint);
101 shader->unref();
102 canvas->translate(0, SkIntToScalar(120));
103 }
104 canvas->restore();
105 canvas->translate(SkIntToScalar(120), 0);
106 }
107 }
108
109 private:
110 typedef GM INHERITED;
111 };
112
113 ///////////////////////////////////////////////////////////////////////////////
114
115 static GM* MyFactory(void*) { return new GradientsGM; }
116 static GMRegistry reg(MyFactory);
117
118
OLDNEW
« no previous file with comments | « bench/GradientBench.cpp ('k') | gyp/gmslides.gypi » ('j') | gyp/gmslides.gypi » ('J')

Powered by Google App Engine
This is Rietveld 408576698