Issue #2792 -Implements parsing, computed style, and writing mode mapping for overflow-block and overflow-inline properties

This commit is contained in:
MeladJM
2025-07-17 05:01:34 +08:00
committed by roytam1
parent c8608ad5cf
commit 0903dacaa7
5 changed files with 103 additions and 0 deletions
+22
View File
@@ -4553,6 +4553,28 @@ CSS_PROP_POSITION(
nullptr,
offsetof(nsStylePosition, mZIndex),
eStyleAnimType_Coord)
CSS_PROP_DISPLAY(
overflow-block,
overflow_block,
OverflowBlock,
CSS_PROPERTY_PARSE_VALUE |
CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
"",
VARIANT_HK,
kOverflowSubKTable,
CSS_PROP_NO_OFFSET,
eStyleAnimType_Discrete)
CSS_PROP_DISPLAY(
overflow-inline,
overflow_inline,
OverflowInline,
CSS_PROPERTY_PARSE_VALUE |
CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
"",
VARIANT_HK,
kOverflowSubKTable,
CSS_PROP_NO_OFFSET,
eStyleAnimType_Discrete)
#ifdef USED_CSS_PROP
+52
View File
@@ -6791,4 +6791,56 @@ nsComputedDOMStyle::UnregisterPrefChangeCallbacks()
#undef UNREGISTER_CALLBACK
}
already_AddRefed<CSSValue>
nsComputedDOMStyle::DoGetOverflowBlock()
{
RefPtr<nsROCSSPrimitiveValue> val = new nsROCSSPrimitiveValue;
uint8_t writingMode = StyleVisibility()->mWritingMode;
bool isVertical = writingMode == NS_STYLE_WRITING_MODE_VERTICAL_LR ||
writingMode == NS_STYLE_WRITING_MODE_VERTICAL_RL ||
writingMode == NS_STYLE_WRITING_MODE_SIDEWAYS_LR ||
writingMode == NS_STYLE_WRITING_MODE_SIDEWAYS_RL;
auto overflow = isVertical ? StyleDisplay()->mOverflowX : StyleDisplay()->mOverflowY;
val->SetIdent(nsCSSProps::ValueToKeywordEnum(overflow, nsCSSProps::kOverflowSubKTable));
return val.forget();
}
already_AddRefed<CSSValue>
nsComputedDOMStyle::DoGetOverflowInline()
{
RefPtr<nsROCSSPrimitiveValue> val = new nsROCSSPrimitiveValue;
uint8_t writingMode = StyleVisibility()->mWritingMode;
bool isVertical = writingMode == NS_STYLE_WRITING_MODE_VERTICAL_LR ||
writingMode == NS_STYLE_WRITING_MODE_VERTICAL_RL ||
writingMode == NS_STYLE_WRITING_MODE_SIDEWAYS_LR ||
writingMode == NS_STYLE_WRITING_MODE_SIDEWAYS_RL;
auto overflow = isVertical ? StyleDisplay()->mOverflowY : StyleDisplay()->mOverflowX;
val->SetIdent(nsCSSProps::ValueToKeywordEnum(overflow, nsCSSProps::kOverflowSubKTable));
return val.forget();
}
already_AddRefed<CSSValue>
nsComputedDOMStyle::DoGetOverflowInlineStart()
{
return DoGetOverflowInline();
}
already_AddRefed<CSSValue>
nsComputedDOMStyle::DoGetOverflowInlineEnd()
{
return DoGetOverflowInline();
}
already_AddRefed<CSSValue>
nsComputedDOMStyle::DoGetOverflowBlockStart()
{
return DoGetOverflowBlock();
}
already_AddRefed<CSSValue>
nsComputedDOMStyle::DoGetOverflowBlockEnd()
{
return DoGetOverflowBlock();
}
+6
View File
@@ -461,6 +461,12 @@ private:
already_AddRefed<CSSValue> DoGetOverflow();
already_AddRefed<CSSValue> DoGetOverflowX();
already_AddRefed<CSSValue> DoGetOverflowY();
already_AddRefed<CSSValue> DoGetOverflowInline();
already_AddRefed<CSSValue> DoGetOverflowBlock();
already_AddRefed<CSSValue> DoGetOverflowInlineStart();
already_AddRefed<CSSValue> DoGetOverflowInlineEnd();
already_AddRefed<CSSValue> DoGetOverflowBlockStart();
already_AddRefed<CSSValue> DoGetOverflowBlockEnd();
already_AddRefed<CSSValue> DoGetOverflowClipBox();
already_AddRefed<CSSValue> DoGetResize();
already_AddRefed<CSSValue> DoGetPageBreakAfter();
@@ -199,6 +199,8 @@ COMPUTED_STYLE_PROP(overflow_clip_box, OverflowClipBox)
COMPUTED_STYLE_PROP(overflow_wrap, OverflowWrap)
COMPUTED_STYLE_PROP(overflow_x, OverflowX)
COMPUTED_STYLE_PROP(overflow_y, OverflowY)
COMPUTED_STYLE_PROP(overflow_inline, OverflowInline)
COMPUTED_STYLE_PROP(overflow_block, OverflowBlock)
//// COMPUTED_STYLE_PROP(padding, Padding)
COMPUTED_STYLE_PROP(padding_bottom, PaddingBottom)
COMPUTED_STYLE_PROP(padding_left, PaddingLeft)
+21
View File
@@ -6405,6 +6405,27 @@ nsRuleNode::ComputeDisplayData(void* aStartStruct,
SETVAL_ENUMERATED | SETVAL_UNSET_INITIAL,
parentDisplay->mOverflowY,
NS_STYLE_OVERFLOW_VISIBLE);
// overflow-inline: enum, inherit, initial
// For simplicity, map overflow-inline to overflow-x for now (horizontal writing mode assumption)
const nsCSSValue* overflowInlineValue = aRuleData->ValueForOverflowInline();
if (overflowInlineValue->GetUnit() != eCSSUnit_Null) {
SetValue(*overflowInlineValue,
display->mOverflowX, conditions,
SETVAL_ENUMERATED | SETVAL_UNSET_INITIAL,
parentDisplay->mOverflowX,
NS_STYLE_OVERFLOW_VISIBLE);
}
// overflow-block: enum, inherit, initial
// For simplicity, map overflow-block to overflow-y for now (horizontal writing mode assumption)
const nsCSSValue* overflowBlockValue = aRuleData->ValueForOverflowBlock();
if (overflowBlockValue->GetUnit() != eCSSUnit_Null) {
SetValue(*overflowBlockValue,
display->mOverflowY, conditions,
SETVAL_ENUMERATED | SETVAL_UNSET_INITIAL,
parentDisplay->mOverflowY,
NS_STYLE_OVERFLOW_VISIBLE);
}
// The visible/clip values of overflow compute to auto/hidden (respectively)
// if one of overflow-x or overflow-y is neither visible nor clip.