| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 #include "gm.h" | 7 #include "gm.h" |
| 8 #include "SkArithmeticMode.h" | 8 #include "SkArithmeticMode.h" |
| 9 #include "SkPath.h" | 9 #include "SkPath.h" |
| 10 #include "SkShader.h" | 10 #include "SkShader.h" |
| (...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 203 if (mode == SkXfermode::kPlus_Mode) { | 203 if (mode == SkXfermode::kPlus_Mode) { |
| 204 // Check for overflow, otherwise we might get confusing AA artifacts
. | 204 // Check for overflow, otherwise we might get confusing AA artifacts
. |
| 205 int maxSum = SkTMax(SkTMax(SkColorGetA(kBGColor) + SkColorGetA(color
), | 205 int maxSum = SkTMax(SkTMax(SkColorGetA(kBGColor) + SkColorGetA(color
), |
| 206 SkColorGetR(kBGColor) + SkColorGetR(color
)), | 206 SkColorGetR(kBGColor) + SkColorGetR(color
)), |
| 207 SkTMax(SkColorGetG(kBGColor) + SkColorGetG(color
), | 207 SkTMax(SkColorGetG(kBGColor) + SkColorGetG(color
), |
| 208 SkColorGetB(kBGColor) + SkColorGetB(color
))); | 208 SkColorGetB(kBGColor) + SkColorGetB(color
))); |
| 209 | 209 |
| 210 if (maxSum > 255) { | 210 if (maxSum > 255) { |
| 211 SkPaint dimPaint; | 211 SkPaint dimPaint; |
| 212 dimPaint.setAntiAlias(false); | 212 dimPaint.setAntiAlias(false); |
| 213 dimPaint.setXfermode(SkXfermode::Create(SkXfermode::kDstIn_Mode)
); | 213 dimPaint.setXfermode(SkXfermode::Make(SkXfermode::kDstIn_Mode)); |
| 214 if (255 != paint->getAlpha()) { | 214 if (255 != paint->getAlpha()) { |
| 215 // Dim the src and dst colors. | 215 // Dim the src and dst colors. |
| 216 dimPaint.setARGB(255 * 255 / maxSum, 0, 0, 0); | 216 dimPaint.setARGB(255 * 255 / maxSum, 0, 0, 0); |
| 217 paint->setAlpha(255 * paint->getAlpha() / maxSum); | 217 paint->setAlpha(255 * paint->getAlpha() / maxSum); |
| 218 } else { | 218 } else { |
| 219 // Just clear the dst, we need to preserve the paint's opaci
ty. | 219 // Just clear the dst, we need to preserve the paint's opaci
ty. |
| 220 dimPaint.setARGB(0, 0, 0, 0); | 220 dimPaint.setARGB(0, 0, 0, 0); |
| 221 } | 221 } |
| 222 canvas->drawRectCoords(-kShapeSpacing/2, -kShapeSpacing/2, | 222 canvas->drawRectCoords(-kShapeSpacing/2, -kShapeSpacing/2, |
| 223 kShapeSpacing/2 + 3 * kShapeTypeSpacing, | 223 kShapeSpacing/2 + 3 * kShapeTypeSpacing, |
| 224 kShapeSpacing/2, dimPaint); | 224 kShapeSpacing/2, dimPaint); |
| 225 } | 225 } |
| 226 } | 226 } |
| 227 } | 227 } |
| 228 | 228 |
| 229 void drawShape(SkCanvas* canvas, Shape shape, const SkPaint& paint, SkXfermo
de::Mode mode) { | 229 void drawShape(SkCanvas* canvas, Shape shape, const SkPaint& paint, SkXfermo
de::Mode mode) { |
| 230 SkPaint shapePaint(paint); | 230 SkPaint shapePaint(paint); |
| 231 shapePaint.setAntiAlias(kSquare_Shape != shape); | 231 shapePaint.setAntiAlias(kSquare_Shape != shape); |
| 232 | 232 |
| 233 SkAutoTUnref<SkXfermode> xfermode; | 233 sk_sp<SkXfermode> xfermode; |
| 234 if (mode <= SkXfermode::kLastMode) { | 234 if (mode <= SkXfermode::kLastMode) { |
| 235 xfermode.reset(SkXfermode::Create(mode)); | 235 xfermode = SkXfermode::Make(mode); |
| 236 } else { | 236 } else { |
| 237 xfermode.reset(SkArithmeticMode::Create(+1.0f, +0.25f, -0.5f, +0.1f)
); | 237 xfermode = SkArithmeticMode::Make(+1.0f, +0.25f, -0.5f, +0.1f); |
| 238 } | 238 } |
| 239 shapePaint.setXfermode(xfermode); | 239 shapePaint.setXfermode(std::move(xfermode)); |
| 240 | 240 |
| 241 switch (shape) { | 241 switch (shape) { |
| 242 case kSquare_Shape: | 242 case kSquare_Shape: |
| 243 canvas->drawRectCoords(-kShapeSize/2, -kShapeSize/2, kShapeSize/
2, kShapeSize/2, | 243 canvas->drawRectCoords(-kShapeSize/2, -kShapeSize/2, kShapeSize/
2, kShapeSize/2, |
| 244 shapePaint); | 244 shapePaint); |
| 245 break; | 245 break; |
| 246 | 246 |
| 247 case kDiamond_Shape: | 247 case kDiamond_Shape: |
| 248 canvas->save(); | 248 canvas->save(); |
| 249 canvas->rotate(45); | 249 canvas->rotate(45); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 275 | 275 |
| 276 typedef GM INHERITED; | 276 typedef GM INHERITED; |
| 277 }; | 277 }; |
| 278 | 278 |
| 279 ////////////////////////////////////////////////////////////////////////////// | 279 ////////////////////////////////////////////////////////////////////////////// |
| 280 | 280 |
| 281 static GM* MyFactory(void*) { return new AAXfermodesGM; } | 281 static GM* MyFactory(void*) { return new AAXfermodesGM; } |
| 282 static GMRegistry reg(MyFactory); | 282 static GMRegistry reg(MyFactory); |
| 283 | 283 |
| 284 } | 284 } |
| OLD | NEW |