author | Robert O'Callahan <robert@ocallahan.org> |
Fri, 09 Nov 2012 18:14:59 -0500 | |
changeset 113432 | 699718f3235570f71d04e845df9715e30c4486c8 |
parent 113431 | deda72e9eb11ab79a444a7daa1039bb1a1e5b353 |
child 113433 | ea62a0ee450cd721989590973538dab950f98f4f |
push id | 18151 |
push user | rocallahan@mozilla.com |
push date | Fri, 16 Nov 2012 00:03:18 +0000 |
treeherder | mozilla-inbound@e8c599817e97 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | mattwoodrow |
bugs | 810470 |
milestone | 19.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/layout/base/nsDisplayList.cpp +++ b/layout/base/nsDisplayList.cpp @@ -1460,28 +1460,28 @@ RegisterThemeGeometry(nsDisplayListBuild return; } nsRect borderBox(aFrame->GetOffsetTo(displayRoot), aFrame->GetSize()); aBuilder->RegisterThemeGeometry(aFrame->GetStyleDisplay()->mAppearance, borderBox.ToNearestPixels(aFrame->PresContext()->AppUnitsPerDevPixel())); } -nsDisplayBackground::nsDisplayBackground(nsDisplayListBuilder* aBuilder, - nsIFrame* aFrame, - uint32_t aLayer, - bool aIsThemed, - const nsStyleBackground* aBackgroundStyle) +nsDisplayBackgroundImage::nsDisplayBackgroundImage(nsDisplayListBuilder* aBuilder, + nsIFrame* aFrame, + uint32_t aLayer, + bool aIsThemed, + const nsStyleBackground* aBackgroundStyle) : nsDisplayItem(aBuilder, aFrame) , mBackgroundStyle(aBackgroundStyle) , mLayer(aLayer) , mIsThemed(aIsThemed) , mIsBottommostLayer(true) { - MOZ_COUNT_CTOR(nsDisplayBackground); + MOZ_COUNT_CTOR(nsDisplayBackgroundImage); if (mIsThemed) { const nsStyleDisplay* disp = mFrame->GetStyleDisplay(); mFrame->IsThemed(disp, &mThemeTransparency); // Perform necessary RegisterThemeGeometry if (disp->mAppearance == NS_THEME_MOZ_MAC_UNIFIED_TOOLBAR || disp->mAppearance == NS_THEME_TOOLBAR) { RegisterThemeGeometry(aBuilder, aFrame); @@ -1498,28 +1498,28 @@ nsDisplayBackground::nsDisplayBackground // Check if this background layer is attachment-fixed if (!mBackgroundStyle->mLayers[mLayer].mImage.IsEmpty() && mBackgroundStyle->mLayers[mLayer].mAttachment == NS_STYLE_BG_ATTACHMENT_FIXED) { aBuilder->SetHasFixedItems(); } } } -nsDisplayBackground::~nsDisplayBackground() +nsDisplayBackgroundImage::~nsDisplayBackgroundImage() { #ifdef NS_BUILD_REFCNT_LOGGING - MOZ_COUNT_DTOR(nsDisplayBackground); + MOZ_COUNT_DTOR(nsDisplayBackgroundImage); #endif } /*static*/ nsresult -nsDisplayBackground::AppendBackgroundItemsToTop(nsDisplayListBuilder* aBuilder, - nsIFrame* aFrame, - nsDisplayList* aList, - nsDisplayBackground** aBackground) +nsDisplayBackgroundImage::AppendBackgroundItemsToTop(nsDisplayListBuilder* aBuilder, + nsIFrame* aFrame, + nsDisplayList* aList, + nsDisplayBackgroundImage** aBackground) { nsStyleContext* bgSC = nullptr; const nsStyleBackground* bg = nullptr; nsPresContext* presContext = aFrame->PresContext(); bool isThemed = aFrame->IsThemed(); if (!isThemed && nsCSSRendering::FindBackground(presContext, aFrame, &bgSC)) { bg = bgSC->GetStyleBackground(); @@ -1539,18 +1539,18 @@ nsDisplayBackground::AppendBackgroundIte aList->AppendNewToTop( new (aBuilder) nsDisplayBackgroundColor(aBuilder, aFrame, bg, drawBackgroundColor ? color : NS_RGBA(0, 0, 0, 0))); // Passing bg == nullptr in this macro will result in one iteration with // i = 0. bool backgroundSet = !aBackground; NS_FOR_VISIBLE_BACKGROUND_LAYERS_BACK_TO_FRONT(i, bg) { - nsDisplayBackground* bgItem = - new (aBuilder) nsDisplayBackground(aBuilder, aFrame, i, isThemed, bg); + nsDisplayBackgroundImage* bgItem = + new (aBuilder) nsDisplayBackgroundImage(aBuilder, aFrame, i, isThemed, bg); nsresult rv = aList->AppendNewToTop(bgItem); if (rv != NS_OK) { return rv; } if (!backgroundSet) { *aBackground = bgItem; backgroundSet = true; } @@ -1649,17 +1649,18 @@ RoundedBorderIntersectsRect(nsIFrame* aF static bool RoundedRectContainsRect(const nsRect& aRoundedRect, const nscoord aRadii[8], const nsRect& aContainedRect) { nsRegion rgn = nsLayoutUtils::RoundedRectIntersectRect(aRoundedRect, aRadii, aContainedRect); return rgn.Contains(aContainedRect); } bool -nsDisplayBackground::IsSingleFixedPositionImage(nsDisplayListBuilder* aBuilder, const nsRect& aClipRect) +nsDisplayBackgroundImage::IsSingleFixedPositionImage(nsDisplayListBuilder* aBuilder, + const nsRect& aClipRect) { if (mIsThemed || !mBackgroundStyle) return false; nsPresContext* presContext = mFrame->PresContext(); nsStyleContext* bgSC; nsCSSRendering::FindBackground(presContext, mFrame, &bgSC); @@ -1707,17 +1708,17 @@ nsDisplayBackground::IsSingleFixedPositi int32_t appUnitsPerDevPixel = presContext->AppUnitsPerDevPixel(); mDestRect = nsLayoutUtils::RectToGfxRect(state.mFillArea, appUnitsPerDevPixel); return true; } bool -nsDisplayBackground::TryOptimizeToImageLayer(nsDisplayListBuilder* aBuilder) +nsDisplayBackgroundImage::TryOptimizeToImageLayer(nsDisplayListBuilder* aBuilder) { if (mIsThemed || !mBackgroundStyle) return false; nsPresContext* presContext = mFrame->PresContext(); nsStyleContext* bgSC; nsCSSRendering::FindBackground(presContext, mFrame, &bgSC); @@ -1774,19 +1775,19 @@ nsDisplayBackground::TryOptimizeToImageL mDestRect = nsLayoutUtils::RectToGfxRect(state.mDestArea, appUnitsPerDevPixel); mImageContainer = imageContainer; // Ok, we can turn this into a layer if needed. return true; } LayerState -nsDisplayBackground::GetLayerState(nsDisplayListBuilder* aBuilder, - LayerManager* aManager, - const FrameLayerBuilder::ContainerParameters& aParameters) +nsDisplayBackgroundImage::GetLayerState(nsDisplayListBuilder* aBuilder, + LayerManager* aManager, + const FrameLayerBuilder::ContainerParameters& aParameters) { if (!aManager->IsCompositingCheap() || !nsLayoutUtils::GPUImageScalingEnabled() || !TryOptimizeToImageLayer(aBuilder)) { return LAYER_NONE; } gfxSize imageSize = mImageContainer->GetCurrentSize(); @@ -1809,83 +1810,83 @@ nsDisplayBackground::GetLayerState(nsDis if (destRect.width * destRect.height < 64 * 64) { return LAYER_INACTIVE; } return LAYER_ACTIVE; } already_AddRefed<Layer> -nsDisplayBackground::BuildLayer(nsDisplayListBuilder* aBuilder, - LayerManager* aManager, - const ContainerParameters& aParameters) +nsDisplayBackgroundImage::BuildLayer(nsDisplayListBuilder* aBuilder, + LayerManager* aManager, + const ContainerParameters& aParameters) { nsRefPtr<ImageLayer> layer = aManager->CreateImageLayer(); layer->SetContainer(mImageContainer); ConfigureLayer(layer); return layer.forget(); } void -nsDisplayBackground::ConfigureLayer(ImageLayer* aLayer) +nsDisplayBackgroundImage::ConfigureLayer(ImageLayer* aLayer) { aLayer->SetFilter(nsLayoutUtils::GetGraphicsFilterForFrame(mFrame)); gfxIntSize imageSize = mImageContainer->GetCurrentSize(); NS_ASSERTION(imageSize.width != 0 && imageSize.height != 0, "Invalid image size!"); gfxMatrix transform; transform.Translate(mDestRect.TopLeft()); transform.Scale(mDestRect.width/imageSize.width, mDestRect.height/imageSize.height); aLayer->SetBaseTransform(gfx3DMatrix::From2D(transform)); aLayer->SetVisibleRegion(nsIntRect(0, 0, imageSize.width, imageSize.height)); } void -nsDisplayBackground::HitTest(nsDisplayListBuilder* aBuilder, - const nsRect& aRect, - HitTestState* aState, - nsTArray<nsIFrame*> *aOutFrames) +nsDisplayBackgroundImage::HitTest(nsDisplayListBuilder* aBuilder, + const nsRect& aRect, + HitTestState* aState, + nsTArray<nsIFrame*> *aOutFrames) { if (mIsThemed) { // For theme backgrounds, assume that any point in our border rect is a hit. if (!nsRect(ToReferenceFrame(), mFrame->GetSize()).Intersects(aRect)) return; } else { if (!RoundedBorderIntersectsRect(mFrame, ToReferenceFrame(), aRect)) { // aRect doesn't intersect our border-radius curve. return; } } aOutFrames->AppendElement(mFrame); } bool -nsDisplayBackground::ComputeVisibility(nsDisplayListBuilder* aBuilder, - nsRegion* aVisibleRegion, - const nsRect& aAllowVisibleRegionExpansion) +nsDisplayBackgroundImage::ComputeVisibility(nsDisplayListBuilder* aBuilder, + nsRegion* aVisibleRegion, + const nsRect& aAllowVisibleRegionExpansion) { if (!nsDisplayItem::ComputeVisibility(aBuilder, aVisibleRegion, aAllowVisibleRegionExpansion)) { return false; } // Return false if the background was propagated away from this // frame. We don't want this display item to show up and confuse // anything. return mIsThemed || mBackgroundStyle; } /* static */ nsRegion -nsDisplayBackground::GetInsideClipRegion(nsDisplayItem* aItem, - nsPresContext* aPresContext, - uint8_t aClip, const nsRect& aRect, - bool* aSnap) +nsDisplayBackgroundImage::GetInsideClipRegion(nsDisplayItem* aItem, + nsPresContext* aPresContext, + uint8_t aClip, const nsRect& aRect, + bool* aSnap) { nsRegion result; if (aRect.IsEmpty()) return result; nsIFrame *frame = aItem->GetUnderlyingFrame(); nscoord radii[8]; @@ -1914,18 +1915,18 @@ nsDisplayBackground::GetInsideClipRegion result = nsLayoutUtils::RoundedRectIntersectRect(clipRect, radii, aRect); } else { result = clipRect.Intersect(aRect); } return result; } nsRegion -nsDisplayBackground::GetOpaqueRegion(nsDisplayListBuilder* aBuilder, - bool* aSnap) { +nsDisplayBackgroundImage::GetOpaqueRegion(nsDisplayListBuilder* aBuilder, + bool* aSnap) { nsRegion result; *aSnap = false; // theme background overrides any other background if (mIsThemed) { if (mThemeTransparency == nsITheme::eOpaque) { result = nsRect(ToReferenceFrame(), mFrame->GetSize()); } return result; @@ -1953,17 +1954,17 @@ nsDisplayBackground::GetOpaqueRegion(nsD result = GetInsideClipRegion(this, presContext, layer.mClip, r, aSnap); } } return result; } bool -nsDisplayBackground::IsUniform(nsDisplayListBuilder* aBuilder, nscolor* aColor) { +nsDisplayBackgroundImage::IsUniform(nsDisplayListBuilder* aBuilder, nscolor* aColor) { // theme background overrides any other background if (mIsThemed) { const nsStyleDisplay* disp = mFrame->GetStyleDisplay(); if (disp->mAppearance == NS_THEME_WIN_BORDERLESS_GLASS || disp->mAppearance == NS_THEME_WIN_GLASS) { *aColor = NS_RGBA(0,0,0,0); return true; } @@ -1977,18 +1978,18 @@ nsDisplayBackground::IsUniform(nsDisplay if (mBackgroundStyle->mLayers[mLayer].mImage.IsEmpty()) { *aColor = NS_RGBA(0,0,0,0); return true; } return false; } bool -nsDisplayBackground::IsVaryingRelativeToMovingFrame(nsDisplayListBuilder* aBuilder, - nsIFrame* aFrame) +nsDisplayBackgroundImage::IsVaryingRelativeToMovingFrame(nsDisplayListBuilder* aBuilder, + nsIFrame* aFrame) { // theme background overrides any other background and is never fixed if (mIsThemed) return false; if (!mBackgroundStyle) return false; if (!mBackgroundStyle->HasFixedBackground()) @@ -1998,31 +1999,31 @@ nsDisplayBackground::IsVaryingRelativeTo // not the viewport frame, then moving aFrame will move mFrame // relative to the viewport, so our fixed-pos background will change. return aFrame->GetParent() && (aFrame == mFrame || nsLayoutUtils::IsProperAncestorFrame(aFrame, mFrame)); } nsRect -nsDisplayBackground::GetPositioningArea() +nsDisplayBackgroundImage::GetPositioningArea() { if (!mBackgroundStyle) { return nsRect(); } nsIFrame* attachedToFrame; return nsCSSRendering::ComputeBackgroundPositioningArea( mFrame->PresContext(), mFrame, nsRect(ToReferenceFrame(), mFrame->GetSize()), *mBackgroundStyle, mBackgroundStyle->mLayers[mLayer], &attachedToFrame) + ToReferenceFrame(); } bool -nsDisplayBackground::RenderingMightDependOnPositioningAreaSizeChange() +nsDisplayBackgroundImage::RenderingMightDependOnPositioningAreaSizeChange() { // theme background overrides any other background and we don't know what to do here if (mIsThemed) return true; if (!mBackgroundStyle) return false; @@ -2049,31 +2050,31 @@ static void CheckForBorderItem(nsDisplay if (nextItem && nextItem->GetUnderlyingFrame() == aItem->GetUnderlyingFrame() && nextItem->GetType() == nsDisplayItem::TYPE_BORDER) { aFlags |= nsCSSRendering::PAINTBG_WILL_PAINT_BORDER; } } void -nsDisplayBackground::Paint(nsDisplayListBuilder* aBuilder, - nsRenderingContext* aCtx) { +nsDisplayBackgroundImage::Paint(nsDisplayListBuilder* aBuilder, + nsRenderingContext* aCtx) { nsPoint offset = ToReferenceFrame(); uint32_t flags = aBuilder->GetBackgroundPaintFlags(); CheckForBorderItem(this, flags); nsCSSRendering::PaintBackground(mFrame->PresContext(), *aCtx, mFrame, mVisibleRect, nsRect(offset, mFrame->GetSize()), flags, nullptr, mLayer); } -void nsDisplayBackground::ComputeInvalidationRegion(nsDisplayListBuilder* aBuilder, - const nsDisplayItemGeometry* aGeometry, - nsRegion* aInvalidRegion) +void nsDisplayBackgroundImage::ComputeInvalidationRegion(nsDisplayListBuilder* aBuilder, + const nsDisplayItemGeometry* aGeometry, + nsRegion* aInvalidRegion) { if (!mBackgroundStyle) { return; } const nsDisplayBackgroundGeometry* geometry = static_cast<const nsDisplayBackgroundGeometry*>(aGeometry); bool snap; @@ -2090,17 +2091,17 @@ void nsDisplayBackground::ComputeInvalid if (!bounds.IsEqualInterior(geometry->mBounds)) { // Positioning area is unchanged, so invalidate just the change in the // painting area. aInvalidRegion->Xor(bounds, geometry->mBounds); } } nsRect -nsDisplayBackground::GetBounds(nsDisplayListBuilder* aBuilder, bool* aSnap) { +nsDisplayBackgroundImage::GetBounds(nsDisplayListBuilder* aBuilder, bool* aSnap) { *aSnap = true; nsPresContext* presContext = mFrame->PresContext(); if (mIsThemed) { nsRect r(nsPoint(0,0), mFrame->GetSize()); presContext->GetTheme()-> GetWidgetOverflow(presContext->DeviceContext(), mFrame, mFrame->GetStyleDisplay()->mAppearance, &r); @@ -2118,17 +2119,17 @@ nsDisplayBackground::GetBounds(nsDisplay nsRect borderBox = nsRect(ToReferenceFrame(), mFrame->GetSize()); const nsStyleBackground::Layer& layer = mBackgroundStyle->mLayers[mLayer]; return nsCSSRendering::GetBackgroundLayerRect(presContext, mFrame, borderBox, *mBackgroundStyle, layer); } uint32_t -nsDisplayBackground::GetPerFrameKey() +nsDisplayBackgroundImage::GetPerFrameKey() { return (mLayer << nsDisplayItem::TYPE_BITS) | nsDisplayItem::GetPerFrameKey(); } void nsDisplayBackgroundColor::Paint(nsDisplayListBuilder* aBuilder, nsRenderingContext* aCtx) @@ -2157,17 +2158,17 @@ nsDisplayBackgroundColor::GetOpaqueRegio if (!mBackgroundStyle) return nsRegion(); *aSnap = true; const nsStyleBackground::Layer& bottomLayer = mBackgroundStyle->BottomLayer(); nsRect borderBox = nsRect(ToReferenceFrame(), mFrame->GetSize()); nsPresContext* presContext = mFrame->PresContext(); - return nsDisplayBackground::GetInsideClipRegion(this, presContext, bottomLayer.mClip, borderBox, aSnap); + return nsDisplayBackgroundImage::GetInsideClipRegion(this, presContext, bottomLayer.mClip, borderBox, aSnap); } bool nsDisplayBackgroundColor::IsUniform(nsDisplayListBuilder* aBuilder, nscolor* aColor) { *aColor = mColor; if (!mBackgroundStyle)
--- a/layout/base/nsDisplayList.h +++ b/layout/base/nsDisplayList.h @@ -1777,38 +1777,39 @@ public: NS_DISPLAY_DECL_NAME("SolidColor", TYPE_SOLID_COLOR) private: nsRect mBounds; nscolor mColor; }; /** - * The standard display item to paint the CSS background of a frame. + * A display item to paint one background-image for a frame. Each background + * image layer gets its own nsDisplayBackgroundImage. */ -class nsDisplayBackground : public nsDisplayItem { +class nsDisplayBackgroundImage : public nsDisplayItem { public: /** * aLayer signifies which background layer this item represents. * aIsThemed should be the value of aFrame->IsThemed. * aBackgroundStyle should be the result of * nsCSSRendering::FindBackground, or null if FindBackground returned false. */ - nsDisplayBackground(nsDisplayListBuilder* aBuilder, nsIFrame* aFrame, - uint32_t aLayer, bool aIsThemed, - const nsStyleBackground* aBackgroundStyle); - virtual ~nsDisplayBackground(); + nsDisplayBackgroundImage(nsDisplayListBuilder* aBuilder, nsIFrame* aFrame, + uint32_t aLayer, bool aIsThemed, + const nsStyleBackground* aBackgroundStyle); + virtual ~nsDisplayBackgroundImage(); // This will create and append new items for all the layers of the // background. If given, aBackground will be set with the address of the // bottom-most background item. static nsresult AppendBackgroundItemsToTop(nsDisplayListBuilder* aBuilder, nsIFrame* aFrame, nsDisplayList* aList, - nsDisplayBackground** aBackground = nullptr); + nsDisplayBackgroundImage** aBackground = nullptr); virtual LayerState GetLayerState(nsDisplayListBuilder* aBuilder, LayerManager* aManager, const ContainerParameters& aParameters) MOZ_OVERRIDE; virtual already_AddRefed<Layer> BuildLayer(nsDisplayListBuilder* aBuilder, LayerManager* aManager, const ContainerParameters& aContainerParameters) MOZ_OVERRIDE;
--- a/layout/base/nsDisplayListInvalidation.cpp +++ b/layout/base/nsDisplayListInvalidation.cpp @@ -37,17 +37,17 @@ nsDisplayBorderGeometry::nsDisplayBorder void nsDisplayBorderGeometry::MoveBy(const nsPoint& aOffset) { mBounds.MoveBy(aOffset); mContentRect.MoveBy(aOffset); } -nsDisplayBackgroundGeometry::nsDisplayBackgroundGeometry(nsDisplayBackground* aItem, +nsDisplayBackgroundGeometry::nsDisplayBackgroundGeometry(nsDisplayBackgroundImage* aItem, nsDisplayListBuilder* aBuilder) : nsDisplayItemGeometry(aItem, aBuilder) , mPositioningArea(aItem->GetPositioningArea()) {} void nsDisplayBackgroundGeometry::MoveBy(const nsPoint& aOffset) {
--- a/layout/base/nsDisplayListInvalidation.h +++ b/layout/base/nsDisplayListInvalidation.h @@ -5,17 +5,17 @@ #ifndef NSDISPLAYLISTINVALIDATION_H_ #define NSDISPLAYLISTINVALIDATION_H_ #include "nsRect.h" class nsDisplayItem; class nsDisplayListBuilder; -class nsDisplayBackground; +class nsDisplayBackgroundImage; /** * This stores the geometry of an nsDisplayItem, and the area * that will be affected when painting the item. * * It is used to retain information about display items so they * can be compared against new display items in the next paint. */ @@ -71,17 +71,17 @@ public: virtual void MoveBy(const nsPoint& aOffset); nsRect mContentRect; }; class nsDisplayBackgroundGeometry : public nsDisplayItemGeometry { public: - nsDisplayBackgroundGeometry(nsDisplayBackground* aItem, nsDisplayListBuilder* aBuilder); + nsDisplayBackgroundGeometry(nsDisplayBackgroundImage* aItem, nsDisplayListBuilder* aBuilder); virtual void MoveBy(const nsPoint& aOffset); nsRect mPositioningArea; }; class nsDisplayBoxShadowInnerGeometry : public nsDisplayItemGeometry {
--- a/layout/generic/nsCanvasFrame.h +++ b/layout/generic/nsCanvasFrame.h @@ -117,46 +117,46 @@ protected: }; /** * Override nsDisplayBackground methods so that we pass aBGClipRect to * PaintBackground, covering the whole overflow area. * We can also paint an "extra background color" behind the normal * background. */ -class nsDisplayCanvasBackground : public nsDisplayBackground { +class nsDisplayCanvasBackground : public nsDisplayBackgroundImage { public: nsDisplayCanvasBackground(nsDisplayListBuilder* aBuilder, nsIFrame *aFrame, uint32_t aLayer, bool aIsThemed, const nsStyleBackground* aBackgroundStyle) - : nsDisplayBackground(aBuilder, aFrame, aLayer, aIsThemed, aBackgroundStyle), + : nsDisplayBackgroundImage(aBuilder, aFrame, aLayer, aIsThemed, aBackgroundStyle), mExtraBackgroundColor(NS_RGBA(0,0,0,0)) { } virtual bool ComputeVisibility(nsDisplayListBuilder* aBuilder, nsRegion* aVisibleRegion, const nsRect& aAllowVisibleRegionExpansion) MOZ_OVERRIDE { return NS_GET_A(mExtraBackgroundColor) > 0 || - nsDisplayBackground::ComputeVisibility(aBuilder, aVisibleRegion, + nsDisplayBackgroundImage::ComputeVisibility(aBuilder, aVisibleRegion, aAllowVisibleRegionExpansion); } virtual nsRegion GetOpaqueRegion(nsDisplayListBuilder* aBuilder, bool* aSnap) MOZ_OVERRIDE { if (NS_GET_A(mExtraBackgroundColor) == 255) { return nsRegion(GetBounds(aBuilder, aSnap)); } - return nsDisplayBackground::GetOpaqueRegion(aBuilder, aSnap); + return nsDisplayBackgroundImage::GetOpaqueRegion(aBuilder, aSnap); } virtual bool IsUniform(nsDisplayListBuilder* aBuilder, nscolor* aColor) MOZ_OVERRIDE { nscolor background; - if (!nsDisplayBackground::IsUniform(aBuilder, &background)) + if (!nsDisplayBackgroundImage::IsUniform(aBuilder, &background)) return false; NS_ASSERTION(background == NS_RGBA(0,0,0,0), "The nsDisplayBackground for a canvas frame doesn't paint " "its background color normally"); *aColor = mExtraBackgroundColor; return true; } virtual nsRect GetBounds(nsDisplayListBuilder* aBuilder, bool* aSnap) MOZ_OVERRIDE
--- a/layout/generic/nsFrame.cpp +++ b/layout/generic/nsFrame.cpp @@ -1490,26 +1490,26 @@ nsIFrame::GetCaretColorAt(int32_t aOffse // Use text color. return GetStyleColor()->mColor; } nsresult nsFrame::DisplayBackgroundUnconditional(nsDisplayListBuilder* aBuilder, const nsDisplayListSet& aLists, bool aForceBackground, - nsDisplayBackground** aBackground) + nsDisplayBackgroundImage** aBackground) { *aBackground = nullptr; // Here we don't try to detect background propagation. Frames that might // receive a propagated background should just set aForceBackground to // true. if (aBuilder->IsForEventDelivery() || aForceBackground || !GetStyleBackground()->IsTransparent() || GetStyleDisplay()->mAppearance) { - return nsDisplayBackground::AppendBackgroundItemsToTop(aBuilder, this, + return nsDisplayBackgroundImage::AppendBackgroundItemsToTop(aBuilder, this, aLists.BorderBackground(), aBackground); } return NS_OK; } nsresult @@ -1525,17 +1525,17 @@ nsFrame::DisplayBorderBackgroundOutline( nsCSSShadowArray* shadows = GetStyleBorder()->mBoxShadow; if (shadows && shadows->HasShadowWithInset(false)) { nsresult rv = aLists.BorderBackground()->AppendNewToTop(new (aBuilder) nsDisplayBoxShadowOuter(aBuilder, this)); NS_ENSURE_SUCCESS(rv, rv); } - nsDisplayBackground* bg; + nsDisplayBackgroundImage* bg; nsresult rv = DisplayBackgroundUnconditional(aBuilder, aLists, aForceBackground, &bg); NS_ENSURE_SUCCESS(rv, rv); if (shadows && shadows->HasShadowWithInset(true)) { rv = aLists.BorderBackground()->AppendNewToTop(new (aBuilder) nsDisplayBoxShadowInner(aBuilder, this)); NS_ENSURE_SUCCESS(rv, rv);
--- a/layout/generic/nsFrame.h +++ b/layout/generic/nsFrame.h @@ -94,17 +94,17 @@ void* class::operator new(size_t sz, nsIPresShell* aShell) \ { return aShell->AllocateFrame(nsQueryFrame::class##_id, sz); } \ nsQueryFrame::FrameIID class::GetFrameId() \ { return nsQueryFrame::class##_id; } //---------------------------------------------------------------------- struct nsBoxLayoutMetrics; -class nsDisplayBackground; +class nsDisplayBackgroundImage; /** * Implementation of a simple frame that's not splittable and has no * child frames. * * Sets the NS_FRAME_SYNCHRONIZE_FRAME_AND_VIEW bit, so the default * behavior is to keep the frame and view position and size in sync. */ @@ -505,17 +505,17 @@ public: * for frames that might receive a propagated background via * nsCSSRendering::FindBackground * @param aBackground *aBackground is set to the bottom-most * nsDisplayBackground item, if any are created, otherwise null. */ nsresult DisplayBackgroundUnconditional(nsDisplayListBuilder* aBuilder, const nsDisplayListSet& aLists, bool aForceBackground, - nsDisplayBackground** aBackground); + nsDisplayBackgroundImage** aBackground); /** * Adds display items for standard CSS borders, background and outline for * for this frame, as necessary. Checks IsVisibleForPainting and won't * display anything if the frame is not visible. * @param aForceBackground draw the background even if the frame * background style appears to have no background --- this is useful * for frames that might receive a propagated background via * nsCSSRendering::FindBackground
--- a/layout/tables/nsTableFrame.cpp +++ b/layout/tables/nsTableFrame.cpp @@ -1160,17 +1160,17 @@ nsTableFrame::DisplayGenericTablePart(ns new (aBuilder) nsDisplayBoxShadowOuter(aBuilder, aFrame)); NS_ENSURE_SUCCESS(rv, rv); } // Create dedicated background display items per-frame when we're // handling events. // XXX how to handle collapsed borders? if (aBuilder->IsForEventDelivery()) { - nsresult rv = nsDisplayBackground::AppendBackgroundItemsToTop(aBuilder, aFrame, + nsresult rv = nsDisplayBackgroundImage::AppendBackgroundItemsToTop(aBuilder, aFrame, lists->BorderBackground()); NS_ENSURE_SUCCESS(rv, rv); } // Paint the inset box-shadows for the table frames if (hasBoxShadow) { nsresult rv = lists->BorderBackground()->AppendNewToTop( new (aBuilder) nsDisplayBoxShadowInner(aBuilder, aFrame)); @@ -1238,17 +1238,17 @@ nsTableFrame::BuildDisplayList(nsDisplay nsDisplayTableItem* item = nullptr; if (IsVisibleInSelection(aBuilder)) { if (GetStyleVisibility()->IsVisible()) { nsMargin deflate = GetDeflationForBackground(PresContext()); // If 'deflate' is (0,0,0,0) then we can paint the table background // in its own display item, so do that to take advantage of // opacity and visibility optimizations if (deflate == nsMargin(0, 0, 0, 0)) { - nsDisplayBackground* bg; + nsDisplayBackgroundImage* bg; nsresult rv = DisplayBackgroundUnconditional(aBuilder, aLists, false, &bg); NS_ENSURE_SUCCESS(rv, rv); } } // This background is created if any of the table parts are visible, // or if we're doing event handling (since DisplayGenericTablePart // needs the item for the |sortEventBackgrounds|-dependent code).