Title: [287395] trunk/Source/WebCore
- Revision
- 287395
- Author
- za...@apple.com
- Date
- 2021-12-23 07:07:24 -0800 (Thu, 23 Dec 2021)
Log Message
[LFC][IFC] Do not try to bidi reorder empty content
https://bugs.webkit.org/show_bug.cgi?id=234623
Reviewed by Antti Koivisto.
* layout/formattingContexts/inline/InlineItemsBuilder.cpp:
(WebCore::Layout::buildBidiParagraph):
(WebCore::Layout::InlineItemsBuilder::breakAndComputeBidiLevels):
* layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp:
(WebCore::Layout::InlineDisplayContentBuilder::processNonBidiContent):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (287394 => 287395)
--- trunk/Source/WebCore/ChangeLog 2021-12-23 14:42:49 UTC (rev 287394)
+++ trunk/Source/WebCore/ChangeLog 2021-12-23 15:07:24 UTC (rev 287395)
@@ -1,5 +1,18 @@
2021-12-23 Alan Bujtas <za...@apple.com>
+ [LFC][IFC] Do not try to bidi reorder empty content
+ https://bugs.webkit.org/show_bug.cgi?id=234623
+
+ Reviewed by Antti Koivisto.
+
+ * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
+ (WebCore::Layout::buildBidiParagraph):
+ (WebCore::Layout::InlineItemsBuilder::breakAndComputeBidiLevels):
+ * layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp:
+ (WebCore::Layout::InlineDisplayContentBuilder::processNonBidiContent):
+
+2021-12-23 Alan Bujtas <za...@apple.com>
+
[LFC][IFC] Empty bidi inline boxes should not make the line taller
https://bugs.webkit.org/show_bug.cgi?id=234621
Modified: trunk/Source/WebCore/layout/formattingContexts/inline/InlineItemsBuilder.cpp (287394 => 287395)
--- trunk/Source/WebCore/layout/formattingContexts/inline/InlineItemsBuilder.cpp 2021-12-23 14:42:49 UTC (rev 287394)
+++ trunk/Source/WebCore/layout/formattingContexts/inline/InlineItemsBuilder.cpp 2021-12-23 15:07:24 UTC (rev 287395)
@@ -238,8 +238,7 @@
} else if (inlineItem.isBox()) {
inlineItemOffsetList.uncheckedAppend({ paragraphContentBuilder.length() });
paragraphContentBuilder.append(objectReplacementCharacter);
- }
- else if (inlineItem.isInlineBoxStart() || inlineItem.isInlineBoxEnd()) {
+ } else if (inlineItem.isInlineBoxStart() || inlineItem.isInlineBoxEnd()) {
// https://drafts.csswg.org/css-writing-modes/#unicode-bidi
auto& style = inlineItem.style();
auto initiatesControlCharacter = style.rtlOrdering() == Order::Logical && style.unicodeBidi() != EUnicodeBidi::UBNormal;
@@ -290,6 +289,12 @@
InlineItemOffsetList inlineItemOffsets;
inlineItemOffsets.reserveInitialCapacity(inlineItems.size());
buildBidiParagraph(root().style(), inlineItems, paragraphContentBuilder, inlineItemOffsets);
+ if (paragraphContentBuilder.isEmpty()) {
+ // Style may trigger visual reordering even on a completely empty content.
+ // e.g. <div><span style="direction:rtl"></span></div>
+ // Let's not try to do bidi handling when there's no content to reorder.
+ return;
+ }
ASSERT(inlineItemOffsets.size() == inlineItems.size());
// 1. Setup the bidi boundary loop by calling ubidi_setPara with the paragraph text.
// 2. Call ubidi_getLogicalRun to advance to the next bidi boundary until we hit the end of the content.
Modified: trunk/Source/WebCore/layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp (287394 => 287395)
--- trunk/Source/WebCore/layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp 2021-12-23 14:42:49 UTC (rev 287394)
+++ trunk/Source/WebCore/layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp 2021-12-23 15:07:24 UTC (rev 287395)
@@ -319,7 +319,12 @@
void InlineDisplayContentBuilder::processNonBidiContent(const LineBuilder::LineContent& lineContent, const LineBox& lineBox, const InlineDisplay::Line& displayLine, DisplayBoxes& boxes)
{
- ASSERT(root().style().isLeftToRightDirection());
+#ifndef NDEBUG
+ auto hasContent = false;
+ for (auto& lineRun : lineContent.runs)
+ hasContent = hasContent || lineRun.isText() || lineRun.isBox();
+ ASSERT(root().style().isLeftToRightDirection() || !hasContent);
+#endif
auto lineBoxRect = displayLine.lineBoxRect();
auto contentStartInVisualOrder = lineBoxRect.left() + displayLine.contentLeft();
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes