diff --git a/layout/style/nsCSSPropList.h b/layout/style/nsCSSPropList.h index aaf2ee39df..b4a24ca0d1 100644 --- a/layout/style/nsCSSPropList.h +++ b/layout/style/nsCSSPropList.h @@ -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 diff --git a/layout/style/nsComputedDOMStyle.cpp b/layout/style/nsComputedDOMStyle.cpp index ceeb763c87..686ea6a1f5 100644 --- a/layout/style/nsComputedDOMStyle.cpp +++ b/layout/style/nsComputedDOMStyle.cpp @@ -6791,4 +6791,56 @@ nsComputedDOMStyle::UnregisterPrefChangeCallbacks() #undef UNREGISTER_CALLBACK } +already_AddRefed +nsComputedDOMStyle::DoGetOverflowBlock() +{ + RefPtr 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 +nsComputedDOMStyle::DoGetOverflowInline() +{ + RefPtr 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 +nsComputedDOMStyle::DoGetOverflowInlineStart() +{ + return DoGetOverflowInline(); +} + +already_AddRefed +nsComputedDOMStyle::DoGetOverflowInlineEnd() +{ + return DoGetOverflowInline(); +} + +already_AddRefed +nsComputedDOMStyle::DoGetOverflowBlockStart() +{ + return DoGetOverflowBlock(); +} + +already_AddRefed +nsComputedDOMStyle::DoGetOverflowBlockEnd() +{ + return DoGetOverflowBlock(); +} + diff --git a/layout/style/nsComputedDOMStyle.h b/layout/style/nsComputedDOMStyle.h index f256d22a50..718a38ff47 100644 --- a/layout/style/nsComputedDOMStyle.h +++ b/layout/style/nsComputedDOMStyle.h @@ -461,6 +461,12 @@ private: already_AddRefed DoGetOverflow(); already_AddRefed DoGetOverflowX(); already_AddRefed DoGetOverflowY(); + already_AddRefed DoGetOverflowInline(); + already_AddRefed DoGetOverflowBlock(); + already_AddRefed DoGetOverflowInlineStart(); + already_AddRefed DoGetOverflowInlineEnd(); + already_AddRefed DoGetOverflowBlockStart(); + already_AddRefed DoGetOverflowBlockEnd(); already_AddRefed DoGetOverflowClipBox(); already_AddRefed DoGetResize(); already_AddRefed DoGetPageBreakAfter(); diff --git a/layout/style/nsComputedDOMStylePropertyList.h b/layout/style/nsComputedDOMStylePropertyList.h index a17a6a8223..db0a68c660 100644 --- a/layout/style/nsComputedDOMStylePropertyList.h +++ b/layout/style/nsComputedDOMStylePropertyList.h @@ -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) diff --git a/layout/style/nsRuleNode.cpp b/layout/style/nsRuleNode.cpp index 7a88ec1a27..a0a5ec1fd6 100644 --- a/layout/style/nsRuleNode.cpp +++ b/layout/style/nsRuleNode.cpp @@ -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.