Issue #1308 - Create nsDisplayTableBackgroundColor to avoid display

list collisions when processing the background color of a table.

This is effectively #146 Part 3c to go along with the other 2 there.

This resolves #1308.
This commit is contained in:
wolfbeast 2019-12-01 06:20:05 +01:00 • committed by Roy Tam
commit 75d291480c
2 changed files with 37 additions and 3 deletions

View file

@ -2703,9 +2703,22 @@ nsDisplayBackgroundImage::AppendBackgroundItemsToTop(nsDisplayListBuilder* aBuil
bg->BottomLayer(), bgRect,
useWillPaintBorderOptimization);
}
bgItemList.AppendNewToTop(
new (aBuilder) nsDisplayBackgroundColor(aBuilder, aFrame, bgRect, bg,
drawBackgroundColor ? color : NS_RGBA(0, 0, 0, 0)));
if (aSecondaryReferenceFrame) {
bgItemList.AppendNewToTop(
new (aBuilder) nsDisplayTableBackgroundColor(aBuilder,
aSecondaryReferenceFrame,
bgRect,
bg,
drawBackgroundColor ? color : NS_RGBA(0, 0, 0, 0),
aFrame));
} else {
bgItemList.AppendNewToTop(
new (aBuilder) nsDisplayBackgroundColor(aBuilder,
aFrame,
bgRect,
bg,
drawBackgroundColor ? color : NS_RGBA(0, 0, 0, 0)));
}
}
if (isThemed) {

View file

@ -3015,6 +3015,27 @@ protected:
mozilla::gfx::Color mColor;
};
class nsDisplayTableBackgroundColor : public nsDisplayBackgroundColor
{
public:
nsDisplayTableBackgroundColor(nsDisplayListBuilder* aBuilder,
nsIFrame* aFrame,
const nsRect& aBackgroundRect,
const nsStyleBackground* aBackgroundStyle,
nscolor aColor,
nsIFrame* aAncestorFrame)
: nsDisplayBackgroundColor(aBuilder, aFrame, aBackgroundRect, aBackgroundStyle, aColor)
, mTableType(GetTableTypeFromFrame(aAncestorFrame))
{ }
virtual uint32_t GetPerFrameKey() override {
return (static_cast<uint8_t>(mTableType) << nsDisplayItem::TYPE_BITS) |
nsDisplayItem::GetPerFrameKey();
}
protected:
TableType mTableType;
};
class nsDisplayClearBackground : public nsDisplayItem
{
public: