[webkit-changes] [WebKit/WebKit] 870a05: Add <input type=checkbox switch> pointer tracking

Anne van Kesteren noreply at github.com
Tue Dec 5 00:12:39 PST 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 870a0515b649fa5462225fbf33a150e41f1827b5
      https://github.com/WebKit/WebKit/commit/870a0515b649fa5462225fbf33a150e41f1827b5
  Author: Anne van Kesteren <annevk at annevk.nl>
  Date:   2023-12-05 (Tue, 05 Dec 2023)

  Changed paths:
    A LayoutTests/fast/forms/switch/pointer-tracking-disabled-expected.html
    A LayoutTests/fast/forms/switch/pointer-tracking-disabled.html
    A LayoutTests/fast/forms/switch/pointer-tracking-expected-mismatch.html
    A LayoutTests/fast/forms/switch/pointer-tracking-there-and-back-again-expected.html
    A LayoutTests/fast/forms/switch/pointer-tracking-there-and-back-again-rtl-expected.html
    A LayoutTests/fast/forms/switch/pointer-tracking-there-and-back-again-rtl.html
    A LayoutTests/fast/forms/switch/pointer-tracking-there-and-back-again.html
    A LayoutTests/fast/forms/switch/pointer-tracking.html
    M Source/WebCore/html/CheckboxInputType.cpp
    M Source/WebCore/html/CheckboxInputType.h
    M Source/WebCore/html/HTMLInputElement.cpp
    M Source/WebCore/html/HTMLInputElement.h
    M Source/WebCore/html/InputType.cpp
    M Source/WebCore/html/InputType.h
    M Source/WebCore/html/RadioInputType.cpp
    M Source/WebCore/html/RadioInputType.h
    M Source/WebCore/html/RangeInputType.cpp
    M Source/WebCore/platform/graphics/controls/SwitchThumbPart.h
    M Source/WebCore/platform/graphics/controls/SwitchTrackPart.h
    M Source/WebCore/platform/graphics/mac/controls/SwitchThumbMac.mm
    M Source/WebCore/platform/graphics/mac/controls/SwitchTrackMac.mm
    M Source/WebCore/rendering/RenderTheme.cpp
    M Source/WebCore/rendering/RenderTheme.h
    M Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in

  Log Message:
  -----------
  Add <input type=checkbox switch> pointer tracking
https://bugs.webkit.org/show_bug.cgi?id=265658

Reviewed by Aditya Keerthi.

This change enables the switch's thumb to be "dragged" left and right.

This requires the introduction of a visual on/off state as actual state
changes, i.e., to checkedness, are only made after the tracking stops.
As such we simplify RenderTheme::isChecked() back to how it was before
we started adding <input type=checkbox switch> as switches don't need
it.

Despite what 271327 at main claimed this change makes CheckboxInputType
solely responsible for performSwitchCheckedChangeAnimation(). This
works by passing along the event's isTrusted() bit to
willUpdateCheckedness() and instead stopping the animation from there.

A future change might have to abstract some of the logic in
CheckboxInputType::handleMouseMoveEvent() somewhat as more platforms
become supported.

A difference with macOS switches is that these remain active/pressed
and responsive to mouseup events while tracking is ongoing. This
difference with is also there for checkboxes and radio buttons.

* LayoutTests/fast/forms/switch/pointer-tracking-disabled-expected.html: Added.
* LayoutTests/fast/forms/switch/pointer-tracking-disabled.html: Added.
* LayoutTests/fast/forms/switch/pointer-tracking-expected-mismatch.html: Added.
* LayoutTests/fast/forms/switch/pointer-tracking-there-and-back-again-expected.html: Added.
* LayoutTests/fast/forms/switch/pointer-tracking-there-and-back-again-rtl-expected.html: Added.
* LayoutTests/fast/forms/switch/pointer-tracking-there-and-back-again-rtl.html: Added.
* LayoutTests/fast/forms/switch/pointer-tracking-there-and-back-again.html: Added.
* LayoutTests/fast/forms/switch/pointer-tracking.html: Added.
* Source/WebCore/html/CheckboxInputType.cpp:
(WebCore::CheckboxInputType::handleMouseDownEvent):
(WebCore::CheckboxInputType::handleMouseMoveEvent):
(WebCore::CheckboxInputType::willDispatchClick):
(WebCore::CheckboxInputType::startSwitchPointerTracking):
(WebCore::CheckboxInputType::stopSwitchPointerTracking):
(WebCore::CheckboxInputType::isSwitchPointerTracking const):
(WebCore::CheckboxInputType::disabledStateChanged):
(WebCore::CheckboxInputType::willUpdateCheckedness):
(WebCore::CheckboxInputType::performSwitchCheckedChangeAnimation):
(WebCore::CheckboxInputType::isSwitchVisuallyOn const):
* Source/WebCore/html/CheckboxInputType.h:
* Source/WebCore/html/HTMLInputElement.cpp:
(WebCore::HTMLInputElement::setChecked):
(WebCore::HTMLInputElement::defaultEventHandler):
(WebCore::HTMLInputElement::switchCheckedChangeAnimationProgress const):
(WebCore::HTMLInputElement::isSwitchVisuallyOn const):
* Source/WebCore/html/HTMLInputElement.h:
* Source/WebCore/html/InputType.cpp:
(WebCore::InputType::handleClickEvent): Deleted.
(WebCore::InputType::handleMouseDownEvent): Deleted.
(WebCore::InputType::handleDOMActivateEvent): Deleted.
(WebCore::InputType::willDispatchClick): Deleted.
(WebCore::InputType::didDispatchClick): Deleted.
* Source/WebCore/html/InputType.h:
(WebCore::InputType::handleClickEvent):
(WebCore::InputType::handleMouseDownEvent):
(WebCore::InputType::handleMouseMoveEvent):
(WebCore::InputType::willDispatchClick):
(WebCore::InputType::didDispatchClick):
(WebCore::InputType::handleDOMActivateEvent):
(WebCore::InputType::willUpdateCheckedness):
* Source/WebCore/html/RadioInputType.cpp:
(WebCore::RadioInputType::willUpdateCheckedness):
* Source/WebCore/html/RadioInputType.h:
* Source/WebCore/html/RangeInputType.cpp:
(WebCore::RangeInputType::handleMouseDownEvent):
* Source/WebCore/platform/graphics/controls/SwitchThumbPart.h:
* Source/WebCore/platform/graphics/controls/SwitchTrackPart.h:
* Source/WebCore/platform/graphics/mac/controls/SwitchThumbMac.mm:
(WebCore::SwitchThumbMac::draw):
* Source/WebCore/platform/graphics/mac/controls/SwitchTrackMac.mm:
(WebCore::SwitchTrackMac::draw):
* Source/WebCore/rendering/RenderTheme.cpp:
(WebCore::updateSwitchThumbPartForRenderer):
(WebCore::updateSwitchTrackPartForRenderer):
(WebCore::RenderTheme::isChecked const):
* Source/WebCore/rendering/RenderTheme.h:
(WebCore::RenderTheme::switchPointerTrackingMagnitudeProportion const):
* Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in:

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




More information about the webkit-changes mailing list