Changeset 285930 in webkit
- Timestamp:
- Nov 17, 2021, 7:10:51 AM (5 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 5 edited
-
ChangeLog (modified) (1 diff)
-
layout/formattingContexts/inline/InlineContentBreaker.cpp (modified) (2 diffs)
-
layout/formattingContexts/inline/InlineContentBreaker.h (modified) (2 diffs)
-
layout/formattingContexts/inline/InlineLineBuilder.cpp (modified) (4 diffs)
-
layout/formattingContexts/inline/InlineLineBuilder.h (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r285927 r285930 1 2021-11-17 Alan Bujtas <zalan@apple.com> 2 3 [LFC][IFC] break-word is not considered when calculating min-content intrinsic sizes. 4 https://bugs.webkit.org/show_bug.cgi?id=233222 5 6 Reviewed by Antti Koivisto. 7 8 See https://drafts.csswg.org/css-text/#overflow-wrap-property 9 10 * layout/formattingContexts/inline/InlineContentBreaker.cpp: 11 (WebCore::Layout::InlineContentBreaker::InlineContentBreaker): 12 (WebCore::Layout::InlineContentBreaker::wordBreakBehavior const): 13 * layout/formattingContexts/inline/InlineContentBreaker.h: 14 (WebCore::Layout::InlineContentBreaker::isIntrinsicWidthMode const): 15 * layout/formattingContexts/inline/InlineLineBuilder.cpp: 16 (WebCore::Layout::LineBuilder::placeInlineContent): 17 (WebCore::Layout::LineBuilder::initialConstraintsForLine const): 18 * layout/formattingContexts/inline/InlineLineBuilder.h: 19 (WebCore::Layout::LineBuilder::isIntrinsicWidthMode const): 20 1 21 2021-11-17 Youenn Fablet <youenn@apple.com> 2 22 -
trunk/Source/WebCore/layout/formattingContexts/inline/InlineContentBreaker.cpp
r284857 r285930 124 124 } 125 125 return { }; 126 } 127 128 InlineContentBreaker::InlineContentBreaker(bool isInIntrinsicWidthMode) 129 : m_isInIntrinsicWidthMode(isInIntrinsicWidthMode) 130 { 126 131 } 127 132 … … 647 652 return { }; 648 653 }; 654 655 // Soft wrap opportunities introduced by break-word are not considered when calculating min-content intrinsic sizes. 656 auto breakWordIsApplicable = !isInIntrinsicWidthMode(); 649 657 // For compatibility with legacy content, the word-break property also supports a deprecated break-word keyword. 650 658 // When specified, this has the same effect as word-break: normal and overflow-wrap: anywhere, regardless of the actual value of the overflow-wrap property. 651 if ( style.wordBreak() == WordBreak::BreakWord&& !hasWrapOpportunityAtPreviousPosition)659 if ((breakWordIsApplicable && style.wordBreak() == WordBreak::BreakWord) && !hasWrapOpportunityAtPreviousPosition) 652 660 return includeHyphenationIfAllowed(WordBreakRule::AtArbitraryPosition); 653 661 // OverflowWrap::BreakWord/Anywhere An otherwise unbreakable sequence of characters may be broken at an arbitrary point if there are no otherwise-acceptable break points in the line. 654 662 // Note that this applies to content where CSS properties (e.g. WordBreak::KeepAll) make it unbreakable. 655 if (( style.overflowWrap() == OverflowWrap::BreakWord|| style.overflowWrap() == OverflowWrap::Anywhere) && !hasWrapOpportunityAtPreviousPosition)663 if (((breakWordIsApplicable && style.overflowWrap() == OverflowWrap::BreakWord) || style.overflowWrap() == OverflowWrap::Anywhere) && !hasWrapOpportunityAtPreviousPosition) 656 664 return includeHyphenationIfAllowed(WordBreakRule::AtArbitraryPosition); 657 665 // Breaking is forbidden within “words”. -
trunk/Source/WebCore/layout/formattingContexts/inline/InlineContentBreaker.h
r284678 r285930 39 39 class InlineContentBreaker { 40 40 public: 41 InlineContentBreaker(bool isInIntrinsicWidthMode); 42 41 43 struct PartialRun { 42 44 size_t length { 0 }; … … 149 151 OptionSet<WordBreakRule> wordBreakBehavior(const RenderStyle&, bool hasWrapOpportunityAtPreviousPosition) const; 150 152 bool shouldKeepEndOfLineWhitespace(const ContinuousContent&) const; 153 bool isInIntrinsicWidthMode() const { return m_isInIntrinsicWidthMode; } 151 154 155 bool m_isInIntrinsicWidthMode { false }; 152 156 bool n_hyphenationIsDisabled { false }; 153 157 }; -
trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBuilder.cpp
r285926 r285930 269 269 } 270 270 271 LineBuilder::LineBuilder(InlineFormattingContext& inlineFormattingContext, FloatingState& floatingState, HorizontalConstraints rootHorizontalConstraints, const InlineItems& inlineItems, IsIn trinsicWidthMode isIntrinsicWidthMode)272 : m_isIn trinsicWidthMode(isIntrinsicWidthMode == IsIntrinsicWidthMode::Yes)271 LineBuilder::LineBuilder(InlineFormattingContext& inlineFormattingContext, FloatingState& floatingState, HorizontalConstraints rootHorizontalConstraints, const InlineItems& inlineItems, IsInIntrinsicWidthMode isInIntrinsicWidthMode) 272 : m_isInIntrinsicWidthMode(isInIntrinsicWidthMode == IsInIntrinsicWidthMode::Yes) 273 273 , m_inlineFormattingContext(inlineFormattingContext) 274 274 , m_inlineFormattingState(&inlineFormattingContext.formattingState()) … … 280 280 } 281 281 282 LineBuilder::LineBuilder(const InlineFormattingContext& inlineFormattingContext, const InlineItems& inlineItems, IsIn trinsicWidthMode isIntrinsicWidthMode)283 : m_isIn trinsicWidthMode(isIntrinsicWidthMode == IsIntrinsicWidthMode::Yes)282 LineBuilder::LineBuilder(const InlineFormattingContext& inlineFormattingContext, const InlineItems& inlineItems, IsInIntrinsicWidthMode isInIntrinsicWidthMode) 283 : m_isInIntrinsicWidthMode(isInIntrinsicWidthMode == IsInIntrinsicWidthMode::Yes) 284 284 , m_inlineFormattingContext(inlineFormattingContext) 285 285 , m_line(inlineFormattingContext) … … 393 393 { 394 394 auto lineCandidate = LineCandidate { layoutState().shouldIgnoreTrailingLetterSpacing() }; 395 auto inlineContentBreaker = InlineContentBreaker { };395 auto inlineContentBreaker = InlineContentBreaker { isInIntrinsicWidthMode() }; 396 396 397 397 auto currentItemIndex = needsLayoutRange.start; … … 551 551 if (textIndent == RenderStyle::initialTextIndent()) 552 552 return { }; 553 if ( m_isIntrinsicWidthMode&& textIndent.isPercent()) {553 if (isInIntrinsicWidthMode() && textIndent.isPercent()) { 554 554 // Percentages must be treated as 0 for the purpose of calculating intrinsic size contributions. 555 555 // https://drafts.csswg.org/css-text/#text-indent-property -
trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBuilder.h
r285860 r285930 40 40 class LineBuilder { 41 41 public: 42 enum class IsIn trinsicWidthMode { No, Yes };43 LineBuilder(InlineFormattingContext&, FloatingState&, HorizontalConstraints rootHorizontalConstraints, const InlineItems&, IsIn trinsicWidthMode = IsIntrinsicWidthMode::No);44 LineBuilder(const InlineFormattingContext&, const InlineItems&, IsIn trinsicWidthMode = IsIntrinsicWidthMode::Yes);42 enum class IsInIntrinsicWidthMode { No, Yes }; 43 LineBuilder(InlineFormattingContext&, FloatingState&, HorizontalConstraints rootHorizontalConstraints, const InlineItems&, IsInIntrinsicWidthMode = IsInIntrinsicWidthMode::No); 44 LineBuilder(const InlineFormattingContext&, const InlineItems&, IsInIntrinsicWidthMode = IsInIntrinsicWidthMode::Yes); 45 45 46 46 struct InlineItemRange { … … 113 113 bool isLastLineWithInlineContent(const InlineItemRange& lineRange, size_t lastInlineItemIndex, bool hasPartialTrailingContent) const; 114 114 115 bool isInIntrinsicWidthMode() const { return m_isInIntrinsicWidthMode; } 116 115 117 const InlineFormattingContext& formattingContext() const { return m_inlineFormattingContext; } 116 118 InlineFormattingState* formattingState() { return m_inlineFormattingState; } … … 122 124 private: 123 125 bool m_isFirstLine { false }; 124 bool m_isIn trinsicWidthMode { false };126 bool m_isInIntrinsicWidthMode { false }; 125 127 const InlineFormattingContext& m_inlineFormattingContext; 126 128 InlineFormattingState* m_inlineFormattingState { nullptr };
Note:
See TracChangeset
for help on using the changeset viewer.