--- a/layout/painting/nsDisplayList.h
+++ b/layout/painting/nsDisplayList.h
@@ -5142,17 +5142,29 @@ class nsDisplayTableBlendMode : public n
public:
nsDisplayTableBlendMode(nsDisplayListBuilder* aBuilder, nsIFrame* aFrame,
nsDisplayList* aList, uint8_t aBlendMode,
const ActiveScrolledRoot* aActiveScrolledRoot,
uint32_t aIndex, nsIFrame* aAncestorFrame)
: nsDisplayBlendMode(aBuilder, aFrame, aList, aBlendMode, aActiveScrolledRoot, aIndex)
, mAncestorFrame(aAncestorFrame)
, mTableType(GetTableTypeFromFrame(aAncestorFrame))
- { }
+ {}
+
+ nsDisplayTableBlendMode(nsDisplayListBuilder* aBuilder,
+ const nsDisplayTableBlendMode& aOther)
+ : nsDisplayBlendMode(aBuilder, aOther)
+ , mAncestorFrame(aOther.mAncestorFrame)
+ , mTableType(aOther.mTableType)
+ {}
+
+ virtual nsDisplayWrapList* Clone(nsDisplayListBuilder* aBuilder) const override
+ {
+ return new (aBuilder) nsDisplayTableBlendMode(aBuilder, *this);
+ }
virtual nsIFrame* FrameForInvalidation() const override { return mAncestorFrame; }
virtual uint32_t GetPerFrameKey() const override {
return (mIndex << (TYPE_BITS + static_cast<uint8_t>(TableTypeBits::COUNT))) |
(static_cast<uint8_t>(mTableType) << TYPE_BITS) |
nsDisplayItem::GetPerFrameKey();
}
@@ -5234,16 +5246,22 @@ protected:
class nsDisplayTableBlendContainer : public nsDisplayBlendContainer
{
public:
static nsDisplayTableBlendContainer*
CreateForBackgroundBlendMode(nsDisplayListBuilder* aBuilder, nsIFrame* aFrame,
nsDisplayList* aList,
const ActiveScrolledRoot* aActiveScrolledRoot,
nsIFrame* aAncestorFrame);
+
+ virtual nsDisplayWrapList* Clone(nsDisplayListBuilder* aBuilder) const override
+ {
+ return new (aBuilder) nsDisplayTableBlendContainer(aBuilder, *this);
+ }
+
virtual nsIFrame* FrameForInvalidation() const override { return mAncestorFrame; }
virtual uint32_t GetPerFrameKey() const override {
return (static_cast<uint8_t>(mTableType) << TYPE_BITS) |
nsDisplayItem::GetPerFrameKey();
}
NS_DISPLAY_DECL_NAME("BlendContainer", TYPE_BLEND_CONTAINER)
@@ -5251,17 +5269,24 @@ public:
protected:
nsDisplayTableBlendContainer(nsDisplayListBuilder* aBuilder, nsIFrame* aFrame,
nsDisplayList* aList,
const ActiveScrolledRoot* aActiveScrolledRoot,
bool aIsForBackground, nsIFrame* aAncestorFrame)
: nsDisplayBlendContainer(aBuilder, aFrame, aList, aActiveScrolledRoot, aIsForBackground)
, mAncestorFrame(aAncestorFrame)
, mTableType(GetTableTypeFromFrame(aAncestorFrame))
- { }
+ {}
+
+ nsDisplayTableBlendContainer(nsDisplayListBuilder* aBuilder,
+ const nsDisplayTableBlendContainer& aOther)
+ : nsDisplayBlendContainer(aBuilder, aOther)
+ , mAncestorFrame(aOther.mAncestorFrame)
+ , mTableType(aOther.mTableType)
+ {}
nsIFrame* mAncestorFrame;
TableType mTableType;
};
/**
* nsDisplayOwnLayer constructor flags. If we nest this class inside
@@ -5500,31 +5525,32 @@ public:
nsDisplayList* aList,
const ActiveScrolledRoot* aActiveScrolledRoot);
nsDisplayFixedPosition(nsDisplayListBuilder* aBuilder,
const nsDisplayFixedPosition& aOther)
: nsDisplayOwnLayer(aBuilder, aOther)
, mAnimatedGeometryRootForScrollMetadata(aOther.mAnimatedGeometryRootForScrollMetadata)
, mIndex(aOther.mIndex)
, mIsFixedBackground(aOther.mIsFixedBackground)
- {}
+ {
+ MOZ_COUNT_CTOR(nsDisplayFixedPosition);
+ }
static nsDisplayFixedPosition* CreateForFixedBackground(nsDisplayListBuilder* aBuilder,
nsIFrame* aFrame,
nsDisplayBackgroundImage* aImage,
uint32_t aIndex);
#ifdef NS_BUILD_REFCNT_LOGGING
virtual ~nsDisplayFixedPosition();
#endif
virtual nsDisplayWrapList* Clone(nsDisplayListBuilder* aBuilder) const override
{
- MOZ_COUNT_CTOR(nsDisplayFixedPosition);
return new (aBuilder) nsDisplayFixedPosition(aBuilder, *this);
}
virtual already_AddRefed<Layer> BuildLayer(nsDisplayListBuilder* aBuilder,
LayerManager* aManager,
const ContainerLayerParameters& aContainerParameters) override;
NS_DISPLAY_DECL_NAME("FixedPosition", TYPE_FIXED_POSITION)
virtual LayerState GetLayerState(nsDisplayListBuilder* aBuilder,
@@ -5571,28 +5597,42 @@ class nsDisplayTableFixedPosition : publ
{
public:
static nsDisplayTableFixedPosition* CreateForFixedBackground(nsDisplayListBuilder* aBuilder,
nsIFrame* aFrame,
nsDisplayBackgroundImage* aImage,
uint32_t aIndex,
nsIFrame* aAncestorFrame);
+ virtual nsDisplayWrapList* Clone(nsDisplayListBuilder* aBuilder) const override
+ {
+ return new (aBuilder) nsDisplayTableFixedPosition(aBuilder, *this);
+ }
+
virtual nsIFrame* FrameForInvalidation() const override { return mAncestorFrame; }
virtual uint32_t GetPerFrameKey() const override {
return (mIndex << (TYPE_BITS + static_cast<uint8_t>(TableTypeBits::COUNT))) |
(static_cast<uint8_t>(mTableType) << TYPE_BITS) |
nsDisplayItem::GetPerFrameKey();
}
NS_DISPLAY_DECL_NAME("TableFixedPosition", TYPE_TABLE_FIXED_POSITION)
protected:
nsDisplayTableFixedPosition(nsDisplayListBuilder* aBuilder, nsIFrame* aFrame,
- nsDisplayList* aList, uint32_t aIndex, nsIFrame* aAncestorFrame);
+ nsDisplayList* aList, uint32_t aIndex,
+ nsIFrame* aAncestorFrame);
+
+ nsDisplayTableFixedPosition(nsDisplayListBuilder* aBuilder,
+ const nsDisplayTableFixedPosition& aOther)
+ : nsDisplayFixedPosition(aBuilder, aOther)
+ , mAncestorFrame(aOther.mAncestorFrame)
+ , mTableType(aOther.mTableType)
+ {}
+
nsIFrame* mAncestorFrame;
TableType mTableType;
};
/**
* This creates an empty scrollable layer. It has no child layers.
* It is used to record the existence of a scrollable frame in the layer