import changes from `dev' branch of rmottola/Arctic-Fox:

- Bug 1161049 patch 2 - Add comments reflecting what CanPerformOnCompositorThread doesn't check. r=birtles (09854c55c)
- Bug 1161049 patch 3 - Don't send animations to a layer if we're not using off-main-thread compositing. r=mstange (927242bde)
- Bug 1148418 - Make nsDisplayBackgroundColor::Paint use a higher precision floating point type to avoid scrolling artifacts. r=mattwoodrow (3641d43be)
- Bug 1148418 - Follow-up to avoid unused variable warning. r=bustage CLOSED TREE (83d4dd8fe)
- Bug 804975 - Part 2: Add a RuleNodeCacheConditions class and use it instead of a boolean canStoreInRuleTree during style computation. r=dbaron (fce3718c4)
- Bug 804975 - Part 3: Support conditional cached reset structs on rule nodes. r=dbaron (a2a049f56)
- Bug 804975 - Part 4: Cache reset structs on rule nodes for different font-size or writing mode values. r=dbaron (9bac1c6db)
- Bug 77999 - Unified build fix followup. (a2c95b3b4)
- Bug 1169440 patch 1 - Add bitwise operators to nsChangeHint. r=heycam (d30d0a0a2)
- Bug 1169440 patch 2 - Rename style struct MaxDifferenceNeverInherited to DifferenceAlwaysHandledForDescendants. r=heycam (7d1e2cdae)
- Bug 1156988 - Update RestyleManager::{Change,Restyle}HintToString for recent changes. r=dbaron (547e61dd6)
- Bug 1169440 patch 3 - Add nsChangeHint_ReflowChangesSizeOrPosition. r=heycam (0076ee033)
- Bug 1177076 patch 1 - Add logical values for the caption-side property (though not yet handled by layout code). r=heycam (4e8bd065d)
- Bug 1131000. Implement nsMathMLSelectedFrame::ComputeSize to delegate size computation to the selected frame. r=mats (49581cdd7)
- Bug 1172774: for a box with a writing mode orthogonal to its containing block, calculate positioning values (margin, padding and offsets) in the writing mode of the containing block, r=jfkthame (505cd7afb)
- Bug 1177076 patch 2 - Convert nsTableOuterFrame to work with logical coordinates. r=dholbert (300c5cfae)
- Bug 1151993 - Reftest for inline-sizing of orthogonal block frames. r=smontagu (c17e188b1)
- Bug 1144501 - Reftest for sizing of orthogonal frame after block-end margin. r=smontagu (d27d90068)
- Bug 1156021 - Reftest for text-indent specified as percent in vertical writing mode. r=dbaron (d25854ee0)
- Bug 1158549 - Reftest for size constraints in vertical writing mode. r=smontagu (b1d7f74aa)
- Bug 1157752 - Reftest for vertical mode with upright orientation overriding bidi directionality. r=smontagu (b7aedaf06)
- Bug 1152941 - Reftest for orthogonal block with potentially overflowing content. r=dbaron (0fe1d83f4)
- Bug 1077521 - Initial testcases for vertical writing-mode tables. r=smontagu (dbacaf74c)
- Bug 1077521 - Reftest for rowspan in vertical table. r=smontagu (e4b6134bf)
- Bug 1077521 - Reftest for colspan in vertical table. r=smontagu (ece444c32)
- Bug 1177606 - Reftests for vertical tables with specified width. (d7f9ddc3a)
- Bug 1157569 - Reftests for vertical-mode table with border-collapse. r=dholbert (0b9b7eeae)
- Tests for bug 1173958. r=jfkthame (64278818c)
- Bug 1139306: Add a small amount of fuzz to a test on Android, r=tn (b879499c6)
- Bug 1140160 - Handle insertions into a <fieldset> child with display:contents correctly. r=roc (39a24c684)
- partial 1138442 (3d04520fd)
- Bug 1153757 - Tweak DoGetParentStyleContext to exclude pseudos with a non-primary frame from using a display:contents parent as the style context parent. r=heycam (caa35c9ac)
- part of 1144080 (465618308)
- reapply 932958 (f098ad575)
- part of 1153574 (8e4532dc5)
- Bug 1169331 - Always clip rotated buffer quadrant drawing to the fill rect. r=jrmuizel (4693f9c1c)
- Bug 1174332 - Correctly compute box-shadow bounds on themed frames with overflow. r=roc (489b069a5)
- Bug 1169525 - Add the on-demand SVG style sheets when a foreignObjectis encountered within a single style update. r=jwatt (ebe0eb228)
- Bug 1169514 - Part 1: Move noscript rule from the preference style sheet to a cached UA style sheet. r=jwatt (a04979f0f)
- Bug 1169514 - Part 2: Move noframes rules from the preferences style sheet to a cached UA style sheet. r=jwatt (26aae1a45)
- Bug 1174450 part 1 - Split IntrinsicForContainer in two parts; move the latter part to a new function, AddIntrinsicSizeOffset, which applies the padding/border/margin from the given IntrinsicISizeOffsetData. r=jfkthame (37202f0f3)
- Bug 1174450 part 2 - Rename most AddIntrinsicSizeOffset params to follow the aName standard. r=jfkthame (4525fa9c5)
- Bug 1174450 part 3 - Rename AddIntrinsicSizeOffset local vars from xISize to xSize since the code is generic and handles both ISizes and BSizes. r=jfkthame (6a4816b18)
- Bug 1174450 part 4 - Rename the remaining AddIntrinsicSizeOffset params to follow the aName standard. Also rename local var 'w' to 'size' since it may be either a width or height. r=jfkthame (e1132b475)
- Bug 1174450 part 5 - Remove the duplicated min/max calculation in AddIntrinsicSizeOffset, pass a pointer to the calculated absolute values, if any, from IntrinsicForContainer instead. r=jfkthame (85f937449)
- Bug 1174450 part 6 - Add a doc comment for AddIntrinsicSizeOffset and some minor code style fixes. r=jfkthame (1e501c748)
- Bug 1174450 part 7 - Move most of IntrinsicForContainer into a new method, IntrinsicForWM, that takes the writing-mode to use as a parameter. r=jfkthame (db3ba1bc4)
- Bug 1174450 part 8 - Add a new method nsIFrame::IntrinsicBSizeOffsets. r=jfkthame (ef1715d4e)
- Bug 1174450 part 9 - Remove the nsRenderingContext* param from Intrinsic*SizeOffsets methods since it's unused. r=jfkthame (e0fd79cc6)
- Bug 1174450 part 10 - Use the right IntrinsicISizeOffsetData for the given writing-mode (this is what fixes the error reported in this bug). r=jfkthame (efc490611)
- Bug 1174450 part 9b - Make AddIntrinsicSizeOffset take a PhysicalAxis instead of a WritingMode. r=jfkthame (cab48ffef)
- Bug 1174450 part 10b - Rename IntrinsicForWM to IntrinsicForAxis and make it take a PhysicalAxis instead of a WritingMode. r=jfkthame (cd33baeff)
- Bug 1147834: tests for overconstrained relative positioning, r=jfkthame (c2c67b2fc)
- Bug 1157758 - Reftest for Arabic text in vertical-upright mode. r=jdaggett (689b0a84d)
- Bug 1163238 - Reftest for auto margins on orthogonal flow. (c9f5a50ec)
- Bug 1079151 - Tests for position:absolute in vertical writing modes; currently failing 72 out of 96 testcases. r=jfkthame (228756de5)
- Tests for bug 1172774, r=jfkthame (91ff7737d)
- Bug 1174450 part 11 - Tests. (89963b6a7)
- convert file to UTF-8 (f8e2e497a)
This commit is contained in:
2021-02-03 10:56:59 +08:00
parent 3a02ab4d4d
commit 37477b2115
417 changed files with 24828 additions and 1493 deletions
+71 -53
View File
@@ -144,6 +144,7 @@ FontSizeInflationListMarginAdjustment(const nsIFrame* aFrame)
// containing-block block-size, rather than its inline-size.
nsCSSOffsetState::nsCSSOffsetState(nsIFrame *aFrame,
nsRenderingContext *aRenderingContext,
WritingMode aContainingBlockWritingMode,
nscoord aContainingBlockISize)
: frame(aFrame)
, rendContext(aRenderingContext)
@@ -153,9 +154,9 @@ nsCSSOffsetState::nsCSSOffsetState(nsIFrame *aFrame,
"We're about to resolve percent margin & padding "
"values against CB inline size, which is incorrect for "
"flex/grid items");
LogicalSize cbSize(mWritingMode, aContainingBlockISize,
LogicalSize cbSize(aContainingBlockWritingMode, aContainingBlockISize,
aContainingBlockISize);
InitOffsets(cbSize, frame->GetType());
InitOffsets(aContainingBlockWritingMode, cbSize, frame->GetType());
}
// Initialize a reflow state for a child frame's reflow. Some state
@@ -1952,13 +1953,15 @@ static eNormalLineHeightControl GetNormalLineHeightCalcControl(void)
}
static inline bool
IsSideCaption(nsIFrame* aFrame, const nsStyleDisplay* aStyleDisplay)
IsSideCaption(nsIFrame* aFrame, const nsStyleDisplay* aStyleDisplay,
WritingMode aWM)
{
if (aStyleDisplay->mDisplay != NS_STYLE_DISPLAY_TABLE_CAPTION)
if (aStyleDisplay->mDisplay != NS_STYLE_DISPLAY_TABLE_CAPTION) {
return false;
uint8_t captionSide = aFrame->StyleTableBorder()->mCaptionSide;
return captionSide == NS_STYLE_CAPTION_SIDE_LEFT ||
captionSide == NS_STYLE_CAPTION_SIDE_RIGHT;
}
uint8_t captionSide = aFrame->StyleTableBorder()->LogicalCaptionSide(aWM);
return captionSide == NS_STYLE_CAPTION_SIDE_ISTART ||
captionSide == NS_STYLE_CAPTION_SIDE_IEND;
}
static nsFlexContainerFrame*
@@ -2013,7 +2016,7 @@ nsHTMLReflowState::InitConstraints(nsPresContext* aPresContext,
// height equal to the available space
if (nullptr == parentReflowState || mFlags.mDummyParentReflowState) {
// XXXldb This doesn't mean what it used to!
InitOffsets(OffsetPercentBasis(frame, wm, aContainingBlockSize),
InitOffsets(wm, OffsetPercentBasis(frame, wm, aContainingBlockSize),
aFrameType, aBorder, aPadding);
// Override mComputedMargin since reflow roots start from the
// frame's boundary, which is inside the margin.
@@ -2062,9 +2065,15 @@ nsHTMLReflowState::InitConstraints(nsPresContext* aPresContext,
// XXX Might need to also pass the CB height (not width) for page boxes,
// too, if we implement them.
InitOffsets(OffsetPercentBasis(frame, wm, cbSize),
// For calculating positioning offsets, margins, borders and
// padding, we use the writing mode of the containing block
WritingMode cbwm = cbrs->GetWritingMode();
InitOffsets(cbwm, OffsetPercentBasis(frame, cbwm,
cbSize.ConvertTo(cbwm, wm)),
aFrameType, aBorder, aPadding);
// For calculating the size of this box, we use its own writing mode
const nsStyleCoord &blockSize = mStylePosition->BSize(wm);
nsStyleUnit blockSizeUnit = blockSize.GetUnit();
@@ -2116,14 +2125,16 @@ nsHTMLReflowState::InitConstraints(nsPresContext* aPresContext,
}
}
// Compute our offsets if the element is relatively positioned. We need
// the correct containing block width and blockSize here, which is why we need
// to do it after all the quirks-n-such above. (If the element is sticky
// positioned, we need to wait until the scroll container knows its size,
// so we compute offsets from StickyScrollContainer::UpdatePositions.)
// Compute our offsets if the element is relatively positioned. We
// need the correct containing block inline-size and block-size
// here, which is why we need to do it after all the quirks-n-such
// above. (If the element is sticky positioned, we need to wait
// until the scroll container knows its size, so we compute offsets
// from StickyScrollContainer::UpdatePositions.)
if (mStyleDisplay->IsRelativelyPositioned(frame) &&
NS_STYLE_POSITION_RELATIVE == mStyleDisplay->mPosition) {
ComputeRelativeOffsets(wm, frame, cbSize, ComputedPhysicalOffsets());
ComputeRelativeOffsets(cbwm, frame, cbSize.ConvertTo(cbwm, wm),
ComputedPhysicalOffsets());
} else {
// Initialize offsets to 0
ComputedPhysicalOffsets().SizeTo(0, 0, 0, 0);
@@ -2256,7 +2267,7 @@ nsHTMLReflowState::InitConstraints(nsPresContext* aPresContext,
// Exclude inline tables and flex items from the block margin calculations
if (isBlock &&
!IsSideCaption(frame, mStyleDisplay) &&
!IsSideCaption(frame, mStyleDisplay, cbwm) &&
mStyleDisplay->mDisplay != NS_STYLE_DISPLAY_INLINE_TABLE &&
!flexContainerFrame) {
CalculateBlockSideMargins(aFrameType);
@@ -2284,7 +2295,8 @@ UpdateProp(FrameProperties& aProps,
}
void
nsCSSOffsetState::InitOffsets(const LogicalSize& aPercentBasis,
nsCSSOffsetState::InitOffsets(WritingMode aWM,
const LogicalSize& aPercentBasis,
nsIAtom* aFrameType,
const nsMargin *aBorder,
const nsMargin *aPadding)
@@ -2301,7 +2313,7 @@ nsCSSOffsetState::InitOffsets(const LogicalSize& aPercentBasis,
// become the default computed values, and may be adjusted below
// XXX fix to provide 0,0 for the top&bottom margins for
// inline-non-replaced elements
bool needMarginProp = ComputeMargin(aPercentBasis);
bool needMarginProp = ComputeMargin(aWM, aPercentBasis);
// XXX We need to include 'auto' horizontal margins in this too!
// ... but if we did that, we'd need to fix nsFrame::GetUsedMargin
// to use it even when the margins are all zero (since sometimes
@@ -2334,7 +2346,7 @@ nsCSSOffsetState::InitOffsets(const LogicalSize& aPercentBasis,
(frame->GetStateBits() & NS_FRAME_REFLOW_ROOT);
}
else {
needPaddingProp = ComputePadding(aPercentBasis, aFrameType);
needPaddingProp = ComputePadding(aWM, aPercentBasis, aFrameType);
}
if (isThemed) {
@@ -2628,7 +2640,8 @@ nsHTMLReflowState::CalcLineHeight(nsIContent* aContent,
}
bool
nsCSSOffsetState::ComputeMargin(const LogicalSize& aPercentBasis)
nsCSSOffsetState::ComputeMargin(WritingMode aWM,
const LogicalSize& aPercentBasis)
{
// SVG text frames have no margin.
if (frame->IsSVGText()) {
@@ -2640,26 +2653,29 @@ nsCSSOffsetState::ComputeMargin(const LogicalSize& aPercentBasis)
bool isCBDependent = !styleMargin->GetMargin(ComputedPhysicalMargin());
if (isCBDependent) {
// We have to compute the value
WritingMode wm = GetWritingMode();
LogicalMargin m(wm);
m.IStart(wm) = nsLayoutUtils::
ComputeCBDependentValue(aPercentBasis.ISize(wm),
styleMargin->mMargin.GetIStart(wm));
m.IEnd(wm) = nsLayoutUtils::
ComputeCBDependentValue(aPercentBasis.ISize(wm),
styleMargin->mMargin.GetIEnd(wm));
// We have to compute the value. Note that this calculation is
// performed according to the writing mode of the containing block
// (http://dev.w3.org/csswg/css-writing-modes-3/#orthogonal-flows)
LogicalMargin m(aWM);
m.IStart(aWM) = nsLayoutUtils::
ComputeCBDependentValue(aPercentBasis.ISize(aWM),
styleMargin->mMargin.GetIStart(aWM));
m.IEnd(aWM) = nsLayoutUtils::
ComputeCBDependentValue(aPercentBasis.ISize(aWM),
styleMargin->mMargin.GetIEnd(aWM));
m.BStart(wm) = nsLayoutUtils::
ComputeCBDependentValue(aPercentBasis.BSize(wm),
styleMargin->mMargin.GetBStart(wm));
m.BEnd(wm) = nsLayoutUtils::
ComputeCBDependentValue(aPercentBasis.BSize(wm),
styleMargin->mMargin.GetBEnd(wm));
m.BStart(aWM) = nsLayoutUtils::
ComputeCBDependentValue(aPercentBasis.BSize(aWM),
styleMargin->mMargin.GetBStart(aWM));
m.BEnd(aWM) = nsLayoutUtils::
ComputeCBDependentValue(aPercentBasis.BSize(aWM),
styleMargin->mMargin.GetBEnd(aWM));
SetComputedLogicalMargin(m);
SetComputedLogicalMargin(aWM, m);
}
// ... but font-size-inflation-based margin adjustment uses the
// frame's writing mode
nscoord marginAdjustment = FontSizeInflationListMarginAdjustment(frame);
if (marginAdjustment > 0) {
@@ -2672,7 +2688,8 @@ nsCSSOffsetState::ComputeMargin(const LogicalSize& aPercentBasis)
}
bool
nsCSSOffsetState::ComputePadding(const LogicalSize& aPercentBasis,
nsCSSOffsetState::ComputePadding(WritingMode aWM,
const LogicalSize& aPercentBasis,
nsIAtom* aFrameType)
{
// If style can provide us the padding directly, then use it.
@@ -2687,25 +2704,26 @@ nsCSSOffsetState::ComputePadding(const LogicalSize& aPercentBasis,
ComputedPhysicalPadding().SizeTo(0,0,0,0);
}
else if (isCBDependent) {
// We have to compute the value
// We have to compute the value. This calculation is performed
// according to the writing mode of the containing block
// (http://dev.w3.org/csswg/css-writing-modes-3/#orthogonal-flows)
// clamp negative calc() results to 0
WritingMode wm = GetWritingMode();
LogicalMargin p(wm);
p.IStart(wm) = std::max(0, nsLayoutUtils::
ComputeCBDependentValue(aPercentBasis.ISize(wm),
stylePadding->mPadding.GetIStart(wm)));
p.IEnd(wm) = std::max(0, nsLayoutUtils::
ComputeCBDependentValue(aPercentBasis.ISize(wm),
stylePadding->mPadding.GetIEnd(wm)));
LogicalMargin p(aWM);
p.IStart(aWM) = std::max(0, nsLayoutUtils::
ComputeCBDependentValue(aPercentBasis.ISize(aWM),
stylePadding->mPadding.GetIStart(aWM)));
p.IEnd(aWM) = std::max(0, nsLayoutUtils::
ComputeCBDependentValue(aPercentBasis.ISize(aWM),
stylePadding->mPadding.GetIEnd(aWM)));
p.BStart(wm) = std::max(0, nsLayoutUtils::
ComputeCBDependentValue(aPercentBasis.BSize(wm),
stylePadding->mPadding.GetBStart(wm)));
p.BEnd(wm) = std::max(0, nsLayoutUtils::
ComputeCBDependentValue(aPercentBasis.BSize(wm),
stylePadding->mPadding.GetBEnd(wm)));
p.BStart(aWM) = std::max(0, nsLayoutUtils::
ComputeCBDependentValue(aPercentBasis.BSize(aWM),
stylePadding->mPadding.GetBStart(aWM)));
p.BEnd(aWM) = std::max(0, nsLayoutUtils::
ComputeCBDependentValue(aPercentBasis.BSize(aWM),
stylePadding->mPadding.GetBEnd(aWM)));
SetComputedLogicalPadding(p);
SetComputedLogicalPadding(aWM, p);
}
return isCBDependent;
}