mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-10 20:05:49 +00:00
Bug 1450189 - Don't invalidate display items when we get a new style context. r=miko
This commit is contained in:
parent
cc659a75b9
commit
199c2a649c
@ -172,7 +172,7 @@ public:
|
||||
uint32_t aLineNumber,
|
||||
uint32_t aIndex)
|
||||
: nsDisplayItem(aBuilder, aFrame), mRect(aRect),
|
||||
mStyle(aStyle), mAscent(aAscent), mIndex((aLineNumber << 1) + aIndex) {
|
||||
mStyle(*aStyle), mAscent(aAscent), mIndex((aLineNumber << 1) + aIndex) {
|
||||
MOZ_COUNT_CTOR(nsDisplayTextOverflowMarker);
|
||||
}
|
||||
#ifdef NS_BUILD_REFCNT_LOGGING
|
||||
@ -221,7 +221,7 @@ public:
|
||||
NS_DISPLAY_DECL_NAME("TextOverflow", TYPE_TEXT_OVERFLOW)
|
||||
private:
|
||||
nsRect mRect; // in reference frame coordinates
|
||||
const nsStyleTextOverflowSide* mStyle;
|
||||
const nsStyleTextOverflowSide mStyle;
|
||||
nscoord mAscent; // baseline for the marker text in mRect
|
||||
uint32_t mIndex;
|
||||
};
|
||||
@ -274,7 +274,7 @@ nsDisplayTextOverflowMarker::PaintTextToContext(gfxContext* aCtx,
|
||||
}
|
||||
pt += aOffsetFromRect;
|
||||
|
||||
if (mStyle->mType == NS_STYLE_TEXT_OVERFLOW_ELLIPSIS) {
|
||||
if (mStyle.mType == NS_STYLE_TEXT_OVERFLOW_ELLIPSIS) {
|
||||
gfxTextRun* textRun = GetEllipsisTextRun(mFrame);
|
||||
if (textRun) {
|
||||
NS_ASSERTION(!textRun->IsRightToLeft(),
|
||||
@ -286,8 +286,8 @@ nsDisplayTextOverflowMarker::PaintTextToContext(gfxContext* aCtx,
|
||||
} else {
|
||||
RefPtr<nsFontMetrics> fm =
|
||||
nsLayoutUtils::GetInflatedFontMetricsForFrame(mFrame);
|
||||
nsLayoutUtils::DrawString(mFrame, *fm, aCtx, mStyle->mString.get(),
|
||||
mStyle->mString.Length(), pt);
|
||||
nsLayoutUtils::DrawString(mFrame, *fm, aCtx, mStyle.mString.get(),
|
||||
mStyle.mString.Length(), pt);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -366,14 +366,14 @@ nsDisplayCanvasBackgroundImage::IsSingleFixedPositionImage(nsDisplayListBuilder*
|
||||
if (!mBackgroundStyle)
|
||||
return false;
|
||||
|
||||
if (mBackgroundStyle->mImage.mLayers.Length() != 1)
|
||||
if (mBackgroundStyle->StyleBackground()->mImage.mLayers.Length() != 1)
|
||||
return false;
|
||||
|
||||
|
||||
nsPresContext* presContext = mFrame->PresContext();
|
||||
uint32_t flags = aBuilder->GetBackgroundPaintFlags();
|
||||
nsRect borderArea = nsRect(ToReferenceFrame(), mFrame->GetSize());
|
||||
const nsStyleImageLayers::Layer &layer = mBackgroundStyle->mImage.mLayers[mLayer];
|
||||
const nsStyleImageLayers::Layer &layer = mBackgroundStyle->StyleBackground()->mImage.mLayers[mLayer];
|
||||
|
||||
if (layer.mAttachment != NS_STYLE_IMAGELAYER_ATTACHMENT_FIXED)
|
||||
return false;
|
||||
@ -456,11 +456,11 @@ nsCanvasFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
// the overflow area, so just add nsDisplayCanvasBackground instead of
|
||||
// calling DisplayBorderBackgroundOutline.
|
||||
if (IsVisibleForPainting(aBuilder)) {
|
||||
const nsStyleBackground* bg = nullptr;
|
||||
ComputedStyle* bg = nullptr;
|
||||
nsIFrame* dependentFrame = nullptr;
|
||||
bool isThemed = IsThemed();
|
||||
if (!isThemed && nsCSSRendering::FindBackgroundFrame(this, &dependentFrame)) {
|
||||
bg = dependentFrame->Style()->StyleBackground();
|
||||
bg = dependentFrame->Style();
|
||||
if (dependentFrame == this) {
|
||||
dependentFrame = nullptr;
|
||||
}
|
||||
@ -485,7 +485,7 @@ nsCanvasFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
nsDisplayListBuilder::AutoContainerASRTracker contASRTracker(aBuilder);
|
||||
|
||||
// Create separate items for each background layer.
|
||||
const nsStyleImageLayers& layers = bg->mImage;
|
||||
const nsStyleImageLayers& layers = bg->StyleBackground()->mImage;
|
||||
NS_FOR_VISIBLE_IMAGE_LAYERS_BACK_TO_FRONT(i, layers) {
|
||||
if (layers.mLayers[i].mImage.IsEmpty()) {
|
||||
continue;
|
||||
|
@ -1207,7 +1207,6 @@ nsFrame::DidSetComputedStyle(ComputedStyle* aOldComputedStyle)
|
||||
|
||||
RemoveStateBits(NS_FRAME_SIMPLE_EVENT_REGIONS |
|
||||
NS_FRAME_SIMPLE_DISPLAYLIST);
|
||||
this->MarkNeedsDisplayItemRebuild();
|
||||
|
||||
mMayHaveRoundedCorners = true;
|
||||
}
|
||||
|
@ -3459,11 +3459,11 @@ nsDisplayBackgroundImage::GetInitData(nsDisplayListBuilder* aBuilder,
|
||||
nsIFrame* aFrame,
|
||||
uint32_t aLayer,
|
||||
const nsRect& aBackgroundRect,
|
||||
const nsStyleBackground* aBackgroundStyle)
|
||||
ComputedStyle* aBackgroundStyle)
|
||||
{
|
||||
nsPresContext* presContext = aFrame->PresContext();
|
||||
uint32_t flags = aBuilder->GetBackgroundPaintFlags();
|
||||
const nsStyleImageLayers::Layer &layer = aBackgroundStyle->mImage.mLayers[aLayer];
|
||||
const nsStyleImageLayers::Layer &layer = aBackgroundStyle->StyleBackground()->mImage.mLayers[aLayer];
|
||||
|
||||
bool isTransformedFixed;
|
||||
nsBackgroundLayerState state =
|
||||
@ -3708,12 +3708,12 @@ nsDisplayBackgroundImage::AppendBackgroundItemsToTop(nsDisplayListBuilder* aBuil
|
||||
nsDisplayBackgroundColor *bgItem;
|
||||
if (aSecondaryReferenceFrame) {
|
||||
bgItem =
|
||||
MakeDisplayItem<nsDisplayTableBackgroundColor>(aBuilder, aSecondaryReferenceFrame, bgColorRect, bg,
|
||||
MakeDisplayItem<nsDisplayTableBackgroundColor>(aBuilder, aSecondaryReferenceFrame, bgColorRect, bgSC,
|
||||
drawBackgroundColor ? color : NS_RGBA(0, 0, 0, 0),
|
||||
aFrame);
|
||||
} else {
|
||||
bgItem =
|
||||
MakeDisplayItem<nsDisplayBackgroundColor>(aBuilder, aFrame, bgColorRect, bg,
|
||||
MakeDisplayItem<nsDisplayBackgroundColor>(aBuilder, aFrame, bgColorRect, bgSC,
|
||||
drawBackgroundColor ? color : NS_RGBA(0, 0, 0, 0));
|
||||
}
|
||||
bgItem->SetDependentFrame(aBuilder, dependentFrame);
|
||||
@ -3775,7 +3775,7 @@ nsDisplayBackgroundImage::AppendBackgroundItemsToTop(nsDisplayListBuilder* aBuil
|
||||
|
||||
nsDisplayList thisItemList;
|
||||
nsDisplayBackgroundImage::InitData bgData =
|
||||
nsDisplayBackgroundImage::GetInitData(aBuilder, aFrame, i, bgOriginRect, bg);
|
||||
nsDisplayBackgroundImage::GetInitData(aBuilder, aFrame, i, bgOriginRect, bgSC);
|
||||
|
||||
if (bgData.shouldFixToViewport) {
|
||||
|
||||
@ -3926,7 +3926,7 @@ nsDisplayBackgroundImage::CanOptimizeToImageLayer(LayerManager* aManager,
|
||||
|
||||
// For 'contain' and 'cover', we allow any pixel of the image to be sampled
|
||||
// because there isn't going to be any spriting/atlasing going on.
|
||||
const nsStyleImageLayers::Layer &layer = mBackgroundStyle->mImage.mLayers[mLayer];
|
||||
const nsStyleImageLayers::Layer &layer = mBackgroundStyle->StyleBackground()->mImage.mLayers[mLayer];
|
||||
bool allowPartialImages =
|
||||
(layer.mSize.mWidthType == nsStyleImageLayers::Size::eContain ||
|
||||
layer.mSize.mWidthType == nsStyleImageLayers::Size::eCover);
|
||||
@ -3965,7 +3965,7 @@ nsDisplayBackgroundImage::ShouldCreateOwnLayer(nsDisplayListBuilder* aBuilder,
|
||||
}
|
||||
|
||||
if (nsLayoutUtils::AnimatedImageLayersEnabled() && mBackgroundStyle) {
|
||||
const nsStyleImageLayers::Layer &layer = mBackgroundStyle->mImage.mLayers[mLayer];
|
||||
const nsStyleImageLayers::Layer &layer = mBackgroundStyle->StyleBackground()->mImage.mLayers[mLayer];
|
||||
const nsStyleImage* image = &layer.mImage;
|
||||
if (image->GetType() == eStyleImageType_Image) {
|
||||
imgIRequest* imgreq = image->GetImageData();
|
||||
@ -4077,11 +4077,11 @@ nsDisplayBackgroundImage::CanBuildWebRenderDisplayItems(LayerManager* aManager,
|
||||
mImageFlags = aDisplayListBuilder->GetBackgroundPaintFlags();
|
||||
}
|
||||
|
||||
return mBackgroundStyle->mImage.mLayers[mLayer].mClip != StyleGeometryBox::Text &&
|
||||
return mBackgroundStyle->StyleBackground()->mImage.mLayers[mLayer].mClip != StyleGeometryBox::Text &&
|
||||
nsCSSRendering::CanBuildWebRenderDisplayItemsForStyleImageLayer(aManager,
|
||||
*StyleFrame()->PresContext(),
|
||||
StyleFrame(),
|
||||
mBackgroundStyle,
|
||||
mBackgroundStyle->StyleBackground(),
|
||||
mLayer,
|
||||
mImageFlags);
|
||||
}
|
||||
@ -4186,7 +4186,7 @@ nsDisplayBackgroundImage::GetOpaqueRegion(nsDisplayListBuilder* aBuilder,
|
||||
if (mFrame->StyleBorder()->mBoxDecorationBreak ==
|
||||
StyleBoxDecorationBreak::Clone ||
|
||||
(!mFrame->GetPrevContinuation() && !mFrame->GetNextContinuation())) {
|
||||
const nsStyleImageLayers::Layer& layer = mBackgroundStyle->mImage.mLayers[mLayer];
|
||||
const nsStyleImageLayers::Layer& layer = mBackgroundStyle->StyleBackground()->mImage.mLayers[mLayer];
|
||||
if (layer.mImage.IsOpaque() && layer.mBlendMode == NS_STYLE_BLEND_NORMAL &&
|
||||
layer.mRepeat.mXRepeat != StyleImageLayerRepeat::Space &&
|
||||
layer.mRepeat.mYRepeat != StyleImageLayerRepeat::Space &&
|
||||
@ -4218,7 +4218,7 @@ nsDisplayBackgroundImage::GetPositioningArea() const
|
||||
return nsCSSRendering::ComputeImageLayerPositioningArea(
|
||||
mFrame->PresContext(), mFrame,
|
||||
mBackgroundRect,
|
||||
mBackgroundStyle->mImage.mLayers[mLayer],
|
||||
mBackgroundStyle->StyleBackground()->mImage.mLayers[mLayer],
|
||||
&attachedToFrame,
|
||||
&transformedFixed) + ToReferenceFrame();
|
||||
}
|
||||
@ -4236,7 +4236,7 @@ nsDisplayBackgroundImage::RenderingMightDependOnPositioningAreaSizeChange() cons
|
||||
return true;
|
||||
}
|
||||
|
||||
const nsStyleImageLayers::Layer &layer = mBackgroundStyle->mImage.mLayers[mLayer];
|
||||
const nsStyleImageLayers::Layer &layer = mBackgroundStyle->StyleBackground()->mImage.mLayers[mLayer];
|
||||
if (layer.RenderingMightDependOnPositioningAreaSizeChange()) {
|
||||
return true;
|
||||
}
|
||||
@ -4254,7 +4254,7 @@ nsDisplayBackgroundImage::PaintInternal(nsDisplayListBuilder* aBuilder,
|
||||
gfxContext* aCtx, const nsRect& aBounds,
|
||||
nsRect* aClipRect) {
|
||||
gfxContext* ctx = aCtx;
|
||||
StyleGeometryBox clip = mBackgroundStyle->mImage.mLayers[mLayer].mClip;
|
||||
StyleGeometryBox clip = mBackgroundStyle->StyleBackground()->mImage.mLayers[mLayer].mClip;
|
||||
|
||||
if (clip == StyleGeometryBox::Text) {
|
||||
if (!GenerateAndPushTextMask(StyleFrame(), aCtx, mBackgroundRect, aBuilder)) {
|
||||
@ -4306,7 +4306,7 @@ nsDisplayBackgroundImage::ComputeInvalidationRegion(nsDisplayListBuilder* aBuild
|
||||
return;
|
||||
}
|
||||
if (aBuilder->ShouldSyncDecodeImages()) {
|
||||
const nsStyleImage& image = mBackgroundStyle->mImage.mLayers[mLayer].mImage;
|
||||
const nsStyleImage& image = mBackgroundStyle->StyleBackground()->mImage.mLayers[mLayer].mImage;
|
||||
if (image.GetType() == eStyleImageType_Image &&
|
||||
geometry->ShouldInvalidateToSyncDecodeImages()) {
|
||||
aInvalidRegion->Or(*aInvalidRegion, bounds);
|
||||
@ -4346,7 +4346,7 @@ nsDisplayBackgroundImage::GetBoundsInternal(nsDisplayListBuilder* aBuilder,
|
||||
nsCanvasFrame* canvasFrame = static_cast<nsCanvasFrame*>(frame);
|
||||
clipRect = canvasFrame->CanvasArea() + ToReferenceFrame();
|
||||
}
|
||||
const nsStyleImageLayers::Layer& layer = mBackgroundStyle->mImage.mLayers[mLayer];
|
||||
const nsStyleImageLayers::Layer& layer = mBackgroundStyle->StyleBackground()->mImage.mLayers[mLayer];
|
||||
return nsCSSRendering::GetBackgroundLayerRect(presContext, frame,
|
||||
mBackgroundRect, clipRect, layer,
|
||||
aBuilder->GetBackgroundPaintFlags());
|
||||
@ -4690,7 +4690,7 @@ nsDisplayBackgroundColor::GetLayerState(nsDisplayListBuilder* aBuilder,
|
||||
LayerManager* aManager,
|
||||
const ContainerLayerParameters& aParameters)
|
||||
{
|
||||
StyleGeometryBox clip = mBackgroundStyle->mImage.mLayers[0].mClip;
|
||||
StyleGeometryBox clip = mBackgroundStyle->StyleBackground()->mImage.mLayers[0].mClip;
|
||||
if (ForceActiveLayers() && clip != StyleGeometryBox::Text) {
|
||||
return LAYER_ACTIVE;
|
||||
}
|
||||
@ -4734,7 +4734,7 @@ nsDisplayBackgroundColor::CreateWebRenderCommands(mozilla::wr::DisplayListBuilde
|
||||
return true;
|
||||
}
|
||||
|
||||
StyleGeometryBox clip = mBackgroundStyle->mImage.mLayers[0].mClip;
|
||||
StyleGeometryBox clip = mBackgroundStyle->StyleBackground()->mImage.mLayers[0].mClip;
|
||||
if (clip == StyleGeometryBox::Text) {
|
||||
return false;
|
||||
}
|
||||
@ -4783,7 +4783,7 @@ nsDisplayBackgroundColor::Paint(nsDisplayListBuilder* aBuilder,
|
||||
nsLayoutUtils::RectToGfxRect(mBackgroundRect,
|
||||
mFrame->PresContext()->AppUnitsPerDevPixel());
|
||||
|
||||
StyleGeometryBox clip = mBackgroundStyle->mImage.mLayers[0].mClip;
|
||||
StyleGeometryBox clip = mBackgroundStyle->StyleBackground()->mImage.mLayers[0].mClip;
|
||||
if (clip == StyleGeometryBox::Text) {
|
||||
if (!GenerateAndPushTextMask(mFrame, aCtx, mBackgroundRect, aBuilder)) {
|
||||
return;
|
||||
@ -4817,7 +4817,7 @@ nsDisplayBackgroundColor::GetOpaqueRegion(nsDisplayListBuilder* aBuilder,
|
||||
return nsRegion();
|
||||
|
||||
|
||||
const nsStyleImageLayers::Layer& bottomLayer = mBackgroundStyle->BottomLayer();
|
||||
const nsStyleImageLayers::Layer& bottomLayer = mBackgroundStyle->StyleBackground()->BottomLayer();
|
||||
if (bottomLayer.mClip == StyleGeometryBox::Text) {
|
||||
return nsRegion();
|
||||
}
|
||||
|
@ -3840,7 +3840,7 @@ public:
|
||||
struct InitData {
|
||||
nsDisplayListBuilder* builder;
|
||||
nsIFrame* frame;
|
||||
const nsStyleBackground* backgroundStyle;
|
||||
mozilla::ComputedStyle* backgroundStyle;
|
||||
nsCOMPtr<imgIContainer> image;
|
||||
nsRect backgroundRect;
|
||||
nsRect fillArea;
|
||||
@ -3861,7 +3861,7 @@ public:
|
||||
nsIFrame* aFrame,
|
||||
uint32_t aLayer,
|
||||
const nsRect& aBackgroundRect,
|
||||
const nsStyleBackground* aBackgroundStyle);
|
||||
mozilla::ComputedStyle* aBackgroundStyle);
|
||||
|
||||
explicit nsDisplayBackgroundImage(nsDisplayListBuilder* aBuilder,
|
||||
const InitData& aInitData,
|
||||
@ -4007,7 +4007,7 @@ protected:
|
||||
|
||||
// Cache the result of nsCSSRendering::FindBackground. Always null if
|
||||
// mIsThemed is true or if FindBackground returned false.
|
||||
const nsStyleBackground* mBackgroundStyle;
|
||||
RefPtr<mozilla::ComputedStyle> mBackgroundStyle;
|
||||
nsCOMPtr<imgIContainer> mImage;
|
||||
nsIFrame* mDependentFrame;
|
||||
nsRect mBackgroundRect; // relative to the reference frame
|
||||
@ -4179,7 +4179,7 @@ class nsDisplayBackgroundColor : public nsDisplayItem
|
||||
public:
|
||||
nsDisplayBackgroundColor(nsDisplayListBuilder* aBuilder, nsIFrame* aFrame,
|
||||
const nsRect& aBackgroundRect,
|
||||
const nsStyleBackground* aBackgroundStyle,
|
||||
mozilla::ComputedStyle* aBackgroundStyle,
|
||||
nscolor aColor)
|
||||
: nsDisplayItem(aBuilder, aFrame)
|
||||
, mBackgroundRect(aBackgroundRect)
|
||||
@ -4279,7 +4279,7 @@ public:
|
||||
|
||||
protected:
|
||||
const nsRect mBackgroundRect;
|
||||
const nsStyleBackground* mBackgroundStyle;
|
||||
RefPtr<mozilla::ComputedStyle> mBackgroundStyle;
|
||||
nsIFrame* mDependentFrame;
|
||||
mozilla::gfx::Color mColor;
|
||||
|
||||
@ -4293,7 +4293,7 @@ class nsDisplayTableBackgroundColor : public nsDisplayBackgroundColor
|
||||
public:
|
||||
nsDisplayTableBackgroundColor(nsDisplayListBuilder* aBuilder, nsIFrame* aFrame,
|
||||
const nsRect& aBackgroundRect,
|
||||
const nsStyleBackground* aBackgroundStyle,
|
||||
mozilla::ComputedStyle* aBackgroundStyle,
|
||||
nscolor aColor,
|
||||
nsIFrame* aAncestorFrame)
|
||||
: nsDisplayBackgroundColor(aBuilder, aFrame, aBackgroundRect, aBackgroundStyle, aColor)
|
||||
|
Loading…
Reference in New Issue
Block a user