diff options
-rw-r--r-- | experimental/svg/model/SkSVGAttribute.h | 3 | ||||
-rw-r--r-- | experimental/svg/model/SkSVGDOM.cpp | 1 | ||||
-rw-r--r-- | experimental/svg/model/SkSVGNode.cpp | 10 | ||||
-rw-r--r-- | experimental/svg/model/SkSVGNode.h | 1 | ||||
-rw-r--r-- | experimental/svg/model/SkSVGRenderContext.cpp | 9 | ||||
-rw-r--r-- | infra/bots/recipes/swarm_test.py | 10 |
6 files changed, 34 insertions, 0 deletions
diff --git a/experimental/svg/model/SkSVGAttribute.h b/experimental/svg/model/SkSVGAttribute.h index d2f0cf2600..cc3e7a073c 100644 --- a/experimental/svg/model/SkSVGAttribute.h +++ b/experimental/svg/model/SkSVGAttribute.h @@ -18,6 +18,7 @@ enum class SkSVGAttribute { kFill, kFillOpacity, kHeight, + kOpacity, kPoints, kRx, kRy, @@ -48,6 +49,8 @@ struct SkSVGPresentationAttributes { SkTLazy<SkSVGLineJoin> fStrokeLineJoin; SkTLazy<SkSVGNumberType> fStrokeOpacity; SkTLazy<SkSVGLength> fStrokeWidth; + + SkTLazy<SkSVGNumberType> fOpacity; }; #endif // SkSVGAttribute_DEFINED diff --git a/experimental/svg/model/SkSVGDOM.cpp b/experimental/svg/model/SkSVGDOM.cpp index c9d9e93f65..8e2667ad20 100644 --- a/experimental/svg/model/SkSVGDOM.cpp +++ b/experimental/svg/model/SkSVGDOM.cpp @@ -217,6 +217,7 @@ SortedDictionaryEntry<AttrParseInfo> gAttributeParseInfo[] = { { "fill" , { SkSVGAttribute::kFill , SetPaintAttribute }}, { "fill-opacity" , { SkSVGAttribute::kFillOpacity , SetNumberAttribute }}, { "height" , { SkSVGAttribute::kHeight , SetLengthAttribute }}, + { "opacity" , { SkSVGAttribute::kOpacity , SetNumberAttribute }}, { "points" , { SkSVGAttribute::kPoints , SetPointsAttribute }}, { "rx" , { SkSVGAttribute::kRx , SetLengthAttribute }}, { "ry" , { SkSVGAttribute::kRy , SetLengthAttribute }}, diff --git a/experimental/svg/model/SkSVGNode.cpp b/experimental/svg/model/SkSVGNode.cpp index a039b59ff1..5a73ace548 100644 --- a/experimental/svg/model/SkSVGNode.cpp +++ b/experimental/svg/model/SkSVGNode.cpp @@ -42,6 +42,11 @@ void SkSVGNode::setFillOpacity(const SkSVGNumberType& opacity) { SkSVGNumberType(SkTPin<SkScalar>(opacity.value(), 0, 1))); } +void SkSVGNode::setOpacity(const SkSVGNumberType& opacity) { + fPresentationAttributes.fOpacity.set( + SkSVGNumberType(SkTPin<SkScalar>(opacity.value(), 0, 1))); +} + void SkSVGNode::setStroke(const SkSVGPaint& svgPaint) { fPresentationAttributes.fStroke.set(svgPaint); } @@ -67,6 +72,11 @@ void SkSVGNode::onSetAttribute(SkSVGAttribute attr, const SkSVGValue& v) { this->setFillOpacity(*opacity); } break; + case SkSVGAttribute::kOpacity: + if (const SkSVGNumberValue* opacity = v.as<SkSVGNumberValue>()) { + this->setOpacity(*opacity); + } + break; case SkSVGAttribute::kStroke: if (const SkSVGPaintValue* paint = v.as<SkSVGPaintValue>()) { this->setStroke(*paint); diff --git a/experimental/svg/model/SkSVGNode.h b/experimental/svg/model/SkSVGNode.h index 8ffc6f9769..0f95d77a6f 100644 --- a/experimental/svg/model/SkSVGNode.h +++ b/experimental/svg/model/SkSVGNode.h @@ -39,6 +39,7 @@ public: void setFill(const SkSVGPaint&); void setFillOpacity(const SkSVGNumberType&); + void setOpacity(const SkSVGNumberType&); void setStroke(const SkSVGPaint&); void setStrokeOpacity(const SkSVGNumberType&); void setStrokeWidth(const SkSVGLength&); diff --git a/experimental/svg/model/SkSVGRenderContext.cpp b/experimental/svg/model/SkSVGRenderContext.cpp index ee92c47d54..8ad881429a 100644 --- a/experimental/svg/model/SkSVGRenderContext.cpp +++ b/experimental/svg/model/SkSVGRenderContext.cpp @@ -224,6 +224,15 @@ void SkSVGRenderContext::applyPresentationAttributes(const SkSVGPresentationAttr ApplyLazyInheritedAttribute(StrokeWidth); #undef ApplyLazyInheritedAttribute + + // Uninherited attributes. Only apply to the current context. + + if (auto* opacity = attrs.fOpacity.getMaybeNull()) { + SkPaint opacityPaint; + opacityPaint.setAlpha(static_cast<uint8_t>(opacity->value() * 255)); + // Balanced in the destructor, via restoreToCount(). + fCanvas->saveLayer(nullptr, &opacityPaint); + } } const SkPaint* SkSVGRenderContext::fillPaint() const { diff --git a/infra/bots/recipes/swarm_test.py b/infra/bots/recipes/swarm_test.py index 2be11951f2..5b9d993f2e 100644 --- a/infra/bots/recipes/swarm_test.py +++ b/infra/bots/recipes/swarm_test.py @@ -259,6 +259,16 @@ def dm_flags(bot): blacklist.extend([ '2ndpic-8888', 'gm', '_', test]) blacklist.extend(['serialize-8888', 'gm', '_', test]) + # SaveLayerDrawRestoreNooper diffs + for test in ['car.svg', + 'gallardo.svg', + 'rg1024_green_grapes.svg', + 'Seal_of_Kansas.svg']: + blacklist.extend([ 'sp-8888', 'svg', '_', test]) + blacklist.extend([ 'pic-8888', 'svg', '_', test]) + blacklist.extend([ '2ndpic-8888', 'svg', '_', test]) + blacklist.extend(['serialize-8888', 'svg', '_', test]) + # Extensions for RAW images r = ["arw", "cr2", "dng", "nef", "nrw", "orf", "raf", "rw2", "pef", "srw", "ARW", "CR2", "DNG", "NEF", "NRW", "ORF", "RAF", "RW2", "PEF", "SRW"] |