зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1122918 - Part 3 - Use the resolved physical values of 'float' and 'clear' properties during layout. r=heycam
This commit is contained in:
Родитель
3195ef008f
Коммит
5cb2b4ceea
|
@ -144,7 +144,7 @@ BRFrame::Reflow(nsPresContext* aPresContext,
|
|||
}
|
||||
|
||||
// Return our reflow status
|
||||
uint32_t breakType = aReflowState.mStyleDisplay->mBreakType;
|
||||
uint32_t breakType = aReflowState.mStyleDisplay->PhysicalBreakType(wm);
|
||||
if (NS_STYLE_CLEAR_NONE == breakType) {
|
||||
breakType = NS_STYLE_CLEAR_LINE;
|
||||
}
|
||||
|
|
|
@ -3090,7 +3090,8 @@ nsBlockFrame::ReflowBlockFrame(nsBlockReflowState& aState,
|
|||
const nsStyleDisplay* display = frame->StyleDisplay();
|
||||
nsBlockReflowContext brc(aState.mPresContext, aState.mReflowState);
|
||||
|
||||
uint8_t breakType = display->mBreakType;
|
||||
uint8_t breakType =
|
||||
display->PhysicalBreakType(aState.mReflowState.GetWritingMode());
|
||||
if (NS_STYLE_CLEAR_NONE != aState.mFloatBreakType) {
|
||||
breakType = nsLayoutUtils::CombineBreakType(breakType,
|
||||
aState.mFloatBreakType);
|
||||
|
@ -4201,11 +4202,12 @@ nsBlockFrame::SplitFloat(nsBlockReflowState& aState,
|
|||
nextInFlow->AddStateBits(NS_FRAME_IS_OVERFLOW_CONTAINER);
|
||||
}
|
||||
|
||||
if (aFloat->StyleDisplay()->mFloats == NS_STYLE_FLOAT_LEFT) {
|
||||
uint8_t floatStyle =
|
||||
aFloat->StyleDisplay()->PhysicalFloats(aState.mReflowState.GetWritingMode());
|
||||
if (floatStyle == NS_STYLE_FLOAT_LEFT) {
|
||||
aState.mFloatManager->SetSplitLeftFloatAcrossBreak();
|
||||
} else {
|
||||
MOZ_ASSERT(aFloat->StyleDisplay()->mFloats == NS_STYLE_FLOAT_RIGHT,
|
||||
"unexpected float side");
|
||||
MOZ_ASSERT(floatStyle == NS_STYLE_FLOAT_RIGHT, "unexpected float side");
|
||||
aState.mFloatManager->SetSplitRightFloatAcrossBreak();
|
||||
}
|
||||
|
||||
|
|
|
@ -738,7 +738,7 @@ nsBlockReflowState::FlowAndPlaceFloat(nsIFrame* aFloat)
|
|||
// when floats are inserted before it.
|
||||
if (NS_STYLE_CLEAR_NONE != floatDisplay->mBreakType) {
|
||||
// XXXldb Does this handle vertical margins correctly?
|
||||
mBCoord = ClearFloats(mBCoord, floatDisplay->mBreakType);
|
||||
mBCoord = ClearFloats(mBCoord, floatDisplay->PhysicalBreakType(wm));
|
||||
}
|
||||
// Get the band of available space
|
||||
nsFlowAreaRect floatAvailableSpace = GetFloatAvailableSpace(mBCoord);
|
||||
|
@ -781,9 +781,10 @@ nsBlockReflowState::FlowAndPlaceFloat(nsIFrame* aFloat)
|
|||
// Find a place to place the float. The CSS2 spec doesn't want
|
||||
// floats overlapping each other or sticking out of the containing
|
||||
// block if possible (CSS2 spec section 9.5.1, see the rule list).
|
||||
NS_ASSERTION((NS_STYLE_FLOAT_LEFT == floatDisplay->mFloats) ||
|
||||
(NS_STYLE_FLOAT_RIGHT == floatDisplay->mFloats),
|
||||
"invalid float type");
|
||||
uint8_t floatStyle = floatDisplay->PhysicalFloats(wm);
|
||||
NS_ASSERTION((NS_STYLE_FLOAT_LEFT == floatStyle) ||
|
||||
(NS_STYLE_FLOAT_RIGHT == floatStyle),
|
||||
"invalid float type");
|
||||
|
||||
// Can the float fit here?
|
||||
bool keepFloatOnSameLine = false;
|
||||
|
@ -877,7 +878,7 @@ nsBlockReflowState::FlowAndPlaceFloat(nsIFrame* aFloat)
|
|||
// LineLeft() and LineRight() here, because we would only have to
|
||||
// convert the result back into this block's writing mode.
|
||||
LogicalPoint floatPos(wm);
|
||||
bool leftFloat = NS_STYLE_FLOAT_LEFT == floatDisplay->mFloats;
|
||||
bool leftFloat = NS_STYLE_FLOAT_LEFT == floatStyle;
|
||||
|
||||
if (leftFloat == wm.IsBidiLTR()) {
|
||||
floatPos.I(wm) = floatAvailableSpace.mRect.IStart(wm);
|
||||
|
@ -1037,11 +1038,12 @@ nsBlockReflowState::PushFloatPastBreak(nsIFrame *aFloat)
|
|||
// must have their tops below the top of this float)
|
||||
// * don't waste much time trying to reflow this float again until
|
||||
// after the break
|
||||
if (aFloat->StyleDisplay()->mFloats == NS_STYLE_FLOAT_LEFT) {
|
||||
uint8_t floatStyle =
|
||||
aFloat->StyleDisplay()->PhysicalFloats(mReflowState.GetWritingMode());
|
||||
if (floatStyle == NS_STYLE_FLOAT_LEFT) {
|
||||
mFloatManager->SetPushedLeftFloatPastBreak();
|
||||
} else {
|
||||
MOZ_ASSERT(aFloat->StyleDisplay()->mFloats == NS_STYLE_FLOAT_RIGHT,
|
||||
"unexpected float value");
|
||||
MOZ_ASSERT(floatStyle == NS_STYLE_FLOAT_RIGHT, "unexpected float value");
|
||||
mFloatManager->SetPushedRightFloatPastBreak();
|
||||
}
|
||||
|
||||
|
|
|
@ -216,7 +216,8 @@ nsFloatManager::GetFlowArea(WritingMode aWM, nscoord aBOffset,
|
|||
}
|
||||
|
||||
// Shrink our band's width if needed.
|
||||
if (fi.mFrame->StyleDisplay()->mFloats == NS_STYLE_FLOAT_LEFT) {
|
||||
uint8_t floatStyle = fi.mFrame->StyleDisplay()->PhysicalFloats(aWM);
|
||||
if (floatStyle == NS_STYLE_FLOAT_LEFT) {
|
||||
// A left float
|
||||
nscoord lineRightEdge = fi.LineRight();
|
||||
if (lineRightEdge > lineLeft) {
|
||||
|
@ -274,7 +275,7 @@ nsFloatManager::AddFloat(nsIFrame* aFloatFrame, const LogicalRect& aMarginRect,
|
|||
info.mLeftBEnd = nscoord_MIN;
|
||||
info.mRightBEnd = nscoord_MIN;
|
||||
}
|
||||
uint8_t floatStyle = aFloatFrame->StyleDisplay()->mFloats;
|
||||
uint8_t floatStyle = aFloatFrame->StyleDisplay()->PhysicalFloats(aWM);
|
||||
NS_ASSERTION(floatStyle == NS_STYLE_FLOAT_LEFT ||
|
||||
floatStyle == NS_STYLE_FLOAT_RIGHT, "unexpected float");
|
||||
nscoord& sideBEnd = floatStyle == NS_STYLE_FLOAT_LEFT ? info.mLeftBEnd
|
||||
|
@ -310,7 +311,8 @@ nsFloatManager::CalculateRegionFor(WritingMode aWM,
|
|||
// Preserve the right margin-edge for left floats and the left
|
||||
// margin-edge for right floats
|
||||
const nsStyleDisplay* display = aFloat->StyleDisplay();
|
||||
if ((NS_STYLE_FLOAT_LEFT == display->mFloats) == aWM.IsBidiLTR()) {
|
||||
uint8_t floatStyle = display->PhysicalFloats(aWM);
|
||||
if ((NS_STYLE_FLOAT_LEFT == floatStyle) == aWM.IsBidiLTR()) {
|
||||
region.IStart(aWM) = region.IEnd(aWM);
|
||||
}
|
||||
region.ISize(aWM) = 0;
|
||||
|
|
|
@ -4115,23 +4115,30 @@ nsIFrame::InlinePrefISizeData::ForceBreak(nsRenderingContext *aRenderingContext)
|
|||
floats_cur_left = 0,
|
||||
floats_cur_right = 0;
|
||||
|
||||
WritingMode wm = lineContainer->GetWritingMode();
|
||||
|
||||
for (uint32_t i = 0, i_end = floats.Length(); i != i_end; ++i) {
|
||||
const FloatInfo& floatInfo = floats[i];
|
||||
const nsStyleDisplay *floatDisp = floatInfo.Frame()->StyleDisplay();
|
||||
if (floatDisp->mBreakType == NS_STYLE_CLEAR_LEFT ||
|
||||
floatDisp->mBreakType == NS_STYLE_CLEAR_RIGHT ||
|
||||
floatDisp->mBreakType == NS_STYLE_CLEAR_BOTH) {
|
||||
uint8_t breakType = floatDisp->PhysicalBreakType(wm);
|
||||
if (breakType == NS_STYLE_CLEAR_LEFT ||
|
||||
breakType == NS_STYLE_CLEAR_RIGHT ||
|
||||
breakType == NS_STYLE_CLEAR_BOTH) {
|
||||
nscoord floats_cur = NSCoordSaturatingAdd(floats_cur_left,
|
||||
floats_cur_right);
|
||||
if (floats_cur > floats_done)
|
||||
if (floats_cur > floats_done) {
|
||||
floats_done = floats_cur;
|
||||
if (floatDisp->mBreakType != NS_STYLE_CLEAR_RIGHT)
|
||||
}
|
||||
if (breakType != NS_STYLE_CLEAR_RIGHT) {
|
||||
floats_cur_left = 0;
|
||||
if (floatDisp->mBreakType != NS_STYLE_CLEAR_LEFT)
|
||||
}
|
||||
if (breakType != NS_STYLE_CLEAR_LEFT) {
|
||||
floats_cur_right = 0;
|
||||
}
|
||||
}
|
||||
|
||||
nscoord &floats_cur = floatDisp->mFloats == NS_STYLE_FLOAT_LEFT
|
||||
uint8_t floatStyle = floatDisp->PhysicalFloats(wm);
|
||||
nscoord& floats_cur = floatStyle == NS_STYLE_FLOAT_LEFT
|
||||
? floats_cur_left : floats_cur_right;
|
||||
nscoord floatWidth = floatInfo.Width();
|
||||
// Negative-width floats don't change the available space so they
|
||||
|
|
|
@ -90,8 +90,8 @@ fuzzy-if(OSX==1010,26,7) == orthogonal-floats-1b.html orthogonal-floats-1-ref.ht
|
|||
fuzzy-if(OSX==1010,103,802) fuzzy-if(winWidget,116,700) HTTP(..) == orthogonal-floats-1c.html orthogonal-floats-1-ref.html
|
||||
fuzzy-if(OSX==1010,103,802) fuzzy-if(winWidget,116,700) HTTP(..) == orthogonal-floats-1d.html orthogonal-floats-1-ref.html
|
||||
|
||||
fails == logical-float-side-1.html logical-float-side-1-ref.html
|
||||
fails == logical-float-side-2.html logical-float-side-2-ref.html
|
||||
== logical-float-side-1.html logical-float-side-1-ref.html
|
||||
== logical-float-side-2.html logical-float-side-2-ref.html
|
||||
|
||||
== float-in-rtl-slr-1a.html float-in-rtl-slr-1-ref.html
|
||||
== float-in-rtl-slr-1b.html float-in-rtl-slr-1-ref.html
|
||||
|
|
Загрузка…
Ссылка в новой задаче