Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 0efbdbf5ca5aab2f41694b72df8c1a830618b1bc
      
https://github.com/WebKit/WebKit/commit/0efbdbf5ca5aab2f41694b72df8c1a830618b1bc
  Author: Alan Baradlay <[email protected]>
  Date:   2024-10-29 (Tue, 29 Oct 2024)

  Changed paths:
    A LayoutTests/fast/ruby/breaking-opportunity-between-bases-expected.html
    A LayoutTests/fast/ruby/breaking-opportunity-between-bases.html
    M 
Source/WebCore/layout/formattingContexts/inline/ruby/RubyFormattingContext.cpp
    M Source/WebCore/layout/formattingContexts/inline/text/TextUtil.cpp
    M Source/WebCore/layout/formattingContexts/inline/text/TextUtil.h
    M Source/WebCore/rendering/InlineWalker.h
    M Source/WebCore/rendering/RenderBlockFlow.cpp

  Log Message:
  -----------
  [Ruby] duolingo.com: Listening text is cut off on several prompts
https://bugs.webkit.org/show_bug.cgi?id=282235
<rdar://131571396>

Reviewed by Antti Koivisto.

This change fixes ruby content (min) sizing when there's breaking opportunity 
between adjacent bases.
Legacy preferred width computation ignores soft wrap opportunities between 
inline boxes

e.g. <span>A</span><span>B</span> (assume language rules allow to break between 
A and B)

^ RenderBlockFlow::computeInlinePreferredLogicalWidths simply does not check 
for such breaking opportunities between these <span>s.
This is specific to legacy preferred width codepath as IFC runs regular layout 
which finds such breaking positions (also same content works fine when instead 
of using 'width: min-width", we force non-preferred with codepath by "width: 
0px;")

1. In RenderBlockFlow::computeInlinePreferredLogicalWidths, when at the end of 
the ruby base, look forward
by calling hasTrailingSoftWrapOpportunity to check for breaking opportunity.
2. hasTrailingSoftWrapOpportunity collects adjacent renderers and calls ICU to 
figure out whether content can be split.

* LayoutTests/fast/ruby/breaking-opportunity-between-bases-expected.html: Added.
* LayoutTests/fast/ruby/breaking-opportunity-between-bases.html: Added.
* 
Source/WebCore/layout/formattingContexts/inline/ruby/RubyFormattingContext.cpp:
(WebCore::Layout::RubyFormattingContext::isAtSoftWrapOpportunity):
* Source/WebCore/layout/formattingContexts/inline/text/TextUtil.cpp:
(WebCore::Layout::TextUtil::mayBreakInBetween):
* Source/WebCore/layout/formattingContexts/inline/text/TextUtil.h:
* Source/WebCore/layout/integration/LayoutIntegrationCoverage.cpp:
(WebCore::LayoutIntegration::canUseForPreferredWidthComputation):
* Source/WebCore/rendering/InlineWalker.h:
(WebCore::InlineWalker::InlineWalker):
* Source/WebCore/rendering/RenderBlockFlow.cpp:
(WebCore::trailingRubyBaseAndAdjacentTextContent):
(WebCore::hasTrailingSoftWrapOpportunity):
(WebCore::RenderBlockFlow::computeInlinePreferredLogicalWidths const):

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