Title: [253435] trunk/Source/WebCore
Revision
253435
Author
[email protected]
Date
2019-12-12 10:27:17 -0800 (Thu, 12 Dec 2019)

Log Message

[LFC][IFC] Fix fast/text/whitespace/023.html
https://bugs.webkit.org/show_bug.cgi?id=205170
<rdar://problem/57881365>

Reviewed by Antti Koivisto.

Do not try to find expansion opportunities in content with preserved whitespace.

* layout/inlineformatting/InlineLineBuilder.cpp:
(WebCore::Layout::LineBuilder::ContinousContent::ContinousContent):
(WebCore::Layout::LineBuilder::ContinousContent::append):
(WebCore::Layout::LineBuilder::ContinousContent::close):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (253434 => 253435)


--- trunk/Source/WebCore/ChangeLog	2019-12-12 18:26:00 UTC (rev 253434)
+++ trunk/Source/WebCore/ChangeLog	2019-12-12 18:27:17 UTC (rev 253435)
@@ -1,3 +1,18 @@
+2019-12-12  Zalan Bujtas  <[email protected]>
+
+        [LFC][IFC] Fix fast/text/whitespace/023.html
+        https://bugs.webkit.org/show_bug.cgi?id=205170
+        <rdar://problem/57881365>
+
+        Reviewed by Antti Koivisto.
+
+        Do not try to find expansion opportunities in content with preserved whitespace.
+
+        * layout/inlineformatting/InlineLineBuilder.cpp:
+        (WebCore::Layout::LineBuilder::ContinousContent::ContinousContent):
+        (WebCore::Layout::LineBuilder::ContinousContent::append):
+        (WebCore::Layout::LineBuilder::ContinousContent::close):
+
 2019-12-12  Patrick Griffis  <[email protected]>
 
         [SOUP] Use new API for strict secure cookies

Modified: trunk/Source/WebCore/layout/inlineformatting/InlineLineBuilder.cpp (253434 => 253435)


--- trunk/Source/WebCore/layout/inlineformatting/InlineLineBuilder.cpp	2019-12-12 18:26:00 UTC (rev 253434)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineLineBuilder.cpp	2019-12-12 18:27:17 UTC (rev 253435)
@@ -36,6 +36,12 @@
 namespace WebCore {
 namespace Layout {
 
+static inline bool isWhitespacePreserved(const RenderStyle& style)
+{
+    auto whitespace = style.whiteSpace();
+    return whitespace == WhiteSpace::Pre || whitespace == WhiteSpace::PreWrap || whitespace == WhiteSpace::BreakSpaces;
+}
+
 struct LineBuilder::ContinousContent {
 public:
     ContinousContent(const InlineItemRun&, bool textIsAlignJustify);
@@ -48,7 +54,7 @@
     bool canBeMerged(const InlineItemRun& run) const { return run.isText() && !run.isCollapsedToZeroAdvanceWidth() && &m_initialInlineRun.layoutBox() == &run.layoutBox(); }
 
     const InlineItemRun& m_initialInlineRun;
-    const bool m_textIsAlignJustify { false };
+    const bool m_collectExpansionOpportunities { false };
     unsigned m_expandedLength { 0 };
     InlineLayoutUnit m_expandedWidth { 0 };
     bool m_trailingRunCanBeExpanded { false };
@@ -58,7 +64,7 @@
 
 LineBuilder::ContinousContent::ContinousContent(const InlineItemRun& initialInlineRun, bool textIsAlignJustify)
     : m_initialInlineRun(initialInlineRun)
-    , m_textIsAlignJustify(textIsAlignJustify)
+    , m_collectExpansionOpportunities(textIsAlignJustify && !isWhitespacePreserved(m_initialInlineRun.style())) // Do not collect expansion data on preserved whitespace content (we should not mutate the spacing between runs in such cases).
     , m_trailingRunCanBeExpanded(canBeExpanded(initialInlineRun))
 {
 }
@@ -77,7 +83,7 @@
     m_expandedLength += inlineItemRun.textContext()->length();
     m_expandedWidth += inlineItemRun.logicalWidth();
 
-    if (m_textIsAlignJustify) {
+    if (m_collectExpansionOpportunities) {
         m_hasTrailingExpansionOpportunity = inlineItemRun.hasExpansionOpportunity();
         if (m_hasTrailingExpansionOpportunity)
             ++m_expansionOpportunityCount;
@@ -95,7 +101,7 @@
     auto length = textContext.length() + m_expandedLength;
     textContext.expand(length);
 
-    if (m_textIsAlignJustify) {
+    if (m_collectExpansionOpportunities) {
         // FIXME: This is a very simple expansion merge. We should eventually switch over to FontCascade::expansionOpportunityCount.
         ExpansionBehavior expansionBehavior = m_hasTrailingExpansionOpportunity ? (ForbidLeadingExpansion | AllowTrailingExpansion) : (AllowLeadingExpansion | AllowTrailingExpansion);
         if (m_initialInlineRun.hasExpansionOpportunity())
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to