[webkit-changes] [WebKit/WebKit] 26e165: Add <input type=checkbox switch> shadow tree

Anne van Kesteren noreply at github.com
Fri Oct 27 14:34:02 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 26e165bb2d52c3cd874938c8767c6b703b9ff949
      https://github.com/WebKit/WebKit/commit/26e165bb2d52c3cd874938c8767c6b703b9ff949
  Author: Anne van Kesteren <annevk at annevk.nl>
  Date:   2023-10-27 (Fri, 27 Oct 2023)

  Changed paths:
    M Source/WebCore/Sources.txt
    M Source/WebCore/WebCore.xcodeproj/project.pbxproj
    M Source/WebCore/css/CSSPrimitiveValueMappings.h
    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
    A Source/WebCore/html/shadow/SwitchThumbElement.cpp
    A Source/WebCore/html/shadow/SwitchThumbElement.h
    A Source/WebCore/html/shadow/SwitchTrackElement.cpp
    A Source/WebCore/html/shadow/SwitchTrackElement.h
    M Source/WebCore/rendering/RenderTheme.cpp
    M Source/WebCore/style/StyleAppearance.cpp
    M Source/WebCore/style/StyleAppearance.h
    M Source/WebKit/Shared/WebCoreArgumentCoders.cpp
    M Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in

  Log Message:
  -----------
  Add <input type=checkbox switch> shadow tree
https://bugs.webkit.org/show_bug.cgi?id=263435
rdar://117254677

Reviewed by Chris Dumez.

This conditionally adds a shadow tree with two elements when a checkbox
becomes a switch control. It also gives these two elements distinct
appearance values that depend on the shadow host's appearance value
being auto.

As checkboxes have been made performance-critical by forces outside of
my control, we add a bit to HTMLInputElement to track the presence of a
switch attribute, which needsShadowSubtree() can then rely on.

As we call removeShadowSubtree() while the InputType class stays alive,
we need to reset m_hasCreatedShadowSubtree to false as otherwise a
subsequent createShadowSubtreeIfNeeded() returns too early.

In preparation for future work we also ensure that RenderTheme does the
correct thing for isChecked, isEnabled, and isPressed, when it comes to
the new elements in the shadow tree.

* Source/WebCore/Sources.txt:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/css/CSSPrimitiveValueMappings.h:
(WebCore::toCSSValueID):
* Source/WebCore/html/CheckboxInputType.cpp:
(WebCore::CheckboxInputType::createShadowSubtree):
(WebCore::CheckboxInputType::shouldAppearIndeterminate const):
(WebCore::CheckboxInputType::attributeChanged): Deleted.
* Source/WebCore/html/CheckboxInputType.h:
* Source/WebCore/html/HTMLInputElement.cpp:
(WebCore::HTMLInputElement::attributeChanged):
(WebCore::HTMLInputElement::isSwitch const):
* Source/WebCore/html/HTMLInputElement.h:
(WebCore::HTMLInputElement::hasSwitchAttribute const):
* Source/WebCore/html/InputType.cpp:
(WebCore::InputType::removeShadowSubtree):
* Source/WebCore/html/InputType.h:
(WebCore::InputType::isSwitch const):
(WebCore::InputType::needsShadowSubtree const):
* Source/WebCore/html/shadow/SwitchThumbElement.cpp: Added.
(WebCore::SwitchThumbElement::create):
(WebCore::SwitchThumbElement::SwitchThumbElement):
(WebCore::SwitchThumbElement::resolveCustomStyle):
* Source/WebCore/html/shadow/SwitchThumbElement.h: Added.
* Source/WebCore/html/shadow/SwitchTrackElement.cpp: Added.
(WebCore::SwitchTrackElement::create):
(WebCore::SwitchTrackElement::SwitchTrackElement):
(WebCore::SwitchTrackElement::resolveCustomStyle):
* Source/WebCore/html/shadow/SwitchTrackElement.h: Added.
* Source/WebCore/rendering/RenderTheme.cpp:
(WebCore::RenderTheme::autoAppearanceForElement const):
(WebCore::RenderTheme::createControlPart const):
(WebCore::RenderTheme::isChecked const):
(WebCore::RenderTheme::isEnabled const):
(WebCore::RenderTheme::isPressed const):
* Source/WebCore/style/StyleAppearance.cpp:
(WebCore::operator<<):
* Source/WebCore/style/StyleAppearance.h:
* Source/WebKit/Shared/WebCoreArgumentCoders.cpp:
(IPC::ArgumentCoder<ControlPart>::encode):
(IPC::ArgumentCoder<ControlPart>::decode):
* Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in:

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




More information about the webkit-changes mailing list