| Index: experimental/svg/model/SkSVGRenderContext.cpp
|
| diff --git a/experimental/svg/model/SkSVGRenderContext.cpp b/experimental/svg/model/SkSVGRenderContext.cpp
|
| index 4a1d77d6e450ea463cdd9210ac64a30041c36ceb..d8f762142f6350849c49ae5435857aa84330504e 100644
|
| --- a/experimental/svg/model/SkSVGRenderContext.cpp
|
| +++ b/experimental/svg/model/SkSVGRenderContext.cpp
|
| @@ -113,6 +113,10 @@ void applySvgPaint(const SkSVGPaint& svgPaint, SkPaint* p) {
|
| }
|
| }
|
|
|
| +inline uint8_t opacity_to_alpha(SkScalar o) {
|
| + return SkTo<uint8_t>(SkScalarRoundToInt(o * 255));
|
| +}
|
| +
|
| // Commit the selected attribute to the paint cache.
|
| template <SkSVGAttribute>
|
| void commitToPaint(const SkSVGPresentationAttributes&,
|
| @@ -137,7 +141,7 @@ template <>
|
| void commitToPaint<SkSVGAttribute::kFillOpacity>(const SkSVGPresentationAttributes& attrs,
|
| const SkSVGLengthContext&,
|
| SkSVGPresentationContext* pctx) {
|
| - pctx->fFillPaint.setAlpha(static_cast<uint8_t>(*attrs.fFillOpacity.get() * 255));
|
| + pctx->fFillPaint.setAlpha(opacity_to_alpha(*attrs.fFillOpacity.get()));
|
| }
|
|
|
| template <>
|
| @@ -164,7 +168,7 @@ template <>
|
| void commitToPaint<SkSVGAttribute::kStrokeOpacity>(const SkSVGPresentationAttributes& attrs,
|
| const SkSVGLengthContext&,
|
| SkSVGPresentationContext* pctx) {
|
| - pctx->fStrokePaint.setAlpha(static_cast<uint8_t>(*attrs.fStrokeOpacity.get() * 255));
|
| + pctx->fStrokePaint.setAlpha(opacity_to_alpha(*attrs.fStrokeOpacity.get()));
|
| }
|
|
|
| template <>
|
| @@ -246,7 +250,7 @@ void SkSVGRenderContext::applyPresentationAttributes(const SkSVGPresentationAttr
|
|
|
| if (auto* opacity = attrs.fOpacity.getMaybeNull()) {
|
| SkPaint opacityPaint;
|
| - opacityPaint.setAlpha(static_cast<uint8_t>(opacity->value() * 255));
|
| + opacityPaint.setAlpha(opacity_to_alpha(opacity->value()));
|
| // Balanced in the destructor, via restoreToCount().
|
| fCanvas->saveLayer(nullptr, &opacityPaint);
|
| }
|
|
|