diff options
Diffstat (limited to 'Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp')
| -rw-r--r-- | Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp b/Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp index 0032e051a..e02fab47b 100644 --- a/Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp +++ b/Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp @@ -18,6 +18,8 @@ */ #include "config.h" + +#if ENABLE(SVG) #include "RenderSVGResourceMasker.h" #include "Element.h" @@ -29,8 +31,10 @@ namespace WebCore { -RenderSVGResourceMasker::RenderSVGResourceMasker(SVGMaskElement& element, Ref<RenderStyle>&& style) - : RenderSVGResourceContainer(element, WTF::move(style)) +RenderSVGResourceType RenderSVGResourceMasker::s_resourceType = MaskerResourceType; + +RenderSVGResourceMasker::RenderSVGResourceMasker(SVGMaskElement& element, PassRef<RenderStyle> style) + : RenderSVGResourceContainer(element, std::move(style)) { } @@ -46,7 +50,7 @@ void RenderSVGResourceMasker::removeAllClientsFromCache(bool markForInvalidation markAllClientsForInvalidation(markForInvalidation ? LayoutAndBoundariesInvalidation : ParentOnlyInvalidation); } -void RenderSVGResourceMasker::removeClientFromCache(RenderElement& client, bool markForInvalidation) +void RenderSVGResourceMasker::removeClientFromCache(RenderObject& client, bool markForInvalidation) { m_masker.remove(&client); @@ -63,19 +67,21 @@ bool RenderSVGResourceMasker::applyResource(RenderElement& renderer, const Rende m_masker.set(&renderer, std::make_unique<MaskerData>()); MaskerData* maskerData = m_masker.get(&renderer); - AffineTransform absoluteTransform = SVGRenderingContext::calculateTransformationToOutermostCoordinateSystem(renderer); + + AffineTransform absoluteTransform; + SVGRenderingContext::calculateTransformationToOutermostCoordinateSystem(&renderer, absoluteTransform); + FloatRect repaintRect = renderer.repaintRectInLocalCoordinates(); if (!maskerData->maskImage && !repaintRect.isEmpty()) { const SVGRenderStyle& svgStyle = style().svgStyle(); ColorSpace colorSpace = svgStyle.colorInterpolation() == CI_LINEARRGB ? ColorSpaceLinearRGB : ColorSpaceDeviceRGB; - // FIXME (149470): This image buffer should not be unconditionally unaccelerated. Making it match the context breaks alpha masking, though. - maskerData->maskImage = SVGRenderingContext::createImageBuffer(repaintRect, absoluteTransform, colorSpace, Unaccelerated); - if (!maskerData->maskImage) + if (!SVGRenderingContext::createImageBuffer(repaintRect, absoluteTransform, maskerData->maskImage, colorSpace, Unaccelerated)) return false; - if (!drawContentIntoMaskImage(maskerData, colorSpace, &renderer)) + if (!drawContentIntoMaskImage(maskerData, colorSpace, &renderer)) { maskerData->maskImage.reset(); + } } if (!maskerData->maskImage) @@ -163,3 +169,5 @@ FloatRect RenderSVGResourceMasker::resourceBoundingBox(const RenderObject& objec } } + +#endif // ENABLE(SVG) |
