зеркало из https://github.com/mozilla/gecko-dev.git
Backed out changeset 1ad096055f1d (bug 1022612)
This commit is contained in:
Родитель
243e4742f8
Коммит
44b787c2c2
|
@ -3016,28 +3016,28 @@ nsDisplayWrapList::nsDisplayWrapList(nsDisplayListBuilder* aBuilder,
|
||||||
mReferenceFrame =
|
mReferenceFrame =
|
||||||
aBuilder->FindReferenceFrameFor(GetTransformRootFrame(aFrame));
|
aBuilder->FindReferenceFrameFor(GetTransformRootFrame(aFrame));
|
||||||
mToReferenceFrame = aFrame->GetOffsetToCrossDoc(mReferenceFrame);
|
mToReferenceFrame = aFrame->GetOffsetToCrossDoc(mReferenceFrame);
|
||||||
} else {
|
return;
|
||||||
// If we're a transformed frame, then we need to find out if we're inside
|
}
|
||||||
// the nsDisplayTransform or outside of it. Frames inside the transform
|
|
||||||
// need mReferenceFrame == mFrame, outside needs the next ancestor
|
// If we're a transformed frame, then we need to find out if we're inside
|
||||||
// reference frame.
|
// the nsDisplayTransform or outside of it. Frames inside the transform
|
||||||
// If we're inside the transform, then the nsDisplayItem constructor
|
// need mReferenceFrame == mFrame, outside needs the next ancestor
|
||||||
// will have done the right thing.
|
// reference frame.
|
||||||
// If we're outside the transform, then we should have only one child
|
// If we're inside the transform, then the nsDisplayItem constructor
|
||||||
// (since nsDisplayTransform wraps all actual content), and that child
|
// will have done the right thing.
|
||||||
// will have the correct reference frame set (since nsDisplayTransform
|
// If we're outside the transform, then we should have only one child
|
||||||
// handles this explictly).
|
// (since nsDisplayTransform wraps all actual content), and that child
|
||||||
//
|
// will have the correct reference frame set (since nsDisplayTransform
|
||||||
// Preserve-3d can cause us to have multiple nsDisplayTransform
|
// handles this explictly).
|
||||||
// children.
|
//
|
||||||
nsDisplayItem *i = mList.GetBottom();
|
// Preserve-3d can cause us to have multiple nsDisplayTransform
|
||||||
if (i && (!i->GetAbove() || i->GetType() == TYPE_TRANSFORM) &&
|
// children.
|
||||||
i->Frame() == mFrame) {
|
nsDisplayItem *i = mList.GetBottom();
|
||||||
mReferenceFrame = i->ReferenceFrame();
|
if (i && (!i->GetAbove() || i->GetType() == TYPE_TRANSFORM) &&
|
||||||
mToReferenceFrame = i->ToReferenceFrame();
|
i->Frame() == mFrame) {
|
||||||
}
|
mReferenceFrame = i->ReferenceFrame();
|
||||||
|
mToReferenceFrame = i->ToReferenceFrame();
|
||||||
}
|
}
|
||||||
mVisibleRect = aBuilder->GetDirtyRect() + mToReferenceFrame;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
nsDisplayWrapList::nsDisplayWrapList(nsDisplayListBuilder* aBuilder,
|
nsDisplayWrapList::nsDisplayWrapList(nsDisplayListBuilder* aBuilder,
|
||||||
|
@ -3056,14 +3056,14 @@ nsDisplayWrapList::nsDisplayWrapList(nsDisplayListBuilder* aBuilder,
|
||||||
mReferenceFrame =
|
mReferenceFrame =
|
||||||
aBuilder->FindReferenceFrameFor(GetTransformRootFrame(aFrame));
|
aBuilder->FindReferenceFrameFor(GetTransformRootFrame(aFrame));
|
||||||
mToReferenceFrame = aFrame->GetOffsetToCrossDoc(mReferenceFrame);
|
mToReferenceFrame = aFrame->GetOffsetToCrossDoc(mReferenceFrame);
|
||||||
} else {
|
return;
|
||||||
// See the previous nsDisplayWrapList constructor
|
}
|
||||||
if (aItem->Frame() == aFrame) {
|
|
||||||
mReferenceFrame = aItem->ReferenceFrame();
|
// See the previous nsDisplayWrapList constructor
|
||||||
mToReferenceFrame = aItem->ToReferenceFrame();
|
if (aItem->Frame() == aFrame) {
|
||||||
}
|
mReferenceFrame = aItem->ReferenceFrame();
|
||||||
|
mToReferenceFrame = aItem->ToReferenceFrame();
|
||||||
}
|
}
|
||||||
mVisibleRect = aBuilder->GetDirtyRect() + mToReferenceFrame;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
nsDisplayWrapList::~nsDisplayWrapList() {
|
nsDisplayWrapList::~nsDisplayWrapList() {
|
||||||
|
@ -4336,15 +4336,6 @@ nsDisplayTransform::nsDisplayTransform(nsDisplayListBuilder* aBuilder, nsIFrame
|
||||||
mStoredList.SetClip(aBuilder, DisplayItemClip::NoClip());
|
mStoredList.SetClip(aBuilder, DisplayItemClip::NoClip());
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
nsDisplayTransform::SetReferenceFrameToAncestor(nsDisplayListBuilder* aBuilder)
|
|
||||||
{
|
|
||||||
mReferenceFrame =
|
|
||||||
aBuilder->FindReferenceFrameFor(GetTransformRootFrame(mFrame));
|
|
||||||
mToReferenceFrame = mFrame->GetOffsetToCrossDoc(mReferenceFrame);
|
|
||||||
mVisibleRect = aBuilder->GetDirtyRect() + mToReferenceFrame;
|
|
||||||
}
|
|
||||||
|
|
||||||
nsDisplayTransform::nsDisplayTransform(nsDisplayListBuilder* aBuilder, nsIFrame *aFrame,
|
nsDisplayTransform::nsDisplayTransform(nsDisplayListBuilder* aBuilder, nsIFrame *aFrame,
|
||||||
nsDisplayList *aList, uint32_t aIndex)
|
nsDisplayList *aList, uint32_t aIndex)
|
||||||
: nsDisplayItem(aBuilder, aFrame)
|
: nsDisplayItem(aBuilder, aFrame)
|
||||||
|
@ -4354,7 +4345,9 @@ nsDisplayTransform::nsDisplayTransform(nsDisplayListBuilder* aBuilder, nsIFrame
|
||||||
{
|
{
|
||||||
MOZ_COUNT_CTOR(nsDisplayTransform);
|
MOZ_COUNT_CTOR(nsDisplayTransform);
|
||||||
NS_ABORT_IF_FALSE(aFrame, "Must have a frame!");
|
NS_ABORT_IF_FALSE(aFrame, "Must have a frame!");
|
||||||
SetReferenceFrameToAncestor(aBuilder);
|
mReferenceFrame =
|
||||||
|
aBuilder->FindReferenceFrameFor(GetTransformRootFrame(aFrame));
|
||||||
|
mToReferenceFrame = aFrame->GetOffsetToCrossDoc(mReferenceFrame);
|
||||||
mStoredList.SetClip(aBuilder, DisplayItemClip::NoClip());
|
mStoredList.SetClip(aBuilder, DisplayItemClip::NoClip());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4367,7 +4360,9 @@ nsDisplayTransform::nsDisplayTransform(nsDisplayListBuilder* aBuilder, nsIFrame
|
||||||
{
|
{
|
||||||
MOZ_COUNT_CTOR(nsDisplayTransform);
|
MOZ_COUNT_CTOR(nsDisplayTransform);
|
||||||
NS_ABORT_IF_FALSE(aFrame, "Must have a frame!");
|
NS_ABORT_IF_FALSE(aFrame, "Must have a frame!");
|
||||||
SetReferenceFrameToAncestor(aBuilder);
|
mReferenceFrame =
|
||||||
|
aBuilder->FindReferenceFrameFor(GetTransformRootFrame(aFrame));
|
||||||
|
mToReferenceFrame = aFrame->GetOffsetToCrossDoc(mReferenceFrame);
|
||||||
mStoredList.SetClip(aBuilder, DisplayItemClip::NoClip());
|
mStoredList.SetClip(aBuilder, DisplayItemClip::NoClip());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5056,7 +5051,7 @@ nsRegion nsDisplayTransform::GetOpaqueRegion(nsDisplayListBuilder *aBuilder,
|
||||||
if (matrix.Is2D(&matrix2d) &&
|
if (matrix.Is2D(&matrix2d) &&
|
||||||
matrix2d.PreservesAxisAlignedRectangles() &&
|
matrix2d.PreservesAxisAlignedRectangles() &&
|
||||||
mStoredList.GetOpaqueRegion(aBuilder, &tmpSnap).Contains(untransformedVisible)) {
|
mStoredList.GetOpaqueRegion(aBuilder, &tmpSnap).Contains(untransformedVisible)) {
|
||||||
result = mVisibleRect.Intersect(GetBounds(aBuilder, &tmpSnap));
|
result = mVisibleRect;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -5116,7 +5111,7 @@ nsDisplayTransform::TryMerge(nsDisplayListBuilder *aBuilder,
|
||||||
/* Now, move everything over to this frame and signal that
|
/* Now, move everything over to this frame and signal that
|
||||||
* we merged things!
|
* we merged things!
|
||||||
*/
|
*/
|
||||||
mStoredList.MergeFromTrackingMergedFrames(&static_cast<nsDisplayTransform*>(aItem)->mStoredList);
|
mStoredList.MergeFrom(&static_cast<nsDisplayTransform*>(aItem)->mStoredList);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -867,10 +867,8 @@ public:
|
||||||
, mPainted(false)
|
, mPainted(false)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
mReferenceFrame = aBuilder->FindReferenceFrameFor(aFrame, &mToReferenceFrame);
|
mReferenceFrame = aBuilder->FindReferenceFrameFor(aFrame);
|
||||||
NS_ASSERTION(aBuilder->GetDirtyRect().width >= 0 ||
|
mToReferenceFrame = aBuilder->ToReferenceFrame(aFrame);
|
||||||
!aBuilder->IsForPainting(), "dirty rect not set");
|
|
||||||
mVisibleRect = aBuilder->GetDirtyRect() + mToReferenceFrame;
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* This constructor is only used in rare cases when we need to construct
|
* This constructor is only used in rare cases when we need to construct
|
||||||
|
@ -887,7 +885,7 @@ public:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
virtual ~nsDisplayItem() {}
|
virtual ~nsDisplayItem() {}
|
||||||
|
|
||||||
void* operator new(size_t aSize,
|
void* operator new(size_t aSize,
|
||||||
nsDisplayListBuilder* aBuilder) CPP_THROW_NEW {
|
nsDisplayListBuilder* aBuilder) CPP_THROW_NEW {
|
||||||
return aBuilder->Allocate(aSize);
|
return aBuilder->Allocate(aSize);
|
||||||
|
@ -2681,11 +2679,14 @@ public:
|
||||||
protected:
|
protected:
|
||||||
nsDisplayWrapList() {}
|
nsDisplayWrapList() {}
|
||||||
|
|
||||||
void MergeFromTrackingMergedFrames(nsDisplayWrapList* aOther)
|
void MergeFrom(nsDisplayWrapList* aOther)
|
||||||
{
|
{
|
||||||
mList.AppendToBottom(&aOther->mList);
|
mList.AppendToBottom(&aOther->mList);
|
||||||
mBounds.UnionRect(mBounds, aOther->mBounds);
|
mBounds.UnionRect(mBounds, aOther->mBounds);
|
||||||
mVisibleRect.UnionRect(mVisibleRect, aOther->mVisibleRect);
|
}
|
||||||
|
void MergeFromTrackingMergedFrames(nsDisplayWrapList* aOther)
|
||||||
|
{
|
||||||
|
MergeFrom(aOther);
|
||||||
mMergedFrames.AppendElement(aOther->mFrame);
|
mMergedFrames.AppendElement(aOther->mFrame);
|
||||||
mMergedFrames.MoveElementsFrom(aOther->mMergedFrames);
|
mMergedFrames.MoveElementsFrom(aOther->mMergedFrames);
|
||||||
}
|
}
|
||||||
|
@ -3427,8 +3428,6 @@ public:
|
||||||
virtual void WriteDebugInfo(nsACString& aTo) MOZ_OVERRIDE;
|
virtual void WriteDebugInfo(nsACString& aTo) MOZ_OVERRIDE;
|
||||||
#endif
|
#endif
|
||||||
private:
|
private:
|
||||||
void SetReferenceFrameToAncestor(nsDisplayListBuilder* aBuilder);
|
|
||||||
|
|
||||||
static gfx3DMatrix GetResultingTransformMatrixInternal(const FrameTransformProperties& aProperties,
|
static gfx3DMatrix GetResultingTransformMatrixInternal(const FrameTransformProperties& aProperties,
|
||||||
const nsPoint& aOrigin,
|
const nsPoint& aOrigin,
|
||||||
float aAppUnitsPerPixel,
|
float aAppUnitsPerPixel,
|
||||||
|
|
Загрузка…
Ссылка в новой задаче