[webkit-changes] [WebKit/WebKit] 339f49: [SVG] Fix ellipse hit testing in the non-circle case

Yusuke Suzuki noreply at github.com
Thu Oct 19 20:32:28 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 339f49b72a953872fd41f36ac6f3a660b9c485f1
      https://github.com/WebKit/WebKit/commit/339f49b72a953872fd41f36ac6f3a660b9c485f1
  Author: Yusuke Suzuki <ysuzuki at apple.com>
  Date:   2023-10-19 (Thu, 19 Oct 2023)

  Changed paths:
    M LayoutTests/imported/w3c/resources/import-expectations.json
    A LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/async-01-expected.txt
    A LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/async-01.svg
    A LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/defer-01-expected.txt
    A LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/defer-01.svg
    A LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/defer.js
    A LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/ellipse-hittest-expected.txt
    A LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/ellipse-hittest.html
    A LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/log.py
    A LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/module-01-expected.txt
    A LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/module-01.svg
    A LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/rect-hittest-001-expected.txt
    A LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/rect-hittest-001.html
    A LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/rect-hittest-002-expected.txt
    A LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/rect-hittest-002.html
    A LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/svg-pointer-events-bbox-expected.txt
    A LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/svg-pointer-events-bbox.html
    A LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/svg-root-border-radius-expected.txt
    A LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/svg-root-border-radius.html
    A LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/svg-small-big-path-expected.txt
    A LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/svg-small-big-path.html
    M LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/w3c-import.log
    M Source/WebCore/rendering/svg/RenderSVGEllipse.cpp
    M Source/WebCore/rendering/svg/RenderSVGEllipse.h
    M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGEllipse.cpp
    M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGEllipse.h

  Log Message:
  -----------
  [SVG] Fix ellipse hit testing in the non-circle case
https://bugs.webkit.org/show_bug.cgi?id=249764
rdar://103756227

Reviewed by Cameron McCormack.

This is importing blink's fix for SVG ellipse hit-testing fix[1].
We are using fast path for SVG ellipse hit-testing. But this fast path only works for circle shape,
and it does not work with the other ellipses. The reason why the current fast path does not work is
that we are assuming that half-stroke-width is enough to compute hit-test with radius from the center-point.
But this only works with circle and this does not work with ellipse.

Now due to the previous improvement, we can detect ShapeType::Circle and ShapeType::Ellipse.
We leverage this to limit the case using fast path.

This fixes some WPT failures: web-platform-tests/svg/interact/scripted/ellipse-hittest.html.
Previously they were failing, but now we pass with this change.

[1]: https://chromium.googlesource.com/chromium/blink/+/fb46751341e395b641b691670c1c70e90bae30d4

* LayoutTests/imported/w3c/resources/import-expectations.json:
* LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/async-01-expected.txt: Added.
* LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/async-01.svg: Added.
* LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/defer-01-expected.txt: Added.
* LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/defer-01.svg: Added.
* LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/defer.js: Added.
(t.step):
* LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/ellipse-hittest-expected.txt: Added.
* LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/ellipse-hittest.html: Added.
* LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/log.py: Added.
(main):
* LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/module-01-expected.txt: Added.
* LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/module-01.svg: Added.
* LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/rect-hittest-001-expected.txt: Added.
* LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/rect-hittest-001.html: Added.
* LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/rect-hittest-002-expected.txt: Added.
* LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/rect-hittest-002.html: Added.
* LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/svg-pointer-events-bbox-expected.txt: Added.
* LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/svg-pointer-events-bbox.html: Added.
* LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/svg-root-border-radius-expected.txt: Added.
* LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/svg-root-border-radius.html: Added.
* LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/svg-small-big-path-expected.txt: Added.
* LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/svg-small-big-path.html: Added.
* LayoutTests/imported/w3c/web-platform-tests/svg/interact/scripted/w3c-import.log:
* Source/WebCore/rendering/svg/RenderSVGEllipse.cpp:
(WebCore::RenderSVGEllipse::canUseStrokeHitTestFastPath const):
(WebCore::RenderSVGEllipse::shapeDependentStrokeContains):
* Source/WebCore/rendering/svg/RenderSVGEllipse.h:
* Source/WebCore/rendering/svg/legacy/LegacyRenderSVGEllipse.cpp:
(WebCore::LegacyRenderSVGEllipse::canUseStrokeHitTestFastPath const):
(WebCore::LegacyRenderSVGEllipse::shapeDependentStrokeContains):
* Source/WebCore/rendering/svg/legacy/LegacyRenderSVGEllipse.h:

Canonical link: https://commits.webkit.org/269554@main




More information about the webkit-changes mailing list