| Index: Source/core/css/ComputedStyleCSSValueMapping.cpp
|
| diff --git a/Source/core/css/ComputedStyleCSSValueMapping.cpp b/Source/core/css/ComputedStyleCSSValueMapping.cpp
|
| index 82532dc88963bb1740096e99e70aa4047022c1e8..176df509d6c67e8cca9a65dc035ac4d44507d09c 100644
|
| --- a/Source/core/css/ComputedStyleCSSValueMapping.cpp
|
| +++ b/Source/core/css/ComputedStyleCSSValueMapping.cpp
|
| @@ -382,12 +382,40 @@ static PassRefPtrWillBeRawPtr<CSSValue> valueForReflection(const StyleReflection
|
| return CSSReflectValue::create(direction.release(), offset.release(), valueForNinePieceImage(reflection->mask(), style));
|
| }
|
|
|
| -static ItemPosition resolveAlignmentAuto(ItemPosition position, Node* element)
|
| +static ItemPosition resolveContainerAlignmentAuto(ItemPosition position, const LayoutObject* element)
|
| {
|
| - if (position != ItemPositionAuto)
|
| + if (position != ItemPositionAuto || !element)
|
| return position;
|
|
|
| - return isFlexOrGrid(element) ? ItemPositionStretch : ItemPositionStart;
|
| + LayoutBlock* container = element->containingBlock();
|
| + if (container && container->style()->justifyItemsPositionType() == LegacyPosition)
|
| + return container->style()->justifyItemsPosition();
|
| +
|
| + return element->style()->isDisplayFlexibleOrGridBox() ? ItemPositionStretch : ItemPositionStart;
|
| +}
|
| +
|
| +static ItemPosition resolveSelfAlignmentAuto(ItemPosition position, OverflowAlignment& overflow, const LayoutObject* element)
|
| +{
|
| + if (position != ItemPositionAuto || !element || element->isOutOfFlowPositioned())
|
| + return position;
|
| +
|
| + LayoutBlock* parent = element->containingBlock();
|
| + if (!parent)
|
| + return ItemPositionStart;
|
| +
|
| + overflow = parent->style()->alignItemsOverflowAlignment();
|
| + return resolveContainerAlignmentAuto(parent->style()->alignItemsPosition(), parent);
|
| +}
|
| +
|
| +static void resolveContentAlignmentAuto(ContentPosition& position, ContentDistributionType& distribution, const LayoutObject* element)
|
| +{
|
| + if (position != ContentPositionAuto || distribution != ContentDistributionDefault)
|
| + return;
|
| +
|
| + if (element && element->style()->isDisplayFlexibleBox())
|
| + distribution = ContentDistributionStretch;
|
| + else
|
| + position = ContentPositionStart;
|
| }
|
|
|
| static PassRefPtrWillBeRawPtr<CSSValueList> valueForItemPositionWithOverflowAlignment(ItemPosition itemPosition, OverflowAlignment overflowAlignment, ItemPositionType positionType)
|
| @@ -451,17 +479,6 @@ static PassRefPtrWillBeRawPtr<CSSValueList> valuesForBackgroundShorthand(const C
|
| return ret.release();
|
| }
|
|
|
| -static ContentPosition resolveContentAlignmentAuto(ContentPosition position, ContentDistributionType distribution, Node* element)
|
| -{
|
| - if (position != ContentPositionAuto || distribution != ContentDistributionDefault)
|
| - return position;
|
| -
|
| - bool isFlex = element && element->ensureComputedStyle()
|
| - && element->ensureComputedStyle()->isDisplayFlexibleBox();
|
| -
|
| - return isFlex ? ContentPositionFlexStart : ContentPositionStart;
|
| -}
|
| -
|
| static PassRefPtrWillBeRawPtr<CSSValueList> valueForContentPositionAndDistributionWithOverflowAlignment(ContentPosition position, OverflowAlignment overflowAlignment, ContentDistributionType distribution)
|
| {
|
| RefPtrWillBeRawPtr<CSSValueList> result = CSSValueList::createSpaceSeparated();
|
| @@ -1553,12 +1570,19 @@ PassRefPtrWillBeRawPtr<CSSValue> ComputedStyleCSSValueMapping::get(CSSPropertyID
|
| return cssValuePool().createValue(style.display());
|
| case CSSPropertyEmptyCells:
|
| return cssValuePool().createValue(style.emptyCells());
|
| - case CSSPropertyAlignContent:
|
| - return valueForContentPositionAndDistributionWithOverflowAlignment(resolveContentAlignmentAuto(style.alignContentPosition(), style.alignContentDistribution(), styledNode), style.alignContentOverflowAlignment(), style.alignContentDistribution());
|
| + case CSSPropertyAlignContent: {
|
| + ContentPosition position = style.alignContentPosition();
|
| + ContentDistributionType distribution = style.alignContentDistribution();
|
| + resolveContentAlignmentAuto(position, distribution, layoutObject);
|
| + return valueForContentPositionAndDistributionWithOverflowAlignment(position, style.alignContentOverflowAlignment(), distribution);
|
| + }
|
| case CSSPropertyAlignItems:
|
| - return valueForItemPositionWithOverflowAlignment(resolveAlignmentAuto(style.alignItemsPosition(), styledNode), style.alignItemsOverflowAlignment(), NonLegacyPosition);
|
| - case CSSPropertyAlignSelf:
|
| - return valueForItemPositionWithOverflowAlignment(resolveAlignmentAuto(style.alignSelfPosition(), styledNode->parentNode()), style.alignSelfOverflowAlignment(), NonLegacyPosition);
|
| + return valueForItemPositionWithOverflowAlignment(resolveContainerAlignmentAuto(style.alignItemsPosition(), layoutObject), style.alignItemsOverflowAlignment(), NonLegacyPosition);
|
| + case CSSPropertyAlignSelf: {
|
| + OverflowAlignment overflow = style.alignSelfOverflowAlignment();
|
| + ItemPosition alignSelf = resolveSelfAlignmentAuto(style.alignSelfPosition(), overflow, layoutObject);
|
| + return valueForItemPositionWithOverflowAlignment(alignSelf, overflow, NonLegacyPosition);
|
| + }
|
| case CSSPropertyFlex:
|
| return valuesForShorthandProperty(flexShorthand(), style, layoutObject, styledNode, allowVisitedStyle);
|
| case CSSPropertyFlexBasis:
|
| @@ -1573,8 +1597,12 @@ PassRefPtrWillBeRawPtr<CSSValue> ComputedStyleCSSValueMapping::get(CSSPropertyID
|
| return cssValuePool().createValue(style.flexShrink());
|
| case CSSPropertyFlexWrap:
|
| return cssValuePool().createValue(style.flexWrap());
|
| - case CSSPropertyJustifyContent:
|
| - return valueForContentPositionAndDistributionWithOverflowAlignment(resolveContentAlignmentAuto(style.justifyContentPosition(), style.justifyContentDistribution(), styledNode), style.justifyContentOverflowAlignment(), style.justifyContentDistribution());
|
| + case CSSPropertyJustifyContent: {
|
| + ContentPosition position = style.justifyContentPosition();
|
| + ContentDistributionType distribution = style.justifyContentDistribution();
|
| + resolveContentAlignmentAuto(position, distribution, layoutObject);
|
| + return valueForContentPositionAndDistributionWithOverflowAlignment(position, style.justifyContentOverflowAlignment(), distribution);
|
| + }
|
| case CSSPropertyOrder:
|
| return cssValuePool().createValue(style.order(), CSSPrimitiveValue::CSS_NUMBER);
|
| case CSSPropertyFloat:
|
| @@ -1710,9 +1738,12 @@ PassRefPtrWillBeRawPtr<CSSValue> ComputedStyleCSSValueMapping::get(CSSPropertyID
|
| case CSSPropertyIsolation:
|
| return cssValuePool().createValue(style.isolation());
|
| case CSSPropertyJustifyItems:
|
| - return valueForItemPositionWithOverflowAlignment(resolveAlignmentAuto(style.justifyItemsPosition(), styledNode), style.justifyItemsOverflowAlignment(), style.justifyItemsPositionType());
|
| - case CSSPropertyJustifySelf:
|
| - return valueForItemPositionWithOverflowAlignment(resolveAlignmentAuto(style.justifySelfPosition(), styledNode->parentNode()), style.justifySelfOverflowAlignment(), NonLegacyPosition);
|
| + return valueForItemPositionWithOverflowAlignment(resolveContainerAlignmentAuto(style.justifyItemsPosition(), layoutObject), style.justifyItemsOverflowAlignment(), style.justifyItemsPositionType());
|
| + case CSSPropertyJustifySelf: {
|
| + OverflowAlignment overflow = style.justifySelfOverflowAlignment();
|
| + ItemPosition justifySelf = resolveSelfAlignmentAuto(style.justifySelfPosition(), overflow, layoutObject);
|
| + return valueForItemPositionWithOverflowAlignment(justifySelf, overflow, NonLegacyPosition);
|
| + }
|
| case CSSPropertyLeft:
|
| return valueForPositionOffset(style, CSSPropertyLeft, layoutObject);
|
| case CSSPropertyLetterSpacing:
|
|
|