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