Bug 1322570 Part 2 - Resolve {align,justify}-self using StyleContext from alignment container frame in ReflowInput::InitConstraints(). r=dholbert
Per bug 1322570 comment 46, it's not easy to replace ComputedJustifyItems() and UsedJustifySelf()'s internal nsStyleContext::GetParent() without correctness penalty, so we use GetParentAllowServo() for now. Also, fix the reftest.list added in bug 1334403 which incorrectly wrote test page as reference page. MozReview-Commit-ID: 6kAAWSFojd5
This commit is contained in:
@@ -2399,9 +2399,10 @@ ReflowInput::InitConstraints(nsPresContext* aPresContext,
|
||||
if (alignCBType == nsGkAtoms::gridContainerFrame) {
|
||||
// Shrink-wrap grid items that will be aligned (rather than stretched)
|
||||
// in its inline axis.
|
||||
auto inlineAxisAlignment = wm.IsOrthogonalTo(cbwm) ?
|
||||
mStylePosition->UsedAlignSelf(mFrame->StyleContext()->GetParent()) :
|
||||
mStylePosition->UsedJustifySelf(mFrame->StyleContext()->GetParent());
|
||||
auto inlineAxisAlignment =
|
||||
wm.IsOrthogonalTo(cbwm)
|
||||
? mStylePosition->UsedAlignSelf(alignCB->StyleContext())
|
||||
: mStylePosition->UsedJustifySelf(alignCB->StyleContext());
|
||||
if ((inlineAxisAlignment != NS_STYLE_ALIGN_STRETCH &&
|
||||
inlineAxisAlignment != NS_STYLE_ALIGN_NORMAL) ||
|
||||
mStyleMargin->mMargin.GetIStartUnit(wm) == eStyleUnit_Auto ||
|
||||
|
||||
@@ -26,6 +26,7 @@ table {
|
||||
background: lightgrey;
|
||||
}
|
||||
caption { border: 1px dashed blue; }
|
||||
caption { justify-self: stretch; } /* XXX: Workaround bug 1350037. */
|
||||
x { display:block; width:16px; height:16px; }
|
||||
t { display:block; width:6px; height:6px; }
|
||||
|
||||
|
||||
@@ -4654,7 +4654,7 @@ nsComputedDOMStyle::DoGetJustifyItems()
|
||||
RefPtr<nsROCSSPrimitiveValue> val = new nsROCSSPrimitiveValue;
|
||||
nsAutoString str;
|
||||
auto justify =
|
||||
StylePosition()->ComputedJustifyItems(mStyleContext->GetParent());
|
||||
StylePosition()->ComputedJustifyItems(mStyleContext->GetParentAllowServo());
|
||||
nsCSSValue::AppendAlignJustifyValueToString(justify, str);
|
||||
val->SetString(str);
|
||||
return val.forget();
|
||||
|
||||
@@ -8676,7 +8676,7 @@ nsRuleNode::ComputePositionData(void* aStartStruct,
|
||||
if (MOZ_UNLIKELY(justifyItemsValue.GetUnit() == eCSSUnit_Inherit)) {
|
||||
if (MOZ_LIKELY(parentContext)) {
|
||||
pos->mJustifyItems =
|
||||
parentPos->ComputedJustifyItems(parentContext->GetParent());
|
||||
parentPos->ComputedJustifyItems(parentContext->GetParentAllowServo());
|
||||
} else {
|
||||
pos->mJustifyItems = NS_STYLE_JUSTIFY_NORMAL;
|
||||
}
|
||||
|
||||
@@ -1678,8 +1678,8 @@ nsStylePosition::ComputedJustifyItems(nsStyleContext* aParent) const
|
||||
return mJustifyItems;
|
||||
}
|
||||
if (MOZ_LIKELY(aParent)) {
|
||||
auto inheritedJustifyItems =
|
||||
aParent->StylePosition()->ComputedJustifyItems(aParent->GetParent());
|
||||
auto inheritedJustifyItems = aParent->StylePosition()->ComputedJustifyItems(
|
||||
aParent->GetParentAllowServo());
|
||||
// "If the inherited value of justify-items includes the 'legacy' keyword,
|
||||
// 'auto' computes to the inherited value." Otherwise, 'normal'.
|
||||
if (inheritedJustifyItems & NS_STYLE_JUSTIFY_LEGACY) {
|
||||
@@ -1696,8 +1696,8 @@ nsStylePosition::UsedJustifySelf(nsStyleContext* aParent) const
|
||||
return mJustifySelf;
|
||||
}
|
||||
if (MOZ_LIKELY(aParent)) {
|
||||
auto inheritedJustifyItems = aParent->StylePosition()->
|
||||
ComputedJustifyItems(aParent->GetParent());
|
||||
auto inheritedJustifyItems = aParent->StylePosition()->ComputedJustifyItems(
|
||||
aParent->GetParentAllowServo());
|
||||
return inheritedJustifyItems & ~NS_STYLE_JUSTIFY_LEGACY;
|
||||
}
|
||||
return NS_STYLE_JUSTIFY_NORMAL;
|
||||
|
||||
Reference in New Issue
Block a user