Changeset 290306 in webkit
- Timestamp:
- Feb 22, 2022 7:45:55 AM (5 months ago)
- Location:
- trunk
- Files:
-
- 6 added
- 14 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/imported/w3c/ChangeLog (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/inert-svg-hittest-expected.txt (added)
-
LayoutTests/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/inert-svg-hittest.html (added)
-
LayoutTests/imported/w3c/web-platform-tests/inert/inert-svg-hittest.tentative-expected.txt (added)
-
LayoutTests/imported/w3c/web-platform-tests/inert/inert-svg-hittest.tentative.html (added)
-
LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/inert-svg-hittest-expected.txt (added)
-
LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/inert/inert-svg-hittest.tentative-expected.txt (added)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/rendering/RenderElement.cpp (modified) (1 diff)
-
Source/WebCore/rendering/RenderElement.h (modified) (1 diff)
-
Source/WebCore/rendering/RenderLayerCompositor.cpp (modified) (1 diff)
-
Source/WebCore/rendering/style/RenderStyle.h (modified) (1 diff)
-
Source/WebCore/rendering/svg/LegacyRenderSVGModelObject.cpp (modified) (2 diffs)
-
Source/WebCore/rendering/svg/LegacyRenderSVGShape.cpp (modified) (1 diff)
-
Source/WebCore/rendering/svg/RenderSVGImage.cpp (modified) (1 diff)
-
Source/WebCore/rendering/svg/RenderSVGModelObject.cpp (modified) (2 diffs)
-
Source/WebCore/rendering/svg/RenderSVGShape.cpp (modified) (1 diff)
-
Source/WebCore/rendering/svg/RenderSVGText.cpp (modified) (1 diff)
-
Source/WebCore/rendering/svg/SVGInlineTextBox.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r290303 r290306 1 2022-02-22 Tim Nguyen <ntim@apple.com> 2 3 Make pointer-events checks for SVG take in account inert subtrees 4 https://bugs.webkit.org/show_bug.cgi?id=235836 5 6 Reviewed by Antti Koivisto. 7 8 iOS doesn't support test_actions, so it needs different baselines. 9 10 * platform/ios-wk2/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/inert-svg-hittest-expected.txt: Added. 11 * platform/ios-wk2/imported/w3c/web-platform-tests/inert/inert-svg-hittest.tentative-expected.txt: Added. 12 1 13 2022-02-22 Jonathan Bedard <jbedard@apple.com> 2 14 -
trunk/LayoutTests/imported/w3c/ChangeLog
r290301 r290306 1 2022-02-22 Tim Nguyen <ntim@apple.com> 2 3 Make pointer-events checks for SVG take in account inert subtrees 4 https://bugs.webkit.org/show_bug.cgi?id=235836 5 6 Reviewed by Antti Koivisto. 7 8 Added tests for both inert attribute & modal dialog cases. 9 10 * web-platform-tests/html/semantics/interactive-elements/the-dialog-element/inert-svg-hittest-expected.txt: Added. 11 * web-platform-tests/html/semantics/interactive-elements/the-dialog-element/inert-svg-hittest.html: Added. 12 * web-platform-tests/inert/inert-svg-hittest.tentative-expected.txt: Added. 13 * web-platform-tests/inert/inert-svg-hittest.tentative.html: Added. 14 1 15 2022-02-22 Marcos Caceres <marcos@marcosc.com> 2 16 -
trunk/Source/WebCore/ChangeLog
r290305 r290306 1 2022-02-22 Tim Nguyen <ntim@apple.com> 2 3 Make pointer-events checks for SVG take in account inert subtrees 4 https://bugs.webkit.org/show_bug.cgi?id=235836 5 6 Reviewed by Antti Koivisto. 7 8 Re-using visibleToHitTesting in SVG code isn't possible, because visibleToHitTesting removes visibility: hidden; 9 content from hit-testing, which we do not want to here, since pointer-events has values for SVG which still 10 allow clicking content regardless of their visibility value (pointer-events: painted/fill/stroke/all). 11 12 Instead, we add an inert-aware effectivePointerEvents, similar to effectiveUserSelect and re-use that across the codebase. 13 14 Tests: imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/inert-svg-hittest.html 15 imported/w3c/web-platform-tests/inert/inert-svg-hittest.tentative.html 16 17 * rendering/RenderElement.cpp: 18 (WebCore::RenderElement::styleWillChange): 19 * rendering/RenderElement.h: 20 (WebCore::RenderElement::visibleToHitTesting const): 21 * rendering/RenderLayerCompositor.cpp: 22 (WebCore::RenderLayerCompositor::layerStyleChanged): 23 * rendering/style/RenderStyle.h: 24 (WebCore::RenderStyle::effectivePointerEvents const): 25 * rendering/svg/LegacyRenderSVGModelObject.cpp: 26 (WebCore::LegacyRenderSVGModelObject::checkIntersection): 27 (WebCore::LegacyRenderSVGModelObject::checkEnclosure): 28 * rendering/svg/LegacyRenderSVGShape.cpp: 29 (WebCore::LegacyRenderSVGShape::nodeAtFloatPoint): 30 * rendering/svg/RenderSVGImage.cpp: 31 (WebCore::RenderSVGImage::nodeAtFloatPoint): 32 * rendering/svg/RenderSVGModelObject.cpp: 33 (WebCore::RenderSVGModelObject::checkIntersection): 34 (WebCore::RenderSVGModelObject::checkEnclosure): 35 * rendering/svg/RenderSVGShape.cpp: 36 (WebCore::RenderSVGShape::nodeAtPoint): 37 * rendering/svg/RenderSVGText.cpp: 38 (WebCore::RenderSVGText::nodeAtFloatPoint): 39 * rendering/svg/SVGInlineTextBox.cpp: 40 (WebCore::SVGInlineTextBox::nodeAtPoint): 41 1 42 2022-02-22 Tim Nguyen <ntim@apple.com> 2 43 -
trunk/Source/WebCore/rendering/RenderElement.cpp
r290305 r290306 845 845 846 846 auto needsInvalidateEventRegion = [&] { 847 if (m_style.effectiveInert() != newStyle.effectiveInert()) 848 return true; 849 if (m_style.pointerEvents() != newStyle.pointerEvents()) 847 if (m_style.effectivePointerEvents() != newStyle.effectivePointerEvents()) 850 848 return true; 851 849 #if ENABLE(TOUCH_ACTION_REGIONS) -
trunk/Source/WebCore/rendering/RenderElement.h
r289157 r290306 160 160 bool visibleToHitTesting(std::optional<HitTestRequest> hitTestRequest = std::nullopt) const 161 161 { 162 if (style().effectiveInert())163 return false;164 165 162 if (style().visibility() != Visibility::Visible) 166 163 return false; 167 164 168 if ((!hitTestRequest || !hitTestRequest->ignoreCSSPointerEventsProperty()) && style(). pointerEvents() == PointerEvents::None)165 if ((!hitTestRequest || !hitTestRequest->ignoreCSSPointerEventsProperty()) && style().effectivePointerEvents() == PointerEvents::None) 169 166 return false; 170 167 -
trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp
r290285 r290306 1732 1732 if (diff >= StyleDifference::RecompositeLayer) { 1733 1733 if (layer.isComposited()) { 1734 bool hitTestingStateChanged = oldStyle && (oldStyle-> pointerEvents() != newStyle.pointerEvents() || oldStyle->effectiveInert() != newStyle.effectiveInert());1734 bool hitTestingStateChanged = oldStyle && (oldStyle->effectivePointerEvents() != newStyle.effectivePointerEvents()); 1735 1735 if (is<RenderWidget>(layer.renderer()) || hitTestingStateChanged) { 1736 1736 // For RenderWidgets this is necessary to get iframe layers hooked up in response to scheduleInvalidateStyleAndLayerComposition(). -
trunk/Source/WebCore/rendering/style/RenderStyle.h
r290305 r290306 714 714 715 715 PointerEvents pointerEvents() const { return static_cast<PointerEvents>(m_inheritedFlags.pointerEvents); } 716 PointerEvents effectivePointerEvents() const { return effectiveInert() ? PointerEvents::None : pointerEvents(); } 716 717 const AnimationList* animations() const { return m_rareNonInheritedData->animations.get(); } 717 718 const AnimationList* transitions() const { return m_rareNonInheritedData->transitions.get(); } -
trunk/Source/WebCore/rendering/svg/LegacyRenderSVGModelObject.cpp
r287834 r290306 170 170 bool LegacyRenderSVGModelObject::checkIntersection(RenderElement* renderer, const FloatRect& rect) 171 171 { 172 if (!renderer || renderer->style(). pointerEvents() == PointerEvents::None)172 if (!renderer || renderer->style().effectivePointerEvents() == PointerEvents::None) 173 173 return false; 174 174 if (!isGraphicsElement(*renderer)) … … 183 183 bool LegacyRenderSVGModelObject::checkEnclosure(RenderElement* renderer, const FloatRect& rect) 184 184 { 185 if (!renderer || renderer->style(). pointerEvents() == PointerEvents::None)185 if (!renderer || renderer->style().effectivePointerEvents() == PointerEvents::None) 186 186 return false; 187 187 if (!isGraphicsElement(*renderer)) -
trunk/Source/WebCore/rendering/svg/LegacyRenderSVGShape.cpp
r287731 r290306 355 355 SVGHitTestCycleDetectionScope hitTestScope(*this); 356 356 357 PointerEventsHitRules hitRules(PointerEventsHitRules::SVG_PATH_HITTESTING, request, style(). pointerEvents());357 PointerEventsHitRules hitRules(PointerEventsHitRules::SVG_PATH_HITTESTING, request, style().effectivePointerEvents()); 358 358 bool isVisible = (style().visibility() == Visibility::Visible); 359 359 if (isVisible || !hitRules.requireVisible) { -
trunk/Source/WebCore/rendering/svg/RenderSVGImage.cpp
r287731 r290306 217 217 return false; 218 218 219 PointerEventsHitRules hitRules(PointerEventsHitRules::SVG_IMAGE_HITTESTING, request, style(). pointerEvents());219 PointerEventsHitRules hitRules(PointerEventsHitRules::SVG_IMAGE_HITTESTING, request, style().effectivePointerEvents()); 220 220 bool isVisible = (style().visibility() == Visibility::Visible); 221 221 if (isVisible || !hitRules.requireVisible) { -
trunk/Source/WebCore/rendering/svg/RenderSVGModelObject.cpp
r289606 r290306 255 255 bool RenderSVGModelObject::checkIntersection(RenderElement* renderer, const FloatRect& rect) 256 256 { 257 if (!renderer || renderer->style(). pointerEvents() == PointerEvents::None)257 if (!renderer || renderer->style().effectivePointerEvents() == PointerEvents::None) 258 258 return false; 259 259 if (!isGraphicsElement(*renderer)) … … 267 267 bool RenderSVGModelObject::checkEnclosure(RenderElement* renderer, const FloatRect& rect) 268 268 { 269 if (!renderer || renderer->style(). pointerEvents() == PointerEvents::None)269 if (!renderer || renderer->style().effectivePointerEvents() == PointerEvents::None) 270 270 return false; 271 271 if (!isGraphicsElement(*renderer)) -
trunk/Source/WebCore/rendering/svg/RenderSVGShape.cpp
r287873 r290306 359 359 SVGHitTestCycleDetectionScope hitTestScope(*this); 360 360 361 PointerEventsHitRules hitRules(PointerEventsHitRules::SVG_PATH_HITTESTING, request, style(). pointerEvents());361 PointerEventsHitRules hitRules(PointerEventsHitRules::SVG_PATH_HITTESTING, request, style().effectivePointerEvents()); 362 362 bool isVisible = (style().visibility() == Visibility::Visible); 363 363 if (isVisible || !hitRules.requireVisible) { -
trunk/Source/WebCore/rendering/svg/RenderSVGText.cpp
r287731 r290306 405 405 bool RenderSVGText::nodeAtFloatPoint(const HitTestRequest& request, HitTestResult& result, const FloatPoint& pointInParent, HitTestAction hitTestAction) 406 406 { 407 PointerEventsHitRules hitRules(PointerEventsHitRules::SVG_TEXT_HITTESTING, request, style(). pointerEvents());407 PointerEventsHitRules hitRules(PointerEventsHitRules::SVG_TEXT_HITTESTING, request, style().effectivePointerEvents()); 408 408 bool isVisible = (style().visibility() == Visibility::Visible); 409 409 if (isVisible || !hitRules.requireVisible) { -
trunk/Source/WebCore/rendering/svg/SVGInlineTextBox.cpp
r288942 r290306 636 636 ASSERT(!isLineBreak()); 637 637 638 PointerEventsHitRules hitRules(PointerEventsHitRules::SVG_TEXT_HITTESTING, request, renderer().style(). pointerEvents());638 PointerEventsHitRules hitRules(PointerEventsHitRules::SVG_TEXT_HITTESTING, request, renderer().style().effectivePointerEvents()); 639 639 bool isVisible = renderer().style().visibility() == Visibility::Visible; 640 640 if (isVisible || !hitRules.requireVisible) {
Note: See TracChangeset
for help on using the changeset viewer.