Issue #1666 - Implement overflow-wrap: anywhere

This aligns with the current spec regarding overflow-wrap: break-word and
overflow-wrap: anywhere in if it affects intrinsic sized due to considering
soft-wrap opportunities or not.
See CSS Text Module Level 3, Editor’s Draft, 1 October 2020, Section 5.5
This commit is contained in:
Moonchild 2020-10-03 14:52:47 +00:00 • committed by roytam1
commit d602cb077b
5 changed files with 11 additions and 4 deletions

View file

@ -8243,8 +8243,9 @@ nsTextFrame::AddInlineMinISizeForFlow(nsRenderingContext *aRenderingContext,
return; return;
} }
// If overflow-wrap is break-word, we can wrap everywhere. // If overflow-wrap is 'anywhere', we can wrap everywhere.
if (textStyle->WordCanWrap(this)) { if (textStyle->mOverflowWrap == NS_STYLE_OVERFLOWWRAP_ANYWHERE &&
textStyle->WordCanWrap(this)) {
aData->OptionallyBreak(); aData->OptionallyBreak();
aData->mCurrentLine += aData->mCurrentLine +=
textRun->GetMinAdvanceWidth(Range(start, flowEndInTextRun)); textRun->GetMinAdvanceWidth(Range(start, flowEndInTextRun));

View file

@ -144,6 +144,7 @@ CSS_KEY(alternate, alternate)
CSS_KEY(alternate-reverse, alternate_reverse) CSS_KEY(alternate-reverse, alternate_reverse)
CSS_KEY(always, always) CSS_KEY(always, always)
CSS_KEY(annotation, annotation) CSS_KEY(annotation, annotation)
CSS_KEY(anywhere, anywhere)
CSS_KEY(appworkspace, appworkspace) CSS_KEY(appworkspace, appworkspace)
CSS_KEY(auto, auto) CSS_KEY(auto, auto)
CSS_KEY(auto-fill, auto_fill) CSS_KEY(auto-fill, auto_fill)

View file

@ -2284,6 +2284,7 @@ const KTableEntry nsCSSProps::kWordBreakKTable[] = {
const KTableEntry nsCSSProps::kOverflowWrapKTable[] = { const KTableEntry nsCSSProps::kOverflowWrapKTable[] = {
{ eCSSKeyword_normal, NS_STYLE_OVERFLOWWRAP_NORMAL }, { eCSSKeyword_normal, NS_STYLE_OVERFLOWWRAP_NORMAL },
{ eCSSKeyword_break_word, NS_STYLE_OVERFLOWWRAP_BREAK_WORD }, { eCSSKeyword_break_word, NS_STYLE_OVERFLOWWRAP_BREAK_WORD },
{ eCSSKeyword_anywhere, NS_STYLE_OVERFLOWWRAP_ANYWHERE },
{ eCSSKeyword_UNKNOWN, -1 } { eCSSKeyword_UNKNOWN, -1 }
}; };

View file

@ -997,6 +997,7 @@ enum class StyleDisplay : uint8_t {
// See nsStyleText // See nsStyleText
#define NS_STYLE_OVERFLOWWRAP_NORMAL 0 #define NS_STYLE_OVERFLOWWRAP_NORMAL 0
#define NS_STYLE_OVERFLOWWRAP_BREAK_WORD 1 #define NS_STYLE_OVERFLOWWRAP_BREAK_WORD 1
#define NS_STYLE_OVERFLOWWRAP_ANYWHERE 2
// See nsStyleText // See nsStyleText
#define NS_STYLE_HYPHENS_NONE 0 #define NS_STYLE_HYPHENS_NONE 0

View file

@ -2133,8 +2133,11 @@ struct MOZ_NEEDS_MEMMOVABLE_MEMBERS nsStyleText
} }
bool WordCanWrapStyle() const { bool WordCanWrapStyle() const {
return WhiteSpaceCanWrapStyle() && if (!WhiteSpaceCanWrapStyle()) {
mOverflowWrap == NS_STYLE_OVERFLOWWRAP_BREAK_WORD; return false;
}
return (mOverflowWrap == NS_STYLE_OVERFLOWWRAP_BREAK_WORD ||
mOverflowWrap == NS_STYLE_OVERFLOWWRAP_ANYWHERE);
} }
bool HasTextEmphasis() const { bool HasTextEmphasis() const {