[webkitgtk3/f17] Fix SVG clipping
Peter Hatina
phatina at fedoraproject.org
Fri Jun 8 07:00:33 UTC 2012
commit 9708b4770c6d895aaa006d9362d0772db47885e7
Author: Peter Hatina <phatina at redhat.com>
Date: Fri Jun 8 09:01:30 2012 +0200
Fix SVG clipping
webkit-svg-clipping.patch | 94 +++++++++++++++++++++++++++++++++++++++++++++
webkitgtk3.spec | 7 +++-
2 files changed, 100 insertions(+), 1 deletions(-)
---
diff --git a/webkit-svg-clipping.patch b/webkit-svg-clipping.patch
new file mode 100644
index 0000000..39974da
--- /dev/null
+++ b/webkit-svg-clipping.patch
@@ -0,0 +1,94 @@
+diff --git a/Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp b/Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp
+index 34db57d..98cad17 100644
+--- a/Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp
++++ b/Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp
+@@ -155,7 +155,8 @@ bool RenderSVGResourceClipper::pathOnlyClipping(GraphicsContext* context, const
+ bool RenderSVGResourceClipper::applyClippingToContext(RenderObject* object, const FloatRect& objectBoundingBox,
+ const FloatRect& repaintRect, GraphicsContext* context)
+ {
+- if (!m_clipper.contains(object))
++ bool missingClipperData = !m_clipper.contains(object);
++ if (missingClipperData)
+ m_clipper.set(object, new ClipperData);
+
+ bool shouldCreateClipData = false;
+@@ -201,7 +202,7 @@ bool RenderSVGResourceClipper::applyClippingToContext(RenderObject* object, cons
+ if (!clipperData->clipMaskImage)
+ return false;
+
+- SVGImageBufferTools::clipToImageBuffer(context, absoluteTransform, repaintRect, clipperData->clipMaskImage);
++ SVGImageBufferTools::clipToImageBuffer(context, absoluteTransform, repaintRect, clipperData->clipMaskImage, missingClipperData);
+ return true;
+ }
+
+diff --git a/Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp b/Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp
+index ead5510..1a1d5a0 100644
+--- a/Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp
++++ b/Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp
+@@ -98,7 +98,7 @@ static inline AffineTransform clipToTextMask(GraphicsContext* context,
+ SVGImageBufferTools::calculateTransformationToOutermostSVGCoordinateSystem(textRootBlock, absoluteTransform);
+
+ targetRect = textRootBlock->repaintRectInLocalCoordinates();
+- SVGImageBufferTools::clipToImageBuffer(context, absoluteTransform, targetRect, imageBuffer);
++ SVGImageBufferTools::clipToImageBuffer(context, absoluteTransform, targetRect, imageBuffer, false);
+
+ AffineTransform matrix;
+ if (boundingBoxMode) {
+diff --git a/Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp b/Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp
+index bf59549..f7a35e3 100644
+--- a/Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp
++++ b/Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp
+@@ -86,7 +86,8 @@ bool RenderSVGResourceMasker::applyResource(RenderObject* object, RenderStyle*,
+ ASSERT(context);
+ ASSERT_UNUSED(resourceMode, resourceMode == ApplyToDefaultMode);
+
+- if (!m_masker.contains(object))
++ bool missingMaskerData = !m_masker.contains(object);
++ if (missingMaskerData)
+ m_masker.set(object, new MaskerData);
+
+ MaskerData* maskerData = m_masker.get(object);
+@@ -116,7 +117,7 @@ bool RenderSVGResourceMasker::applyResource(RenderObject* object, RenderStyle*,
+ if (!maskerData->maskImage)
+ return false;
+
+- SVGImageBufferTools::clipToImageBuffer(context, absoluteTransform, repaintRect, maskerData->maskImage);
++ SVGImageBufferTools::clipToImageBuffer(context, absoluteTransform, repaintRect, maskerData->maskImage, missingMaskerData);
+ return true;
+ }
+
+diff --git a/Source/WebCore/rendering/svg/SVGImageBufferTools.cpp b/Source/WebCore/rendering/svg/SVGImageBufferTools.cpp
+index ef97a28..9fa6d68 100644
+--- a/Source/WebCore/rendering/svg/SVGImageBufferTools.cpp
++++ b/Source/WebCore/rendering/svg/SVGImageBufferTools.cpp
+@@ -121,7 +121,7 @@ void SVGImageBufferTools::renderSubtreeToImageBuffer(ImageBuffer* image, RenderO
+ contentTransformation = savedContentTransformation;
+ }
+
+-void SVGImageBufferTools::clipToImageBuffer(GraphicsContext* context, const AffineTransform& absoluteTransform, const FloatRect& targetRect, OwnPtr<ImageBuffer>& imageBuffer)
++void SVGImageBufferTools::clipToImageBuffer(GraphicsContext* context, const AffineTransform& absoluteTransform, const FloatRect& targetRect, OwnPtr<ImageBuffer>& imageBuffer, bool safeToClear)
+ {
+ ASSERT(context);
+ ASSERT(imageBuffer);
+@@ -136,7 +136,7 @@ void SVGImageBufferTools::clipToImageBuffer(GraphicsContext* context, const Affi
+
+ // When nesting resources, with objectBoundingBox as content unit types, there's no use in caching the
+ // resulting image buffer as the parent resource already caches the result.
+- if (!currentContentTransformation().isIdentity())
++ if (safeToClear && !currentContentTransformation().isIdentity())
+ imageBuffer.clear();
+ }
+
+diff --git a/Source/WebCore/rendering/svg/SVGImageBufferTools.h b/Source/WebCore/rendering/svg/SVGImageBufferTools.h
+index dce80cc..b71b10d 100644
+--- a/Source/WebCore/rendering/svg/SVGImageBufferTools.h
++++ b/Source/WebCore/rendering/svg/SVGImageBufferTools.h
+@@ -42,7 +42,7 @@ public:
+ static bool createImageBufferForPattern(const FloatRect& absoluteTargetRect, const FloatRect& clampedAbsoluteTargetRect, OwnPtr<ImageBuffer>&, ColorSpace, RenderingMode);
+
+ static void renderSubtreeToImageBuffer(ImageBuffer*, RenderObject*, const AffineTransform&);
+- static void clipToImageBuffer(GraphicsContext*, const AffineTransform& absoluteTransform, const FloatRect& targetRect, OwnPtr<ImageBuffer>&);
++ static void clipToImageBuffer(GraphicsContext*, const AffineTransform& absoluteTransform, const FloatRect& targetRect, OwnPtr<ImageBuffer>&, bool safeToClear);
+
+ static void calculateTransformationToOutermostSVGCoordinateSystem(const RenderObject*, AffineTransform& absoluteTransform);
+ static IntSize clampedAbsoluteSize(const IntSize&);
diff --git a/webkitgtk3.spec b/webkitgtk3.spec
index eac5345..4220719 100644
--- a/webkitgtk3.spec
+++ b/webkitgtk3.spec
@@ -7,7 +7,7 @@
Name: webkitgtk3
Version: 1.8.1
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: GTK+ Web content engine library
Group: Development/Libraries
@@ -18,6 +18,7 @@ Source0: http://webkitgtk.org/releases/webkit-%{version}.tar.xz
Patch1: webkit-1.3.4-no-execmem.patch
Patch2: webkit-1.1.14-nspluginwrapper.patch
+Patch3: webkit-svg-clipping.patch
BuildRequires: bison
BuildRequires: chrpath
@@ -82,6 +83,7 @@ This package contains developer documentation for %{name}.
# tbzatek - doesn't apply, is this fixed?
# %patch1 -p1 -b .no-execmem
%patch2 -p1 -b .nspluginwrapper
+%patch3 -p1 -b .svg-clipping
%build
%ifarch s390 %{arm} ppc
@@ -185,6 +187,9 @@ glib-compile-schemas %{_datadir}/glib-2.0/schemas &>/dev/null || :
%changelog
+* Fri Jun 08 2012 Peter Hatina <phatina at redhat.com> - 1.8.1-3
+- Fix svg clipping
+
* Mon May 14 2012 Peter Robinson <pbrobinson at fedoraproject.org> - 1.8.1-2
- Explicitly disable JIT on ARM as it's not currently stable with JS heavy pages
More information about the scm-commits
mailing list