Index: Source/core/layout/LayoutBlock.cpp |
diff --git a/Source/core/layout/LayoutBlock.cpp b/Source/core/layout/LayoutBlock.cpp |
index 116c979367c9b7c7fc0eb820d6eeff761531ee70..071644dcf7896e3e7a66316d5d7dbfa7c23e415a 100644 |
--- a/Source/core/layout/LayoutBlock.cpp |
+++ b/Source/core/layout/LayoutBlock.cpp |
@@ -59,6 +59,7 @@ |
#include "core/layout/line/InlineIterator.h" |
#include "core/layout/line/InlineTextBox.h" |
#include "core/layout/shapes/ShapeOutsideInfo.h" |
+#include "core/layout/svg/LayoutSVGResourceClipper.h" |
#include "core/page/Page.h" |
#include "core/paint/BlockPainter.h" |
#include "core/paint/BoxPainter.h" |
@@ -1690,7 +1691,13 @@ bool LayoutBlock::nodeAtPoint(HitTestResult& result, const HitTestLocation& loca |
break; |
} |
case ClipPathOperation::REFERENCE: |
- // FIXME: handle REFERENCE |
+ ReferenceClipPathOperation* referenceClipPathOperation = toReferenceClipPathOperation(style()->clipPath()); |
+ Element* element = document().getElementById(referenceClipPathOperation->fragment()); |
+ if (isSVGClipPathElement(element) && element->layoutObject()) { |
+ LayoutSVGResourceClipper* clipper = toLayoutSVGResourceClipper(toLayoutSVGResourceContainer(element->layoutObject())); |
+ if (!clipper->hitTestClipContent(borderBoxRect(), FloatPoint(locationInContainer.point() - localOffset))) |
+ return false; |
+ } |
break; |
} |
} |