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.cpp33
1 files changed, 12 insertions, 21 deletions
diff --git a/Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp b/Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp
index e02fab47b..f0d6744c0 100644
--- a/Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp
+++ b/Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp
@@ -18,8 +18,6 @@
*/
#include "config.h"
-
-#if ENABLE(SVG)
#include "RenderSVGResourceMasker.h"
#include "Element.h"
@@ -31,10 +29,8 @@
namespace WebCore {
-RenderSVGResourceType RenderSVGResourceMasker::s_resourceType = MaskerResourceType;
-
-RenderSVGResourceMasker::RenderSVGResourceMasker(SVGMaskElement& element, PassRef<RenderStyle> style)
- : RenderSVGResourceContainer(element, std::move(style))
+RenderSVGResourceMasker::RenderSVGResourceMasker(SVGMaskElement& element, RenderStyle&& style)
+ : RenderSVGResourceContainer(element, WTFMove(style))
{
}
@@ -50,7 +46,7 @@ void RenderSVGResourceMasker::removeAllClientsFromCache(bool markForInvalidation
markAllClientsForInvalidation(markForInvalidation ? LayoutAndBoundariesInvalidation : ParentOnlyInvalidation);
}
-void RenderSVGResourceMasker::removeClientFromCache(RenderObject& client, bool markForInvalidation)
+void RenderSVGResourceMasker::removeClientFromCache(RenderElement& client, bool markForInvalidation)
{
m_masker.remove(&client);
@@ -67,34 +63,31 @@ 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, absoluteTransform);
-
+ AffineTransform absoluteTransform = SVGRenderingContext::calculateTransformationToOutermostCoordinateSystem(renderer);
FloatRect repaintRect = renderer.repaintRectInLocalCoordinates();
if (!maskerData->maskImage && !repaintRect.isEmpty()) {
const SVGRenderStyle& svgStyle = style().svgStyle();
- ColorSpace colorSpace = svgStyle.colorInterpolation() == CI_LINEARRGB ? ColorSpaceLinearRGB : ColorSpaceDeviceRGB;
- if (!SVGRenderingContext::createImageBuffer(repaintRect, absoluteTransform, maskerData->maskImage, colorSpace, Unaccelerated))
+ ColorSpace colorSpace = svgStyle.colorInterpolation() == CI_LINEARRGB ? ColorSpaceLinearRGB : ColorSpaceSRGB;
+ // 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)
return false;
- if (!drawContentIntoMaskImage(maskerData, colorSpace, &renderer)) {
+ if (!drawContentIntoMaskImage(maskerData, colorSpace, &renderer))
maskerData->maskImage.reset();
- }
}
if (!maskerData->maskImage)
return false;
- SVGRenderingContext::clipToImageBuffer(context, absoluteTransform, repaintRect, maskerData->maskImage, missingMaskerData);
+ SVGRenderingContext::clipToImageBuffer(*context, absoluteTransform, repaintRect, maskerData->maskImage, missingMaskerData);
return true;
}
bool RenderSVGResourceMasker::drawContentIntoMaskImage(MaskerData* maskerData, ColorSpace colorSpace, RenderObject* object)
{
- GraphicsContext* maskImageContext = maskerData->maskImage->context();
- ASSERT(maskImageContext);
+ GraphicsContext& maskImageContext = maskerData->maskImage->context();
// Eventually adjust the mask image context according to the target objectBoundingBox.
AffineTransform maskContentTransformation;
@@ -102,7 +95,7 @@ bool RenderSVGResourceMasker::drawContentIntoMaskImage(MaskerData* maskerData, C
FloatRect objectBoundingBox = object->objectBoundingBox();
maskContentTransformation.translate(objectBoundingBox.x(), objectBoundingBox.y());
maskContentTransformation.scaleNonUniform(objectBoundingBox.width(), objectBoundingBox.height());
- maskImageContext->concatCTM(maskContentTransformation);
+ maskImageContext.concatCTM(maskContentTransformation);
}
// Draw the content into the ImageBuffer.
@@ -169,5 +162,3 @@ FloatRect RenderSVGResourceMasker::resourceBoundingBox(const RenderObject& objec
}
}
-
-#endif // ENABLE(SVG)