[webkit-changes] [WebKit/WebKit] ed68be: Add <input type=checkbox switch> iOS infrastructur...

Anne van Kesteren noreply at github.com
Fri Dec 8 08:30:04 PST 2023


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

  Changed paths:
    M Source/WebCore/PAL/pal/ios/UIKitSoftLink.h
    M Source/WebCore/PAL/pal/ios/UIKitSoftLink.mm
    M Source/WebCore/css/htmlSwitchControl.css
    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/RangeInputType.h
    M Source/WebCore/platform/Theme.h
    M Source/WebCore/platform/ios/ThemeIOS.h
    M Source/WebCore/platform/ios/ThemeIOS.mm
    M Source/WebCore/rendering/RenderTheme.cpp
    M Source/WebCore/rendering/RenderTheme.h
    M Source/WebCore/rendering/RenderThemeIOS.h
    M Source/WebCore/rendering/RenderThemeIOS.mm

  Log Message:
  -----------
  Add <input type=checkbox switch> iOS infrastructure, take 2
https://bugs.webkit.org/show_bug.cgi?id=265947
rdar://119325031

Reviewed by Aditya Keerthi.

This makes the following changes:

- Resets default styling of <input type=checkbox switch> on iOS.
- Adds support for reading the on/off labels preference.
- Adds support for touch-based pointer tracking to CheckboxInputType as
  well as a Pressed animation that can run simultaneously with the
  VisuallyOn animation.
- Make the non-IOS_TOUCH_EVENTS code in HTMLInputElement compatible
  with IOS_TOUCH_EVENTS so events get delivered to CheckboxInputType.
- Adds the relevant hooks to RenderTheme to enable painting on iOS.

And most importantly, attempts to only enable the touch code paths for
switch controls to avoid impacting Speedometer. This was generously
contributed by Aditya and is how this patch is substantially different
from 271682 at main (take 1) which was reverted in 271705 at main.

* Source/WebCore/PAL/pal/ios/UIKitSoftLink.h:
* Source/WebCore/PAL/pal/ios/UIKitSoftLink.mm:
* Source/WebCore/css/htmlSwitchControl.css:
(#if defined(WTF_PLATFORM_IOS_FAMILY) && WTF_PLATFORM_IOS_FAMILY):
(input[type="checkbox"][switch]:checked):
(input[type="checkbox"][switch]:disabled):
(input[type="checkbox"][switch]:checked:disabled):
* Source/WebCore/html/CheckboxInputType.cpp:
(WebCore::CheckboxInputType::handleMouseDownEvent):
(WebCore::findTouchWithIdentifier):
(WebCore::CheckboxInputType::handleTouchEvent):
(WebCore::CheckboxInputType::startSwitchPointerTracking):
(WebCore::CheckboxInputType::stopSwitchPointerTracking):
(WebCore::CheckboxInputType::disabledStateChanged):
(WebCore::CheckboxInputType::willUpdateCheckedness):
(WebCore::switchAnimationDuration):
(WebCore::CheckboxInputType::switchAnimationStartTime const):
(WebCore::CheckboxInputType::setSwitchAnimationStartTime):
(WebCore::CheckboxInputType::switchAnimationPressedProgress const):
(WebCore::CheckboxInputType::switchAnimationTimerFired):
* Source/WebCore/html/CheckboxInputType.h:
* Source/WebCore/html/HTMLInputElement.cpp:
(WebCore::HTMLInputElement::~HTMLInputElement):
(WebCore::HTMLInputElement::runPostTypeUpdateTasks):
(WebCore::HTMLInputElement::updateTouchEventHandler):
(WebCore::HTMLInputElement::attributeChanged):
(WebCore::HTMLInputElement::didMoveToNewDocument):
(WebCore::HTMLInputElement::switchAnimationPressedProgress const):
* Source/WebCore/html/HTMLInputElement.h:
* Source/WebCore/html/InputType.cpp:
(WebCore::InputType::hasTouchEventHandler const):
* Source/WebCore/html/InputType.h:
(WebCore::InputType::hasTouchEventHandler const): Deleted.
* Source/WebCore/html/RangeInputType.h:
* Source/WebCore/platform/Theme.h:
(WebCore::Theme::userPrefersOnOffLabels const):
* Source/WebCore/platform/ios/ThemeIOS.h:
* Source/WebCore/platform/ios/ThemeIOS.mm:
(WebCore::ThemeIOS::userPrefersOnOffLabels const):
* Source/WebCore/rendering/RenderTheme.cpp:
(WebCore::RenderTheme::adjustStyle):
(WebCore::RenderTheme::paint):
* Source/WebCore/rendering/RenderTheme.h:
(WebCore::RenderTheme::switchAnimationPressedDuration const):
(WebCore::RenderTheme::adjustSwitchStyle const):
(WebCore::RenderTheme::paintSwitchThumb):
(WebCore::RenderTheme::paintSwitchTrack):
* Source/WebCore/rendering/RenderThemeIOS.h:
* Source/WebCore/rendering/RenderThemeIOS.mm:
(WebCore::renderThemePaintSwitchThumb):
(WebCore::renderThemePaintSwitchTrack):
(WebCore::RenderThemeIOS::adjustSwitchStyle const):
(WebCore::RenderThemeIOS::paintSwitchThumb):
(WebCore::RenderThemeIOS::paintSwitchTrack):

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




More information about the webkit-changes mailing list