[SVGDom] Don't truncate opacity scalars

Round instead, for more accurate values.

R=robertphillips@google.com,stephana@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2284123003

Review-Url: https://codereview.chromium.org/2284123003
This commit is contained in:
fmalita 2016-08-29 05:54:42 -07:00 committed by Commit bot
parent 839d3ad854
commit a26cab0c53

View File

@ -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. // Commit the selected attribute to the paint cache.
template <SkSVGAttribute> template <SkSVGAttribute>
void commitToPaint(const SkSVGPresentationAttributes&, void commitToPaint(const SkSVGPresentationAttributes&,
@ -137,7 +141,7 @@ template <>
void commitToPaint<SkSVGAttribute::kFillOpacity>(const SkSVGPresentationAttributes& attrs, void commitToPaint<SkSVGAttribute::kFillOpacity>(const SkSVGPresentationAttributes& attrs,
const SkSVGLengthContext&, const SkSVGLengthContext&,
SkSVGPresentationContext* pctx) { SkSVGPresentationContext* pctx) {
pctx->fFillPaint.setAlpha(static_cast<uint8_t>(*attrs.fFillOpacity.get() * 255)); pctx->fFillPaint.setAlpha(opacity_to_alpha(*attrs.fFillOpacity.get()));
} }
template <> template <>
@ -164,7 +168,7 @@ template <>
void commitToPaint<SkSVGAttribute::kStrokeOpacity>(const SkSVGPresentationAttributes& attrs, void commitToPaint<SkSVGAttribute::kStrokeOpacity>(const SkSVGPresentationAttributes& attrs,
const SkSVGLengthContext&, const SkSVGLengthContext&,
SkSVGPresentationContext* pctx) { SkSVGPresentationContext* pctx) {
pctx->fStrokePaint.setAlpha(static_cast<uint8_t>(*attrs.fStrokeOpacity.get() * 255)); pctx->fStrokePaint.setAlpha(opacity_to_alpha(*attrs.fStrokeOpacity.get()));
} }
template <> template <>
@ -246,7 +250,7 @@ void SkSVGRenderContext::applyPresentationAttributes(const SkSVGPresentationAttr
if (auto* opacity = attrs.fOpacity.getMaybeNull()) { if (auto* opacity = attrs.fOpacity.getMaybeNull()) {
SkPaint opacityPaint; SkPaint opacityPaint;
opacityPaint.setAlpha(static_cast<uint8_t>(opacity->value() * 255)); opacityPaint.setAlpha(opacity_to_alpha(opacity->value()));
// Balanced in the destructor, via restoreToCount(). // Balanced in the destructor, via restoreToCount().
fCanvas->saveLayer(nullptr, &opacityPaint); fCanvas->saveLayer(nullptr, &opacityPaint);
} }