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

  Changed paths:
    A LayoutTests/editing/caret/caret-at-start-of-bidi-rtl-text-expected.txt
    A LayoutTests/editing/caret/caret-at-start-of-bidi-rtl-text.html
    R 
LayoutTests/platform/ios/imported/blink/editing/selection/offset-from-point-complex-scripts-expected.txt
    M Source/WebCore/rendering/RenderText.cpp

  Log Message:
  -----------
  Tapping at the start of RTL text in bidi text selects the visual end (logical 
start) of the text
https://bugs.webkit.org/show_bug.cgi?id=280950
rdar://137395868

Reviewed by Ryosuke Niwa.

On iOS, attempting to place the selection at the start of an RTL text run 
within LTR bidi text
(using any of floating text cursor, tap gesture, or clicking with a trackpad on 
iPadOS) causes the
selection to be placed at the logical start of the RTL text (visually, at the 
right edge) instead of
where you tapped/clicked.

This happens because of this iOS-specific codepath used to map coordinates to a 
rendered DOM
position, in `RenderText::positionForPoint`:

```
if (pointLineDirection != run->logicalLeftIgnoringInlineDirection() && 
point.x() < run->visualRectIgnoringBlockDirection().x() + run->logicalWidth()) {
    auto half = LayoutUnit { run->visualRectIgnoringBlockDirection().x() + 
run->logicalWidth() / 2.f };
    auto affinity = point.x() < half ? Affinity::Downstream : 
Affinity::Upstream;
    return createVisiblePosition(offsetForPositionInRun(*run, 
pointLineDirection) + run->start(), affinity);
}
```

This codepath doesn't attempt to take bidi text into account at the edges of 
the bidi container,
causing the max and min caret offsets to be visually flipped at bidi level 
boundaries. To fix this,
we adopt `createVisiblePositionAfterAdjustingOffsetForBiDi` for consistency 
with the nearby
(platform-agnostic) return values.

* LayoutTests/editing/caret/caret-at-start-of-bidi-rtl-text-expected.txt: Added.
* LayoutTests/editing/caret/caret-at-start-of-bidi-rtl-text.html: Added.

Add a layout test to exercise the change.

* 
LayoutTests/platform/ios/imported/blink/editing/selection/offset-from-point-complex-scripts-expected.txt:
 Removed.

Remove this iOS-specific baseline, now that iOS behavior aligns with all other 
platforms.

* Source/WebCore/rendering/RenderText.cpp:
(WebCore::RenderText::positionForPoint):

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