[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:
parent
839d3ad854
commit
a26cab0c53
@ -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);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user