Diff
Modified: trunk/Source/WebCore/ChangeLog (267514 => 267515)
--- trunk/Source/WebCore/ChangeLog 2020-09-24 02:46:41 UTC (rev 267514)
+++ trunk/Source/WebCore/ChangeLog 2020-09-24 03:15:01 UTC (rev 267515)
@@ -1,3 +1,22 @@
+2020-09-23 Zalan Bujtas <[email protected]>
+
+ [LFC][Integration] Line layout logic should consult LayoutState whether remove trailing letter spacing.
+ https://bugs.webkit.org/show_bug.cgi?id=216905
+
+ Reviewed by Sam Weinig.
+
+ This is in preparation for completely moving away from the RuntimeEnabledFeatures check.
+
+ * layout/LayoutState.cpp:
+ (WebCore::Layout::LayoutState::shouldIgnoreTrailingLetterSpacing const):
+ * layout/LayoutState.h:
+ * layout/inlineformatting/InlineLine.cpp:
+ (WebCore::Layout::Line::Line):
+ (WebCore::Layout::Line::appendTextContent):
+ * layout/inlineformatting/InlineLine.h:
+ * layout/inlineformatting/InlineLineBuilder.cpp:
+ (WebCore::Layout::LineCandidate::InlineContent::appendInlineItem):
+
2020-09-20 Simon Fraser <[email protected]>
[LFC Display] Add the beginnings of a CSS display box hierarchy and CSS painter
Modified: trunk/Source/WebCore/layout/LayoutState.cpp (267514 => 267515)
--- trunk/Source/WebCore/layout/LayoutState.cpp 2020-09-24 02:46:41 UTC (rev 267514)
+++ trunk/Source/WebCore/layout/LayoutState.cpp 2020-09-24 03:15:01 UTC (rev 267515)
@@ -239,7 +239,12 @@
m_isIntegratedRootBoxFirstChild = value ? IsIntegratedRootBoxFirstChild::Yes : IsIntegratedRootBoxFirstChild::No;
}
+bool LayoutState::shouldIgnoreTrailingLetterSpacing() const
+{
+ return RuntimeEnabledFeatures::sharedFeatures().layoutFormattingContextIntegrationEnabled();
}
+
}
+}
#endif
Modified: trunk/Source/WebCore/layout/LayoutState.h (267514 => 267515)
--- trunk/Source/WebCore/layout/LayoutState.h 2020-09-24 02:46:41 UTC (rev 267514)
+++ trunk/Source/WebCore/layout/LayoutState.h 2020-09-24 03:15:01 UTC (rev 267515)
@@ -92,6 +92,7 @@
enum IsIntegratedRootBoxFirstChild { Yes, No, NotApplicable };
IsIntegratedRootBoxFirstChild isIntegratedRootBoxFirstChild() const { return m_isIntegratedRootBoxFirstChild; }
void setIsIntegratedRootBoxFirstChild(bool);
+ bool shouldIgnoreTrailingLetterSpacing() const;
private:
void setQuirksMode(QuirksMode quirksMode) { m_quirksMode = quirksMode; }
Modified: trunk/Source/WebCore/layout/inlineformatting/InlineLine.cpp (267514 => 267515)
--- trunk/Source/WebCore/layout/inlineformatting/InlineLine.cpp 2020-09-24 02:46:41 UTC (rev 267514)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineLine.cpp 2020-09-24 03:15:01 UTC (rev 267515)
@@ -31,7 +31,6 @@
#include "InlineFormattingContext.h"
#include "InlineSoftLineBreakItem.h"
#include "LayoutBoxGeometry.h"
-#include "RuntimeEnabledFeatures.h"
#include "TextFlags.h"
#include "TextUtil.h"
#include <wtf/IsoMallocInlines.h>
@@ -48,7 +47,6 @@
Line::Line(const InlineFormattingContext& inlineFormattingContext)
: m_inlineFormattingContext(inlineFormattingContext)
, m_trimmableTrailingContent(m_runs)
- , m_shouldIgnoreTrailingLetterSpacing(RuntimeEnabledFeatures::sharedFeatures().layoutFormattingContextIntegrationEnabled())
{
}
@@ -317,7 +315,7 @@
}
// Any non-whitespace, no-trimmable content resets the existing trimmable.
m_trimmableTrailingContent.reset();
- if (!m_shouldIgnoreTrailingLetterSpacing && !inlineTextItem.isWhitespace() && inlineTextItem.style().letterSpacing() > 0)
+ if (!formattingContext().layoutState().shouldIgnoreTrailingLetterSpacing() && !inlineTextItem.isWhitespace() && inlineTextItem.style().letterSpacing() > 0)
m_trimmableTrailingContent.addPartiallyTrimmableContent(m_runs.size() - 1, logicalWidth);
}
Modified: trunk/Source/WebCore/layout/inlineformatting/InlineLine.h (267514 => 267515)
--- trunk/Source/WebCore/layout/inlineformatting/InlineLine.h 2020-09-24 02:46:41 UTC (rev 267514)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineLine.h 2020-09-24 03:15:01 UTC (rev 267515)
@@ -181,7 +181,6 @@
InlineLayoutUnit m_contentLogicalWidth { 0 };
bool m_isVisuallyEmpty { true };
Optional<bool> m_lineIsVisuallyEmptyBeforeTrimmableTrailingContent;
- bool m_shouldIgnoreTrailingLetterSpacing { false };
};
inline void Line::TrimmableTrailingContent::reset()
Modified: trunk/Source/WebCore/layout/inlineformatting/InlineLineBuilder.cpp (267514 => 267515)
--- trunk/Source/WebCore/layout/inlineformatting/InlineLineBuilder.cpp 2020-09-24 02:46:41 UTC (rev 267514)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineLineBuilder.cpp 2020-09-24 03:15:01 UTC (rev 267515)
@@ -33,7 +33,6 @@
#include "LayoutBox.h"
#include "LayoutBoxGeometry.h"
#include "LayoutState.h"
-#include "RuntimeEnabledFeatures.h"
#include "TextUtil.h"
namespace WebCore {
@@ -177,9 +176,13 @@
}
struct LineCandidate {
+ LineCandidate(bool ignoreTrailingLetterSpacing);
+
void reset();
struct InlineContent {
+ InlineContent(bool ignoreTrailingLetterSpacing);
+
const LineBreaker::RunList& runs() const { return m_inlineRuns; }
InlineLayoutUnit logicalWidth() const { return m_LogicalWidth; }
InlineLayoutUnit collapsibleTrailingWidth() const { return m_collapsibleTrailingWidth; }
@@ -192,6 +195,7 @@
private:
void setTrailingLineBreak(const InlineItem& lineBreakItem) { m_trailingLineBreak = &lineBreakItem; }
+ bool m_ignoreTrailingLetterSpacing { false };
InlineLayoutUnit m_LogicalWidth { 0 };
InlineLayoutUnit m_collapsibleTrailingWidth { 0 };
LineBreaker::RunList m_inlineRuns;
@@ -221,6 +225,16 @@
FloatContent floatContent;
};
+LineCandidate::LineCandidate(bool ignoreTrailingLetterSpacing)
+ : inlineContent(ignoreTrailingLetterSpacing)
+{
+}
+
+LineCandidate::InlineContent::InlineContent(bool ignoreTrailingLetterSpacing)
+ : m_ignoreTrailingLetterSpacing(ignoreTrailingLetterSpacing)
+{
+}
+
inline void LineCandidate::InlineContent::appendInlineItem(const InlineItem& inlineItem, InlineLayoutUnit logicalWidth)
{
m_LogicalWidth += logicalWidth;
@@ -241,7 +255,7 @@
}
auto partiallyCollapsibleTrailingWidth = [&]() -> InlineLayoutUnit {
- if (RuntimeEnabledFeatures::sharedFeatures().layoutFormattingContextIntegrationEnabled())
+ if (m_ignoreTrailingLetterSpacing)
return { };
if (!inlineItem.isText())
return { };
@@ -363,7 +377,7 @@
LineBuilder::CommittedContent LineBuilder::placeInlineContent(const InlineItemRange& needsLayoutRange, Optional<unsigned> partialLeadingContentLength)
{
- auto lineCandidate = LineCandidate { };
+ auto lineCandidate = LineCandidate { layoutState().shouldIgnoreTrailingLetterSpacing() };
auto lineBreaker = LineBreaker { };
auto currentItemIndex = needsLayoutRange.start;