mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 840480 r=roc
This commit is contained in:
parent
748b4717a1
commit
bfb6ac7eab
@ -109,8 +109,7 @@ CollectRestyles(nsISupports* aElement,
|
||||
inline void
|
||||
RestyleTracker::ProcessOneRestyle(Element* aElement,
|
||||
nsRestyleHint aRestyleHint,
|
||||
nsChangeHint aChangeHint,
|
||||
OverflowChangedTracker& aTracker)
|
||||
nsChangeHint aChangeHint)
|
||||
{
|
||||
NS_PRECONDITION((aRestyleHint & eRestyle_LaterSiblings) == 0,
|
||||
"Someone should have handled this before calling us");
|
||||
@ -122,15 +121,14 @@ RestyleTracker::ProcessOneRestyle(Element* aElement,
|
||||
if (aRestyleHint & (eRestyle_Self | eRestyle_Subtree)) {
|
||||
mFrameConstructor->RestyleElement(aElement, primaryFrame, aChangeHint,
|
||||
*this,
|
||||
(aRestyleHint & eRestyle_Subtree) != 0,
|
||||
aTracker);
|
||||
(aRestyleHint & eRestyle_Subtree) != 0);
|
||||
} else if (aChangeHint &&
|
||||
(primaryFrame ||
|
||||
(aChangeHint & nsChangeHint_ReconstructFrame))) {
|
||||
// Don't need to recompute style; just apply the hint
|
||||
nsStyleChangeList changeList;
|
||||
changeList.AppendChange(primaryFrame, aElement, aChangeHint);
|
||||
mFrameConstructor->ProcessRestyledFrames(changeList, aTracker);
|
||||
mFrameConstructor->ProcessRestyledFrames(changeList);
|
||||
}
|
||||
}
|
||||
|
||||
@ -144,8 +142,6 @@ RestyleTracker::DoProcessRestyles()
|
||||
|
||||
mFrameConstructor->mInStyleRefresh = true;
|
||||
|
||||
OverflowChangedTracker tracker;
|
||||
|
||||
// loop so that we process any restyle events generated by processing
|
||||
while (mPendingRestyles.Count()) {
|
||||
if (mHaveLaterSiblingRestyles) {
|
||||
@ -210,7 +206,7 @@ RestyleTracker::DoProcessRestyles()
|
||||
continue;
|
||||
}
|
||||
|
||||
ProcessOneRestyle(element, data.mRestyleHint, data.mChangeHint, tracker);
|
||||
ProcessOneRestyle(element, data.mRestyleHint, data.mChangeHint);
|
||||
}
|
||||
|
||||
if (mHaveLaterSiblingRestyles) {
|
||||
@ -239,13 +235,12 @@ RestyleTracker::DoProcessRestyles()
|
||||
++currentRestyle) {
|
||||
ProcessOneRestyle(currentRestyle->mElement,
|
||||
currentRestyle->mRestyleHint,
|
||||
currentRestyle->mChangeHint,
|
||||
tracker);
|
||||
currentRestyle->mChangeHint);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tracker.Flush();
|
||||
mFrameConstructor->FlushOverflowChangedTracker();
|
||||
|
||||
// Set mInStyleRefresh to false now, since the EndUpdate call might
|
||||
// add more restyles.
|
||||
|
@ -31,6 +31,11 @@ class OverflowChangedTracker
|
||||
{
|
||||
public:
|
||||
|
||||
~OverflowChangedTracker()
|
||||
{
|
||||
NS_ASSERTION(mEntryList.empty(), "Need to flush before destroying!");
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a frame that has had a style change, and needs its
|
||||
* overflow updated.
|
||||
@ -247,8 +252,7 @@ private:
|
||||
*/
|
||||
inline void ProcessOneRestyle(Element* aElement,
|
||||
nsRestyleHint aRestyleHint,
|
||||
nsChangeHint aChangeHint,
|
||||
OverflowChangedTracker& aTracker);
|
||||
nsChangeHint aChangeHint);
|
||||
|
||||
/**
|
||||
* The guts of our restyle processing.
|
||||
|
@ -1437,7 +1437,6 @@ nsCSSFrameConstructor::nsCSSFrameConstructor(nsIDocument *aDocument,
|
||||
, mInStyleRefresh(false)
|
||||
, mHoverGeneration(0)
|
||||
, mRebuildAllExtraHint(nsChangeHint(0))
|
||||
, mOverflowChangedTracker(nullptr)
|
||||
, mAnimationGeneration(0)
|
||||
, mPendingRestyles(ELEMENT_HAS_PENDING_RESTYLE |
|
||||
ELEMENT_IS_POTENTIAL_RESTYLE_ROOT, this)
|
||||
@ -1517,9 +1516,7 @@ nsCSSFrameConstructor::NotifyDestroyingFrame(nsIFrame* aFrame)
|
||||
CountersDirty();
|
||||
}
|
||||
|
||||
if (mOverflowChangedTracker) {
|
||||
mOverflowChangedTracker->RemoveFrame(aFrame);
|
||||
}
|
||||
mOverflowChangedTracker.RemoveFrame(aFrame);
|
||||
|
||||
nsFrameManager::NotifyDestroyingFrame(aFrame);
|
||||
}
|
||||
@ -8201,8 +8198,7 @@ NeedToReframeForAddingOrRemovingTransform(nsIFrame* aFrame)
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsCSSFrameConstructor::ProcessRestyledFrames(nsStyleChangeList& aChangeList,
|
||||
OverflowChangedTracker& aTracker)
|
||||
nsCSSFrameConstructor::ProcessRestyledFrames(nsStyleChangeList& aChangeList)
|
||||
{
|
||||
NS_ASSERTION(!nsContentUtils::IsSafeToRunScript(),
|
||||
"Someone forgot a script blocker");
|
||||
@ -8212,10 +8208,6 @@ nsCSSFrameConstructor::ProcessRestyledFrames(nsStyleChangeList& aChangeList,
|
||||
|
||||
SAMPLE_LABEL("CSS", "ProcessRestyledFrames");
|
||||
|
||||
MOZ_ASSERT(!GetOverflowChangedTracker(),
|
||||
"Can't have multiple overflow changed trackers!");
|
||||
SetOverflowChangedTracker(&aTracker);
|
||||
|
||||
// Make sure to not rebuild quote or counter lists while we're
|
||||
// processing restyles
|
||||
BeginUpdate();
|
||||
@ -8346,7 +8338,7 @@ nsCSSFrameConstructor::ProcessRestyledFrames(nsStyleChangeList& aChangeList,
|
||||
// updating overflows since that will happen when it's reflowed.
|
||||
if (!(childFrame->GetStateBits() &
|
||||
(NS_FRAME_IS_DIRTY | NS_FRAME_HAS_DIRTY_CHILDREN))) {
|
||||
aTracker.AddFrame(childFrame);
|
||||
mOverflowChangedTracker.AddFrame(childFrame);
|
||||
}
|
||||
NS_ASSERTION(!nsLayoutUtils::GetNextContinuationOrSpecialSibling(childFrame),
|
||||
"SVG frames should not have continuations or special siblings");
|
||||
@ -8359,7 +8351,7 @@ nsCSSFrameConstructor::ProcessRestyledFrames(nsStyleChangeList& aChangeList,
|
||||
if (!(frame->GetStateBits() &
|
||||
(NS_FRAME_IS_DIRTY | NS_FRAME_HAS_DIRTY_CHILDREN))) {
|
||||
while (frame) {
|
||||
aTracker.AddFrame(frame);
|
||||
mOverflowChangedTracker.AddFrame(frame);
|
||||
|
||||
frame =
|
||||
nsLayoutUtils::GetNextContinuationOrSpecialSibling(frame);
|
||||
@ -8401,7 +8393,6 @@ nsCSSFrameConstructor::ProcessRestyledFrames(nsStyleChangeList& aChangeList,
|
||||
#endif
|
||||
}
|
||||
|
||||
SetOverflowChangedTracker(nullptr);
|
||||
aChangeList.Clear();
|
||||
return NS_OK;
|
||||
}
|
||||
@ -8411,8 +8402,7 @@ nsCSSFrameConstructor::RestyleElement(Element *aElement,
|
||||
nsIFrame *aPrimaryFrame,
|
||||
nsChangeHint aMinHint,
|
||||
RestyleTracker& aRestyleTracker,
|
||||
bool aRestyleDescendants,
|
||||
OverflowChangedTracker& aTracker)
|
||||
bool aRestyleDescendants)
|
||||
{
|
||||
NS_ASSERTION(aPrimaryFrame == aElement->GetPrimaryFrame(),
|
||||
"frame/content mismatch");
|
||||
@ -8450,7 +8440,7 @@ nsCSSFrameConstructor::RestyleElement(Element *aElement,
|
||||
nsStyleChangeList changeList;
|
||||
ComputeStyleChangeFor(aPrimaryFrame, &changeList, aMinHint,
|
||||
aRestyleTracker, aRestyleDescendants);
|
||||
ProcessRestyledFrames(changeList, aTracker);
|
||||
ProcessRestyledFrames(changeList);
|
||||
} else {
|
||||
// no frames, reconstruct for content
|
||||
MaybeRecreateFramesForElement(aElement);
|
||||
@ -12234,9 +12224,8 @@ nsCSSFrameConstructor::DoRebuildAllStyleData(RestyleTracker& aRestyleTracker,
|
||||
&changeList, aExtraHint,
|
||||
aRestyleTracker, true);
|
||||
// Process the required changes
|
||||
OverflowChangedTracker tracker;
|
||||
ProcessRestyledFrames(changeList, tracker);
|
||||
tracker.Flush();
|
||||
ProcessRestyledFrames(changeList);
|
||||
FlushOverflowChangedTracker();
|
||||
|
||||
// Tell the style set it's safe to destroy the old rule tree. We
|
||||
// must do this after the ProcessRestyledFrames call in case the
|
||||
|
@ -241,8 +241,7 @@ public:
|
||||
// This function does not call ProcessAttachedQueue() on the binding manager.
|
||||
// If the caller wants that to happen synchronously, it needs to handle that
|
||||
// itself.
|
||||
nsresult ProcessRestyledFrames(nsStyleChangeList& aRestyleArray,
|
||||
OverflowChangedTracker& aTracker);
|
||||
nsresult ProcessRestyledFrames(nsStyleChangeList& aRestyleArray);
|
||||
|
||||
private:
|
||||
|
||||
@ -307,13 +306,9 @@ public:
|
||||
PostRestyleEventCommon(aElement, aRestyleHint, aMinChangeHint, true);
|
||||
}
|
||||
|
||||
OverflowChangedTracker *GetOverflowChangedTracker() const
|
||||
{
|
||||
return mOverflowChangedTracker;
|
||||
}
|
||||
void SetOverflowChangedTracker(OverflowChangedTracker *aTracker)
|
||||
void FlushOverflowChangedTracker()
|
||||
{
|
||||
mOverflowChangedTracker = aTracker;
|
||||
mOverflowChangedTracker.Flush();
|
||||
}
|
||||
|
||||
private:
|
||||
@ -406,8 +401,7 @@ private:
|
||||
nsIFrame* aPrimaryFrame,
|
||||
nsChangeHint aMinHint,
|
||||
RestyleTracker& aRestyleTracker,
|
||||
bool aRestyleDescendants,
|
||||
OverflowChangedTracker& aTracker);
|
||||
bool aRestyleDescendants);
|
||||
|
||||
nsresult InitAndRestoreFrame (const nsFrameConstructorState& aState,
|
||||
nsIContent* aContent,
|
||||
@ -1914,7 +1908,7 @@ private:
|
||||
|
||||
nsCOMPtr<nsILayoutHistoryState> mTempFrameTreeState;
|
||||
|
||||
OverflowChangedTracker *mOverflowChangedTracker;
|
||||
OverflowChangedTracker mOverflowChangedTracker;
|
||||
|
||||
// The total number of animation flushes by this frame constructor.
|
||||
// Used to keep the layer and animation manager in sync.
|
||||
|
@ -2734,9 +2734,8 @@ PresShell::RecreateFramesFor(nsIContent* aContent)
|
||||
|
||||
// Mark ourselves as not safe to flush while we're doing frame construction.
|
||||
++mChangeNestCount;
|
||||
css::OverflowChangedTracker tracker;
|
||||
nsresult rv = mFrameConstructor->ProcessRestyledFrames(changeList, tracker);
|
||||
tracker.Flush();
|
||||
nsresult rv = mFrameConstructor->ProcessRestyledFrames(changeList);
|
||||
mFrameConstructor->FlushOverflowChangedTracker();
|
||||
--mChangeNestCount;
|
||||
|
||||
return rv;
|
||||
@ -7899,9 +7898,8 @@ PresShell::Observe(nsISupports* aSubject,
|
||||
{
|
||||
nsAutoScriptBlocker scriptBlocker;
|
||||
++mChangeNestCount;
|
||||
css::OverflowChangedTracker tracker;
|
||||
mFrameConstructor->ProcessRestyledFrames(changeList, tracker);
|
||||
tracker.Flush();
|
||||
mFrameConstructor->ProcessRestyledFrames(changeList);
|
||||
mFrameConstructor->FlushOverflowChangedTracker();
|
||||
--mChangeNestCount;
|
||||
}
|
||||
}
|
||||
|
@ -429,10 +429,10 @@ nsTransitionManager::UpdateAllThrottledStyles()
|
||||
}
|
||||
}
|
||||
|
||||
OverflowChangedTracker tracker;
|
||||
mPresContext->PresShell()->FrameConstructor()->
|
||||
ProcessRestyledFrames(changeList, tracker);
|
||||
tracker.Flush();
|
||||
ProcessRestyledFrames(changeList);
|
||||
mPresContext->PresShell()->FrameConstructor()->
|
||||
FlushOverflowChangedTracker();
|
||||
}
|
||||
|
||||
already_AddRefed<nsIStyleRule>
|
||||
|
Loading…
Reference in New Issue
Block a user