Title: [195662] releases/WebKitGTK/webkit-2.10
Revision
195662
Author
[email protected]
Date
2016-01-27 04:28:26 -0800 (Wed, 27 Jan 2016)

Log Message

Merge r195397 - http://victordarras.fr/cssgame/ doesn't work in Safari.
https://bugs.webkit.org/show_bug.cgi?id=153285
<rdar://problem/24212369>

Reviewed by Tim Horton.

This patch adds support for hittesting ClipPathOperation::Reference.

Source/WebCore:

Tests: svg/clip-path/hittest-clip-path-reference-miss.html

* rendering/RenderBlock.cpp:
(WebCore::RenderBlock::nodeAtPoint):
* rendering/RenderObject.h:
(WebCore::RenderObject::isSVGResourceClipper):
* rendering/svg/RenderSVGResourceClipper.h:
(isType):

LayoutTests:

* svg/clip-path/hittest-clip-path-reference-miss-expected.html: Added.
* svg/clip-path/hittest-clip-path-reference-miss.html: Added.

Modified Paths

Added Paths

Diff

Modified: releases/WebKitGTK/webkit-2.10/LayoutTests/ChangeLog (195661 => 195662)


--- releases/WebKitGTK/webkit-2.10/LayoutTests/ChangeLog	2016-01-27 10:32:59 UTC (rev 195661)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/ChangeLog	2016-01-27 12:28:26 UTC (rev 195662)
@@ -1,3 +1,16 @@
+2016-01-20  Zalan Bujtas  <[email protected]>
+
+        http://victordarras.fr/cssgame/ doesn't work in Safari.
+        https://bugs.webkit.org/show_bug.cgi?id=153285
+        <rdar://problem/24212369>
+
+        Reviewed by Tim Horton.
+
+        This patch adds support for hittesting ClipPathOperation::Reference.
+
+        * svg/clip-path/hittest-clip-path-reference-miss-expected.html: Added.
+        * svg/clip-path/hittest-clip-path-reference-miss.html: Added.
+
 2016-01-15  Jiewen Tan  <[email protected]>
 
         FrameLoaderClient::didReceiveServerRedirectForProvisionalLoadForFrame() is never called when loading a main resource from the memory cache

Added: releases/WebKitGTK/webkit-2.10/LayoutTests/svg/clip-path/hittest-clip-path-reference-miss-expected.html (0 => 195662)


--- releases/WebKitGTK/webkit-2.10/LayoutTests/svg/clip-path/hittest-clip-path-reference-miss-expected.html	                        (rev 0)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/svg/clip-path/hittest-clip-path-reference-miss-expected.html	2016-01-27 12:28:26 UTC (rev 195662)
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>This tests that we properly hittest boxes with reference clip path.</title>
+<style>
+div {
+  position: absolute;
+  top: 0px;
+  left: 0px;
+  width: 200px;
+  height: 200px;
+  background: green;
+}
+</style>
+</head>
+<body>
+<div></div>
+</body>
+</html>
\ No newline at end of file

Added: releases/WebKitGTK/webkit-2.10/LayoutTests/svg/clip-path/hittest-clip-path-reference-miss.html (0 => 195662)


