summaryrefslogtreecommitdiff
path: root/Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp')
-rw-r--r--Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp24
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)