| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2014 Google Inc. | 3 * Copyright 2014 Google Inc. |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 #include "gm.h" | 8 #include "gm.h" |
| 9 #include "SkGradientShader.h" | 9 #include "SkGradientShader.h" |
| 10 | 10 |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 103 } | 103 } |
| 104 | 104 |
| 105 static SkShader* Make2ConicalZeroRad(const SkPoint pts[2], const GradData& data, | 105 static SkShader* Make2ConicalZeroRad(const SkPoint pts[2], const GradData& data, |
| 106 SkShader::TileMode tm, SkUnitMapper* mapper) { | 106 SkShader::TileMode tm, SkUnitMapper* mapper) { |
| 107 SkPoint center0, center1; | 107 SkPoint center0, center1; |
| 108 center0.set(SkScalarAve(pts[0].fX, pts[1].fX), | 108 center0.set(SkScalarAve(pts[0].fX, pts[1].fX), |
| 109 SkScalarAve(pts[0].fY, pts[1].fY)); | 109 SkScalarAve(pts[0].fY, pts[1].fY)); |
| 110 center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), | 110 center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), |
| 111 SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); | 111 SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); |
| 112 return SkGradientShader::CreateTwoPointConical( | 112 return SkGradientShader::CreateTwoPointConical( |
| 113 center1, 0.0, | 113 center1, 0.f, |
| 114 center0, (pts[1].fX - pts[0].f
X) / 2, | 114 center0, (pts[1].fX - pts[0].f
X) / 2, |
| 115 data.fColors, data.fPos, data.
fCount, tm, mapper); | 115 data.fColors, data.fPos, data.
fCount, tm, mapper); |
| 116 } | 116 } |
| 117 | 117 |
| 118 static SkShader* Make2ConicalZeroRadFlip(const SkPoint pts[2], const GradData& d
ata, | 118 static SkShader* Make2ConicalZeroRadFlip(const SkPoint pts[2], const GradData& d
ata, |
| 119 SkShader::TileMode tm, SkUnitMapper* mapper) { | 119 SkShader::TileMode tm, SkUnitMapper* mapper) { |
| 120 SkPoint center0, center1; | 120 SkPoint center0, center1; |
| 121 center0.set(SkScalarAve(pts[0].fX, pts[1].fX), | 121 center0.set(SkScalarAve(pts[0].fX, pts[1].fX), |
| 122 SkScalarAve(pts[0].fY, pts[1].fY)); | 122 SkScalarAve(pts[0].fY, pts[1].fY)); |
| 123 center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), | 123 center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), |
| 124 SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); | 124 SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); |
| 125 return SkGradientShader::CreateTwoPointConical( | 125 return SkGradientShader::CreateTwoPointConical( |
| 126 center1, (pts[1].fX - pts[0].f
X) / 2, | 126 center1, (pts[1].fX - pts[0].f
X) / 2, |
| 127 center0, 0.0, | 127 center0, 0.f, |
| 128 data.fColors, data.fPos, data.
fCount, tm, mapper); | 128 data.fColors, data.fPos, data.
fCount, tm, mapper); |
| 129 } | 129 } |
| 130 | 130 |
| 131 static SkShader* Make2ConicalZeroRadCenter(const SkPoint pts[2], const GradData&
data, | 131 static SkShader* Make2ConicalZeroRadCenter(const SkPoint pts[2], const GradData&
data, |
| 132 SkShader::TileMode tm, SkUnitMapper* mapper) { | 132 SkShader::TileMode tm, SkUnitMapper* mapper) { |
| 133 SkPoint center0, center1; | 133 SkPoint center0, center1; |
| 134 center0.set(SkScalarAve(pts[0].fX, pts[1].fX), | 134 center0.set(SkScalarAve(pts[0].fX, pts[1].fX), |
| 135 SkScalarAve(pts[0].fY, pts[1].fY)); | 135 SkScalarAve(pts[0].fY, pts[1].fY)); |
| 136 center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), | 136 center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), |
| 137 SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); | 137 SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); |
| 138 return SkGradientShader::CreateTwoPointConical( | 138 return SkGradientShader::CreateTwoPointConical( |
| 139 center0, 0.0, | 139 center0, 0.f, |
| 140 center0, (pts[1].fX - pts[0].f
X) / 2, | 140 center0, (pts[1].fX - pts[0].f
X) / 2, |
| 141 data.fColors, data.fPos, data.
fCount, tm, mapper); | 141 data.fColors, data.fPos, data.
fCount, tm, mapper); |
| 142 } | 142 } |
| 143 | 143 |
| 144 static SkShader* Make2ConicalZeroRadOutside(const SkPoint pts[2], const GradData
& data, | 144 static SkShader* Make2ConicalZeroRadOutside(const SkPoint pts[2], const GradData
& data, |
| 145 SkShader::TileMode tm, SkUnitMapper* mapper) { | 145 SkShader::TileMode tm, SkUnitMapper* mapper) { |
| 146 SkPoint center0, center1; | 146 SkPoint center0, center1; |
| 147 SkScalar radius0 = 0.0; | 147 SkScalar radius0 = 0.f; |
| 148 SkScalar radius1 = SkScalarDiv(pts[1].fX - pts[0].fX, 3); | 148 SkScalar radius1 = SkScalarDiv(pts[1].fX - pts[0].fX, 3); |
| 149 center0.set(pts[0].fX + radius0, pts[0].fY + radius0); | 149 center0.set(pts[0].fX + radius0, pts[0].fY + radius0); |
| 150 center1.set(pts[1].fX - radius1, pts[1].fY - radius1); | 150 center1.set(pts[1].fX - radius1, pts[1].fY - radius1); |
| 151 return SkGradientShader::CreateTwoPointConical(center0, radius0, | 151 return SkGradientShader::CreateTwoPointConical(center0, radius0, |
| 152 center1, radius1, | 152 center1, radius1, |
| 153 data.fColors, data.fPos, | 153 data.fColors, data.fPos, |
| 154 data.fCount, tm, mapper); | 154 data.fCount, tm, mapper); |
| 155 } | 155 } |
| 156 | 156 |
| 157 static SkShader* Make2ConicalZeroRadFlipOutside(const SkPoint pts[2], const Grad
Data& data, | 157 static SkShader* Make2ConicalZeroRadFlipOutside(const SkPoint pts[2], const Grad
Data& data, |
| 158 SkShader::TileMode tm, SkUnitMapper* mapper) { | 158 SkShader::TileMode tm, SkUnitMapper* mapper) { |
| 159 SkPoint center0, center1; | 159 SkPoint center0, center1; |
| 160 SkScalar radius0 = 0.0; | 160 SkScalar radius0 = 0.f; |
| 161 SkScalar radius1 = SkScalarDiv(pts[1].fX - pts[0].fX, 3); | 161 SkScalar radius1 = SkScalarDiv(pts[1].fX - pts[0].fX, 3); |
| 162 center0.set(pts[0].fX + radius0, pts[0].fY + radius0); | 162 center0.set(pts[0].fX + radius0, pts[0].fY + radius0); |
| 163 center1.set(pts[1].fX - radius1, pts[1].fY - radius1); | 163 center1.set(pts[1].fX - radius1, pts[1].fY - radius1); |
| 164 return SkGradientShader::CreateTwoPointConical(center1, radius1, | 164 return SkGradientShader::CreateTwoPointConical(center1, radius1, |
| 165 center0, radius0, | 165 center0, radius0, |
| 166 data.fColors, data.fPos, | 166 data.fColors, data.fPos, |
| 167 data.fCount, tm, mapper); | 167 data.fCount, tm, mapper); |
| 168 } | 168 } |
| 169 | 169 |
| 170 static SkShader* Make2ConicalEdgeX(const SkPoint pts[2], const GradData& data, | 170 static SkShader* Make2ConicalEdgeX(const SkPoint pts[2], const GradData& data, |
| (...skipping 19 matching lines...) Expand all Loading... |
| 190 SkScalarAve(pts[0].fY, pts[1].fY)); | 190 SkScalarAve(pts[0].fY, pts[1].fY)); |
| 191 center0.set(center1.fX, center1.fY + radius1); | 191 center0.set(center1.fX, center1.fY + radius1); |
| 192 return SkGradientShader::CreateTwoPointConical(center0, radius0, | 192 return SkGradientShader::CreateTwoPointConical(center0, radius0, |
| 193 center1, radius1, | 193 center1, radius1, |
| 194 data.fColors, data.fPos, | 194 data.fColors, data.fPos, |
| 195 data.fCount, tm, mapper); | 195 data.fCount, tm, mapper); |
| 196 } | 196 } |
| 197 static SkShader* Make2ConicalZeroRadEdgeX(const SkPoint pts[2], const GradData&
data, | 197 static SkShader* Make2ConicalZeroRadEdgeX(const SkPoint pts[2], const GradData&
data, |
| 198 SkShader::TileMode tm, SkUnitMapper* mapper) { | 198 SkShader::TileMode tm, SkUnitMapper* mapper) { |
| 199 SkPoint center0, center1; | 199 SkPoint center0, center1; |
| 200 SkScalar radius0 = 0.0; | 200 SkScalar radius0 = 0.f; |
| 201 SkScalar radius1 = SkScalarDiv(pts[1].fX - pts[0].fX, 3); | 201 SkScalar radius1 = SkScalarDiv(pts[1].fX - pts[0].fX, 3); |
| 202 center1.set(SkScalarAve(pts[0].fX, pts[1].fX), | 202 center1.set(SkScalarAve(pts[0].fX, pts[1].fX), |
| 203 SkScalarAve(pts[0].fY, pts[1].fY)); | 203 SkScalarAve(pts[0].fY, pts[1].fY)); |
| 204 center0.set(center1.fX + radius1, center1.fY); | 204 center0.set(center1.fX + radius1, center1.fY); |
| 205 return SkGradientShader::CreateTwoPointConical(center0, radius0, | 205 return SkGradientShader::CreateTwoPointConical(center0, radius0, |
| 206 center1, radius1, | 206 center1, radius1, |
| 207 data.fColors, data.fPos, | 207 data.fColors, data.fPos, |
| 208 data.fCount, tm, mapper); | 208 data.fCount, tm, mapper); |
| 209 } | 209 } |
| 210 | 210 |
| 211 static SkShader* Make2ConicalZeroRadEdgeY(const SkPoint pts[2], const GradData&
data, | 211 static SkShader* Make2ConicalZeroRadEdgeY(const SkPoint pts[2], const GradData&
data, |
| 212 SkShader::TileMode tm, SkUnitMapper* mapper) { | 212 SkShader::TileMode tm, SkUnitMapper* mapper) { |
| 213 SkPoint center0, center1; | 213 SkPoint center0, center1; |
| 214 SkScalar radius0 = 0.0; | 214 SkScalar radius0 = 0.f; |
| 215 SkScalar radius1 = SkScalarDiv(pts[1].fX - pts[0].fX, 3); | 215 SkScalar radius1 = SkScalarDiv(pts[1].fX - pts[0].fX, 3); |
| 216 center1.set(SkScalarAve(pts[0].fX, pts[1].fX), | 216 center1.set(SkScalarAve(pts[0].fX, pts[1].fX), |
| 217 SkScalarAve(pts[0].fY, pts[1].fY)); | 217 SkScalarAve(pts[0].fY, pts[1].fY)); |
| 218 center0.set(center1.fX, center1.fY + radius1); | 218 center0.set(center1.fX, center1.fY + radius1); |
| 219 return SkGradientShader::CreateTwoPointConical(center0, radius0, | 219 return SkGradientShader::CreateTwoPointConical(center0, radius0, |
| 220 center1, radius1, | 220 center1, radius1, |
| 221 data.fColors, data.fPos, | 221 data.fColors, data.fPos, |
| 222 data.fCount, tm, mapper); | 222 data.fCount, tm, mapper); |
| 223 } | 223 } |
| 224 | 224 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 251 } | 251 } |
| 252 | 252 |
| 253 static SkShader* Make2ConicalInsideSmallRad(const SkPoint pts[2], const GradData
& data, | 253 static SkShader* Make2ConicalInsideSmallRad(const SkPoint pts[2], const GradData
& data, |
| 254 SkShader::TileMode tm, SkUnitMapper* mapper) { | 254 SkShader::TileMode tm, SkUnitMapper* mapper) { |
| 255 SkPoint center0, center1; | 255 SkPoint center0, center1; |
| 256 center0.set(SkScalarAve(pts[0].fX, pts[1].fX), | 256 center0.set(SkScalarAve(pts[0].fX, pts[1].fX), |
| 257 SkScalarAve(pts[0].fY, pts[1].fY)); | 257 SkScalarAve(pts[0].fY, pts[1].fY)); |
| 258 center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), | 258 center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), |
| 259 SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); | 259 SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); |
| 260 return SkGradientShader::CreateTwoPointConical( | 260 return SkGradientShader::CreateTwoPointConical( |
| 261 center0, 0.0000000000000000001
, | 261 center0, 0.0000000000000000001
f, |
| 262 center0, (pts[1].fX - pts[0].f
X) / 2, | 262 center0, (pts[1].fX - pts[0].f
X) / 2, |
| 263 data.fColors, data.fPos, data.
fCount, tm, mapper); | 263 data.fColors, data.fPos, data.
fCount, tm, mapper); |
| 264 } | 264 } |
| 265 | 265 |
| 266 typedef SkShader* (*GradMaker)(const SkPoint pts[2], const GradData& data, | 266 typedef SkShader* (*GradMaker)(const SkPoint pts[2], const GradData& data, |
| 267 SkShader::TileMode tm, SkUnitMapper* mapper); | 267 SkShader::TileMode tm, SkUnitMapper* mapper); |
| 268 | 268 |
| 269 static const GradMaker gGradMakersOutside[] = { | 269 static const GradMaker gGradMakersOutside[] = { |
| 270 Make2ConicalOutside, Make2ConicalOutsideFlip, | 270 Make2ConicalOutside, Make2ConicalOutsideFlip, |
| 271 Make2ConicalZeroRadOutside, Make2ConicalZeroRadFlipOutside | 271 Make2ConicalZeroRadOutside, Make2ConicalZeroRadFlipOutside |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 366 static GM* MyFactory1(void*) { return new ConicalGradientsGM(kInside_GradCaseTyp
e); } | 366 static GM* MyFactory1(void*) { return new ConicalGradientsGM(kInside_GradCaseTyp
e); } |
| 367 static GMRegistry reg1(MyFactory1); | 367 static GMRegistry reg1(MyFactory1); |
| 368 | 368 |
| 369 static GM* MyFactory2(void*) { return new ConicalGradientsGM(kOutside_GradCaseTy
pe); } | 369 static GM* MyFactory2(void*) { return new ConicalGradientsGM(kOutside_GradCaseTy
pe); } |
| 370 static GMRegistry reg2(MyFactory2); | 370 static GMRegistry reg2(MyFactory2); |
| 371 | 371 |
| 372 static GM* MyFactory3(void*) { return new ConicalGradientsGM(kEdge_GradCaseType)
; } | 372 static GM* MyFactory3(void*) { return new ConicalGradientsGM(kEdge_GradCaseType)
; } |
| 373 static GMRegistry reg3(MyFactory3); | 373 static GMRegistry reg3(MyFactory3); |
| 374 } | 374 } |
| 375 | 375 |
| OLD | NEW |