--- releases/WebKitGTK/webkit-2.10/LayoutTests/svg/clip-path/hittest-clip-path-reference-miss.html	                        (rev 0)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/svg/clip-path/hittest-clip-path-reference-miss.html	2016-01-27 12:28:26 UTC (rev 195662)
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>This tests that we properly hittest boxes with reference clip path.</title>
+<style>
+svg { 
+  position: absolute;
+  top: -10000px;
+  left: -10000px;
+}
+
+div {
+  width: 200px;
+  height: 200px;
+  background: green;
+}
+
+.greenbox {
+  position: absolute;
+  left: 0px;
+  top: 0px;
+  z-index: -1;
+}
+
+.clipbox {
+  -webkit-clip-path: url('#svgreference');
+}
+
+.clipbox:hover ~ .greenbox
+{
+  background: blue;
+}
+</style>
+</head>
+<body>
+<svg width="200px" height="200px" viewBox="0 0 200 200" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+  <clippath id=svgreference><path d="M50 50 L150 50 L150 150 L50 150 Z"></path></clippath>
+</svg>
+<div id=hittestthis class=clipbox></div>
+<div class=greenbox></div>
+<script>
+  if (window.eventSender)
+    eventSender.mouseMoveTo(10, 10);
+</script>
+</body>
+</html>
\ No newline at end of file

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/ChangeLog (195661 => 195662)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/ChangeLog	2016-01-27 10:32:59 UTC (rev 195661)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/ChangeLog	2016-01-27 12:28:26 UTC (rev 195662)
@@ -1,3 +1,22 @@
+2016-01-20  Zalan Bujtas  <[email protected]>
+
+        http://victordarras.fr/cssgame/ doesn't work in Safari.
+        https://bugs.webkit.org/show_bug.cgi?id=153285
+        <rdar://problem/24212369>
+
+        Reviewed by Tim Horton.
+
+        This patch adds support for hittesting ClipPathOperation::Reference.
+
+        Tests: svg/clip-path/hittest-clip-path-reference-miss.html
+
+        * rendering/RenderBlock.cpp:
+        (WebCore::RenderBlock::nodeAtPoint):
+        * rendering/RenderObject.h:
+        (WebCore::RenderObject::isSVGResourceClipper):
+        * rendering/svg/RenderSVGResourceClipper.h:
+        (isType):
+
 2016-01-19  Konstantin Tokarev  <[email protected]>
 
         Fixed compilation of AXObjectCache in case of !HAVE(ACCESSIBILITY).

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/RenderBlock.cpp (195661 => 195662)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/RenderBlock.cpp	2016-01-27 10:32:59 UTC (rev 195661)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/RenderBlock.cpp	2016-01-27 12:28:26 UTC (rev 195662)
@@ -59,6 +59,7 @@
 #include "RenderNamedFlowFragment.h"
 #include "RenderNamedFlowThread.h"
 #include "RenderRegion.h"
+#include "RenderSVGResourceClipper.h"
 #include "RenderTableCell.h"
 #include "RenderTextFragment.h"
 #include "RenderTheme.h"
@@ -2460,8 +2461,18 @@
                 return false;
             break;
         }
-        // FIXME: handle Reference/Box
-        case ClipPathOperation::Reference:
+        case ClipPathOperation::Reference: {
+            const auto& referenceClipPathOperation = downcast<ReferenceClipPathOperation>(*style().clipPath());
+            auto* element = document().getElementById(referenceClipPathOperation.fragment());
+            if (!element || !element->renderer())
+                break;
+            if (!is<SVGClipPathElement>(*element))
+                break;
+            auto& clipper = downcast<RenderSVGResourceClipper>(*element->renderer());
+            if (!clipper.hitTestClipContent(FloatRect(borderBoxRect()), FloatPoint(locationInContainer.point() - localOffset)))
+                return false;
+            break;
+        }
         case ClipPathOperation::Box:
             break;
         }

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/RenderObject.h (195661 => 195662)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/RenderObject.h	2016-01-27 10:32:59 UTC (rev 195661)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/RenderObject.h	2016-01-27 12:28:26 UTC (rev 195662)
@@ -437,6 +437,7 @@
     virtual bool isSVGForeignObject() const { return false; }
     virtual bool isSVGResourceContainer() const { return false; }
     virtual bool isSVGResourceFilter() const { return false; }
+    virtual bool isSVGResourceClipper() const { return false; }
     virtual bool isSVGResourceFilterPrimitive() const { return false; }
 
     // FIXME: Those belong into a SVG specific base-class for all renderers (see above)

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/svg/RenderSVGResourceClipper.h (195661 => 195662)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/svg/RenderSVGResourceClipper.h	2016-01-27 10:32:59 UTC (rev 195661)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/svg/RenderSVGResourceClipper.h	2016-01-27 12:28:26 UTC (rev 195662)
@@ -63,6 +63,7 @@
     void element() const = delete;
 
     virtual const char* renderName() const override { return "RenderSVGResourceClipper"; }
+    bool isSVGResourceClipper() const override { return true; }
 
     bool pathOnlyClipping(GraphicsContext*, const AffineTransform&, const FloatRect&);
     bool drawContentIntoMaskImage(const ClipperMaskImage&, const FloatRect& objectBoundingBox);
@@ -75,6 +76,9 @@
 
 }
 
-SPECIALIZE_TYPE_TRAITS_RENDER_SVG_RESOURCE(RenderSVGResourceClipper, ClipperResourceType)
+SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::RenderSVGResourceClipper)
+static bool isType(const WebCore::RenderObject& renderer) { return renderer.isSVGResourceClipper(); }
+static bool isType(const WebCore::RenderSVGResource& resource) { return resource.resourceType() == WebCore::ClipperResourceType; }
+SPECIALIZE_TYPE_TRAITS_END()
 
 #endif
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to