mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-06 07:48:38 +09:00
Issue #146 - Part 3: Create nsDisplayTableBackgroundImage to avoid
display list collisions when processing the background image of a table.
This commit is contained in:
parent
c8aaad0428
commit
a96ec7b886
2 changed files with 75 additions and 7 deletions
|
|
@ -2751,9 +2751,19 @@ nsDisplayBackgroundImage::AppendBackgroundItemsToTop(nsDisplayListBuilder* aBuil
|
|||
}
|
||||
|
||||
nsDisplayList thisItemList;
|
||||
nsDisplayBackgroundImage* bgItem =
|
||||
new (aBuilder) nsDisplayBackgroundImage(aBuilder, aFrame, i, bgOriginRect, bg);
|
||||
|
||||
nsDisplayBackgroundImage* bgItem;
|
||||
if (aSecondaryReferenceFrame) {
|
||||
bgItem =
|
||||
new (aBuilder) nsDisplayTableBackgroundImage(aBuilder,
|
||||
aFrame,
|
||||
i,
|
||||
bgOriginRect,
|
||||
bg,
|
||||
aSecondaryReferenceFrame);
|
||||
} else {
|
||||
bgItem =
|
||||
new (aBuilder) nsDisplayBackgroundImage(aBuilder, aFrame, i, bgOriginRect, bg);
|
||||
}
|
||||
if (bgItem->ShouldFixToViewport(aBuilder)) {
|
||||
if (aSecondaryReferenceFrame) {
|
||||
thisItemList.AppendNewToTop(
|
||||
|
|
@ -2906,7 +2916,7 @@ nsDisplayBackgroundImage::ImageLayerization
|
|||
nsDisplayBackgroundImage::ShouldCreateOwnLayer(nsDisplayListBuilder* aBuilder,
|
||||
LayerManager* aManager)
|
||||
{
|
||||
nsIFrame* backgroundStyleFrame = nsCSSRendering::FindBackgroundStyleFrame(mFrame);
|
||||
nsIFrame* backgroundStyleFrame = nsCSSRendering::FindBackgroundStyleFrame(StyleFrame());
|
||||
if (ActiveLayerTracker::IsBackgroundPositionAnimated(aBuilder,
|
||||
backgroundStyleFrame)) {
|
||||
return WHENEVER_POSSIBLE;
|
||||
|
|
@ -3161,16 +3171,16 @@ nsDisplayBackgroundImage::PaintInternal(nsDisplayListBuilder* aBuilder,
|
|||
StyleGeometryBox clip = mBackgroundStyle->mImage.mLayers[mLayer].mClip;
|
||||
|
||||
if (clip == StyleGeometryBox::Text) {
|
||||
if (!GenerateAndPushTextMask(mFrame, aCtx, mBackgroundRect, aBuilder)) {
|
||||
if (!GenerateAndPushTextMask(StyleFrame(), aCtx, mBackgroundRect, aBuilder)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
nsCSSRendering::PaintBGParams params =
|
||||
nsCSSRendering::PaintBGParams::ForSingleLayer(*mFrame->PresContext(),
|
||||
nsCSSRendering::PaintBGParams::ForSingleLayer(*StyleFrame()->PresContext(),
|
||||
*aCtx,
|
||||
aBounds, mBackgroundRect,
|
||||
mFrame, flags, mLayer,
|
||||
StyleFrame(), flags, mLayer,
|
||||
CompositionOp::OP_OVER);
|
||||
params.bgClipRect = aClipRect;
|
||||
image::DrawResult result =
|
||||
|
|
@ -3272,6 +3282,27 @@ nsDisplayBackgroundImage::GetPerFrameKey()
|
|||
nsDisplayItem::GetPerFrameKey();
|
||||
}
|
||||
|
||||
nsDisplayTableBackgroundImage::nsDisplayTableBackgroundImage(nsDisplayListBuilder* aBuilder,
|
||||
nsIFrame* aFrame,
|
||||
uint32_t aLayer,
|
||||
const nsRect& aBackgroundRect,
|
||||
const nsStyleBackground* aBackgroundStyle,
|
||||
nsIFrame* aCellFrame)
|
||||
: nsDisplayBackgroundImage(aBuilder, aFrame, aLayer, aBackgroundRect, aBackgroundStyle)
|
||||
, mStyleFrame(aFrame)
|
||||
, mTableType(GetTableTypeFromFrame(mStyleFrame))
|
||||
{
|
||||
mFrame = aCellFrame;
|
||||
}
|
||||
|
||||
bool
|
||||
nsDisplayTableBackgroundImage::IsInvalid(nsRect& aRect)
|
||||
{
|
||||
bool result = mStyleFrame ? mStyleFrame->IsInvalid(aRect) : false;
|
||||
aRect += ToReferenceFrame();
|
||||
return result;
|
||||
}
|
||||
|
||||
nsDisplayThemedBackground::nsDisplayThemedBackground(nsDisplayListBuilder* aBuilder,
|
||||
nsIFrame* aFrame,
|
||||
const nsRect& aBackgroundRect)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue