Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 022bfa3b7e29116c5be21a63ea341445452d0db5
      
https://github.com/WebKit/WebKit/commit/022bfa3b7e29116c5be21a63ea341445452d0db5
  Author: Wenson Hsieh <[email protected]>
  Date:   2024-12-02 (Mon, 02 Dec 2024)

  Changed paths:
    A 
LayoutTests/editing/selection/ios/bidi-visually-contiguous-selection-multiline-expected.txt
    A 
LayoutTests/editing/selection/ios/bidi-visually-contiguous-selection-multiline.html
    M Source/WebCore/rendering/RenderObject.cpp

  Log Message:
  -----------
  [iOS] [Visual Bidi Selection] Support visually-contiguous selections in 
multiline bidi text
https://bugs.webkit.org/show_bug.cgi?id=283729
rdar://140594373

Reviewed by Richard Robinson.

Refactor logic under `collectSelectionGeometries` to correctly extract 
selection geometries in
visually-contiguous multiline bidi text selections. See below for more details.

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

Add a layout test to exercise this behavior change, by sanity checking the last 
selection rect's
width in an LTR text run embedded inside of an RTL paragraph.

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

Rewrite this to handle text selections in both RTL and LTR paragraphs. The 
current logic only works
for an LTR paragraph that contains bidi text; in contrast, the new logic works 
for all scenarios by
using the following approach:

1.  Pass through interior text selection geometries (i.e. neither on the first 
line nor the last
    line) to be a part of the final list.

2.  For all selection geometries on the first line, expand the selection from 
the start caret
    position to the trailing edge of the first line (i.e. right edge in LTR, 
left edge for RTL).

3.  For all selection geometries on the last line, expand the selection from 
the end caret
    position to the leading edge of the last line (i.e. left edge in LTR, right 
edge for RTL).

(WebCore::adjustTextDirectionForCoalescedGeometries):

Pull this functionality out into a couple of static helper functions (above), 
so that we can use
them in `makeBidiSelectionVisuallyContiguousIfNeeded`.

(WebCore::RenderObject::collectSelectionGeometries):

Only call `adjustTextDirectionForCoalescedGeometries` if the selection endpoint 
directions weren't
already adjusted as a part of `makeBidiSelectionVisuallyContiguousIfNeeded`.

Canonical link: https://commits.webkit.org/287218@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