mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-26 00:57:30 +09:00
Issue #1916 - Part 2: Add a flag to allow FinishReflowChild to handle relative positioning, and convert the caller for which this makes sense.
Backported from Mozilla bug 1547759.
This commit is contained in:
parent
0423d83560
commit
797ddb4d88
4 changed files with 27 additions and 14 deletions
|
|
@ -281,7 +281,7 @@ public:
|
||||||
nscoord& Width() { return mWritingMode.IsVertical() ? mBSize : mISize; }
|
nscoord& Width() { return mWritingMode.IsVertical() ? mBSize : mISize; }
|
||||||
nscoord& Height() { return mWritingMode.IsVertical() ? mISize : mBSize; }
|
nscoord& Height() { return mWritingMode.IsVertical() ? mISize : mBSize; }
|
||||||
|
|
||||||
nsSize PhysicalSize()
|
nsSize PhysicalSize() const
|
||||||
{
|
{
|
||||||
return Size(mWritingMode).GetPhysicalSize(mWritingMode);
|
return Size(mWritingMode).GetPhysicalSize(mWritingMode);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -448,16 +448,11 @@ nsBlockReflowContext::PlaceBlock(const ReflowInput& aReflowInput,
|
||||||
ConvertTo(frameWM, mWritingMode,
|
ConvertTo(frameWM, mWritingMode,
|
||||||
mContainerSize - mMetrics.PhysicalSize());
|
mContainerSize - mMetrics.PhysicalSize());
|
||||||
|
|
||||||
// ApplyRelativePositioning in right-to-left writing modes needs to
|
|
||||||
// know the updated frame width
|
|
||||||
mFrame->SetSize(mWritingMode, mMetrics.Size(mWritingMode));
|
|
||||||
aReflowInput.ApplyRelativePositioning(&logPos, mContainerSize);
|
|
||||||
|
|
||||||
// Now place the frame and complete the reflow process
|
// Now place the frame and complete the reflow process
|
||||||
nsContainerFrame::FinishReflowChild(mFrame, mPresContext, mMetrics,
|
nsContainerFrame::FinishReflowChild(mFrame, mPresContext, mMetrics,
|
||||||
&aReflowInput, frameWM, logPos,
|
&aReflowInput, frameWM, logPos,
|
||||||
mContainerSize,
|
mContainerSize,
|
||||||
nsIFrame::ReflowChildFlags::Default);
|
nsIFrame::ReflowChildFlags::ApplyRelativePositioning);
|
||||||
|
|
||||||
aOverflowAreas = mMetrics.mOverflowAreas + mFrame->GetPosition();
|
aOverflowAreas = mMetrics.mOverflowAreas + mFrame->GetPosition();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1190,10 +1190,19 @@ nsContainerFrame::FinishReflowChild(nsIFrame* aKidFrame,
|
||||||
WritingMode outerWM = aDesiredSize.GetWritingMode();
|
WritingMode outerWM = aDesiredSize.GetWritingMode();
|
||||||
LogicalSize convertedSize =
|
LogicalSize convertedSize =
|
||||||
aDesiredSize.Size(outerWM).ConvertTo(aWM, outerWM);
|
aDesiredSize.Size(outerWM).ConvertTo(aWM, outerWM);
|
||||||
|
LogicalPoint pos(aPos);
|
||||||
|
|
||||||
|
if (aFlags & ReflowChildFlags::ApplyRelativePositioning) {
|
||||||
|
MOZ_ASSERT(aReflowInput, "caller must have passed reflow input");
|
||||||
|
// ApplyRelativePositioning in right-to-left writing modes needs to know
|
||||||
|
// the updated frame width to set the normal position correctly.
|
||||||
|
aKidFrame->SetSize(aWM, convertedSize);
|
||||||
|
aReflowInput->ApplyRelativePositioning(&pos, aContainerSize);
|
||||||
|
}
|
||||||
|
|
||||||
if (ReflowChildFlags::NoMoveFrame !=
|
if (ReflowChildFlags::NoMoveFrame !=
|
||||||
(aFlags & ReflowChildFlags::NoMoveFrame)) {
|
(aFlags & ReflowChildFlags::NoMoveFrame)) {
|
||||||
aKidFrame->SetRect(aWM, LogicalRect(aWM, aPos, convertedSize),
|
aKidFrame->SetRect(aWM, LogicalRect(aWM, pos, convertedSize),
|
||||||
aContainerSize);
|
aContainerSize);
|
||||||
} else {
|
} else {
|
||||||
aKidFrame->SetSize(aWM, convertedSize);
|
aKidFrame->SetSize(aWM, convertedSize);
|
||||||
|
|
@ -1230,14 +1239,19 @@ nsContainerFrame::FinishReflowChild(nsIFrame* aKidFrame,
|
||||||
nscoord aY,
|
nscoord aY,
|
||||||
ReflowChildFlags aFlags)
|
ReflowChildFlags aFlags)
|
||||||
{
|
{
|
||||||
|
MOZ_ASSERT(!(aFlags & ReflowChildFlags::ApplyRelativePositioning),
|
||||||
|
"only the logical version supports ApplyRelativePositioning "
|
||||||
|
"since ApplyRelativePositioning requires the container size");
|
||||||
|
|
||||||
nsPoint curOrigin = aKidFrame->GetPosition();
|
nsPoint curOrigin = aKidFrame->GetPosition();
|
||||||
|
nsPoint pos(aX, aY);
|
||||||
|
nsSize size(aDesiredSize.PhysicalSize());
|
||||||
|
|
||||||
if (ReflowChildFlags::NoMoveFrame !=
|
if (ReflowChildFlags::NoMoveFrame !=
|
||||||
(aFlags & ReflowChildFlags::NoMoveFrame)) {
|
(aFlags & ReflowChildFlags::NoMoveFrame)) {
|
||||||
aKidFrame->SetRect(
|
aKidFrame->SetRect(nsRect(pos, size));
|
||||||
nsRect(aX, aY, aDesiredSize.Width(), aDesiredSize.Height()));
|
|
||||||
} else {
|
} else {
|
||||||
aKidFrame->SetSize(nsSize(aDesiredSize.Width(), aDesiredSize.Height()));
|
aKidFrame->SetSize(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (aKidFrame->HasView()) {
|
if (aKidFrame->HasView()) {
|
||||||
|
|
@ -1248,8 +1262,7 @@ nsContainerFrame::FinishReflowChild(nsIFrame* aKidFrame,
|
||||||
aDesiredSize.VisualOverflow(), aFlags);
|
aDesiredSize.VisualOverflow(), aFlags);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(aFlags & ReflowChildFlags::NoMoveView) &&
|
if (!(aFlags & ReflowChildFlags::NoMoveView) && curOrigin != pos) {
|
||||||
(curOrigin.x != aX || curOrigin.y != aY)) {
|
|
||||||
if (!aKidFrame->HasView()) {
|
if (!aKidFrame->HasView()) {
|
||||||
// If the frame has moved, then we need to make sure any child views are
|
// If the frame has moved, then we need to make sure any child views are
|
||||||
// correctly positioned
|
// correctly positioned
|
||||||
|
|
|
||||||
|
|
@ -2247,9 +2247,14 @@ public:
|
||||||
NoMoveFrame = (1 << 1) | NoMoveView,
|
NoMoveFrame = (1 << 1) | NoMoveView,
|
||||||
NoSizeView = 1 << 2,
|
NoSizeView = 1 << 2,
|
||||||
NoVisibility = 1 << 3,
|
NoVisibility = 1 << 3,
|
||||||
|
|
||||||
// Only applies to ReflowChild; if true, don't delete the next-in-flow, even
|
// Only applies to ReflowChild; if true, don't delete the next-in-flow, even
|
||||||
// if the reflow is fully complete.
|
// if the reflow is fully complete.
|
||||||
NoDeleteNextInFlowChild = 1 << 4
|
NoDeleteNextInFlowChild = 1 << 4,
|
||||||
|
|
||||||
|
// Only applies to FinishReflowChild. Tell it to call
|
||||||
|
// ApplyRelativePositioning.
|
||||||
|
ApplyRelativePositioning = 1 << 5
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue