Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: fc02c970c4f7dd90289db2a822a60e38581556aa
      
https://github.com/WebKit/WebKit/commit/fc02c970c4f7dd90289db2a822a60e38581556aa
  Author: Wenson Hsieh <[email protected]>
  Date:   2024-10-09 (Wed, 09 Oct 2024)

  Changed paths:
    A 
LayoutTests/editing/selection/ios/bidi-visually-contiguous-selection-expected.txt
    A LayoutTests/editing/selection/ios/bidi-visually-contiguous-selection.html
    M LayoutTests/resources/ui-helper.js
    M Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml
    M Source/WebCore/platform/ios/SelectionGeometry.cpp
    M Source/WebCore/platform/ios/SelectionGeometry.h
    M Source/WebCore/rendering/RenderObject.cpp
    M Source/WebCore/rendering/RenderObject.h
    M Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in
    M Source/WebKit/UIProcess/Cocoa/WKTextSelectionRect.mm

  Log Message:
  -----------
  [iOS] Add a (off-by-default) setting to make bidi text selections appear 
visually contiguous
https://bugs.webkit.org/show_bug.cgi?id=281100

Reviewed by Richard Robinson.

Adjust some iOS text selection codepaths to allow for visually-contiguous 
selection views (that
appear logically discontiguous); guard this new behavior behind a feature flag, 
which is off by
default. This is work towards implementing a more intuitive selection behaviors 
for bidi text, by
ensuring visual stability while the user is interacting with selection handles.

In a subsequent patch, we'll extend the selection to ensure both logical and 
visual contiguity after
the user is done selecting text.

* 
LayoutTests/editing/selection/ios/bidi-visually-contiguous-selection-expected.txt:
 Added.
* LayoutTests/editing/selection/ios/bidi-visually-contiguous-selection.html: 
Added.

Add a basic layout test to ensure that selection UI remains stable while the 
user is in the process
of selecting text.

* Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml:

Add the new internal feature flag.

* Source/WebCore/platform/ios/SelectionGeometry.cpp:
(WebCore::SelectionGeometry::SelectionGeometry):
(WebCore::operator<<):
* Source/WebCore/platform/ios/SelectionGeometry.h:
(WebCore::SelectionGeometry::mayAppearLogicallyDiscontiguous const):
(WebCore::SelectionGeometry::setMayAppearLogicallyDiscontiguous):

Add a new boolean flag to indicate that the `SelectionGeometry` may have a 
logically discontiguous
appearance.

* Source/WebCore/rendering/RenderObject.cpp:
(WebCore::areOnSameLine):
(WebCore::makeBidiSelectionVisuallyContiguousIfNeeded):

Implement the main heuristic to ensure visual contiguity here. At a high level, 
this post-processes
coalesced selection geometries such that:

-   Interior selection geometries (neither the start nor end) are unaltered.
-   Geometries that contain the start are all coalesced into a single selection 
that extends from
    the selection start caret rect, to the end of the line containing the start 
position.
-   Likewise, geometries that contain the end are coalesced into a selection 
that extends from the
    start of the line containing the end position, to the end caret rect.

If all of the selected text is left-to-right, we simply skip the steps above. 
For now, we also only
support horizontal bidi text (i.e. bail from this codepath if there are any 
vertical selections).

(WebCore::RenderObject::collectSelectionGeometriesInternal):
(WebCore::RenderObject::collectSelectionGeometries):
* Source/WebCore/rendering/RenderObject.h:
* Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in:
* Source/WebKit/UIProcess/Cocoa/WKTextSelectionRect.mm:
(-[WKTextSelectionRect writingDirection]):

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



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to