diff --git a/content/canvas/src/nsCanvasRenderingContext2D.cpp b/content/canvas/src/nsCanvasRenderingContext2D.cpp index 1f5880f6eed6..94de64c19a33 100644 --- a/content/canvas/src/nsCanvasRenderingContext2D.cpp +++ b/content/canvas/src/nsCanvasRenderingContext2D.cpp @@ -1452,7 +1452,7 @@ nsCanvasRenderingContext2D::ShadowInitialize(const gfxRect& extents, gfxAlphaBox blurRadius.height, blurRadius.width); drawExtents = drawExtents.Intersect(clipExtents - CurrentState().shadowOffset); - gfxContext* ctx = blur.Init(drawExtents, blurRadius, nsnull, nsnull); + gfxContext* ctx = blur.Init(drawExtents, blurRadius, nsnull); if (!ctx) return nsnull; diff --git a/gfx/public/nsRect.h b/gfx/public/nsRect.h index c31e93c22995..f6c7bb058972 100644 --- a/gfx/public/nsRect.h +++ b/gfx/public/nsRect.h @@ -235,20 +235,6 @@ struct NS_GFX nsIntRect { height += aMargin.top + aMargin.bottom; } - // Deflate the rect by the specified width/height or margin - void Deflate(PRInt32 aDx, PRInt32 aDy) { - x += aDx; - y += aDy; - width -= aDx*2; - height -= aDy*2; - } - void Deflate(const nsIntMargin &aMargin) { - x += aMargin.left; - y += aMargin.top; - width -= (aMargin.left + aMargin.right); - height -= (aMargin.top + aMargin.bottom); - } - // Overloaded operators. Note that '=' isn't defined so we'll get the // compiler generated default assignment operator. PRBool operator==(const nsIntRect& aRect) const { diff --git a/gfx/thebes/public/gfxBlur.h b/gfx/thebes/public/gfxBlur.h index 9b7df1cf2988..373d8ebafb04 100644 --- a/gfx/thebes/public/gfxBlur.h +++ b/gfx/thebes/public/gfxBlur.h @@ -42,7 +42,6 @@ #include "gfxImageSurface.h" #include "gfxRect.h" #include "gfxTypes.h" -#include "nsRect.h" /** * Implementation of a box blur approximation of a Gaussian blur. @@ -70,15 +69,10 @@ public: * * @param aDirtyRect A pointer to a dirty rect, measured in device units, if available. * This will be used for optimizing the blur operation. It is safe to pass NULL here. - * - * @param aSkipRect A pointer to a rect, measured in device units, that represents an area - * where blurring is unnecessary and shouldn't be done for speed reasons. It is safe to - * pass NULL here. */ gfxContext* Init(const gfxRect& aRect, const gfxIntSize& aBlurRadius, - const gfxRect* aDirtyRect, - gfxRect* aSkipRect); + const gfxRect* aDirtyRect); /** * Returns the context that should be drawn to supply the alpha mask to be @@ -132,15 +126,7 @@ protected: * mHasDirtyRect is TRUE. */ gfxRect mDirtyRect; - /** - * A rect indicating the area where blurring is unnecessary, and the blur - * algorithm should skip over it. This will only be valid if mHasSkipRect - * is TRUE. - */ - nsIntRect mSkipRect; - - PRPackedBool mHasDirtyRect; - PRPackedBool mHasSkipRect; + PRBool mHasDirtyRect; }; #endif /* GFX_BLUR_H */ diff --git a/gfx/thebes/public/gfxRect.h b/gfx/thebes/public/gfxRect.h index 4d09dc6f56c2..c024211aa5bd 100644 --- a/gfx/thebes/public/gfxRect.h +++ b/gfx/thebes/public/gfxRect.h @@ -149,10 +149,6 @@ struct THEBES_API gfxRect { // new |RoundAwayFromZero()| method. void Round(); - // Snap the rectangle edges to integer coordinates, such that the - // original rectangle contains the resulting rectangle. - void RoundIn(); - // Snap the rectangle edges to integer coordinates, such that the // resulting rectangle contains the original rectangle. void RoundOut(); diff --git a/gfx/thebes/src/gfxBlur.cpp b/gfx/thebes/src/gfxBlur.cpp index 07b431d83708..1c5b563b7a3a 100644 --- a/gfx/thebes/src/gfxBlur.cpp +++ b/gfx/thebes/src/gfxBlur.cpp @@ -52,23 +52,10 @@ gfxAlphaBoxBlur::~gfxAlphaBoxBlur() { } -// Copied from nsSVGUtils -// Converts a gfxRect to an nsIntRect for speed -static nsIntRect -GfxRectToIntRect(const gfxRect& aIn) -{ - nsIntRect result(PRInt32(aIn.X()), PRInt32(aIn.Y()), - PRInt32(aIn.Width()), PRInt32(aIn.Height())); - NS_ASSERTION(gfxRect(result.x, result.y, result.width, result.height) == aIn, - "The given gfxRect isn't rounded properly!"); - return result; -} - gfxContext* gfxAlphaBoxBlur::Init(const gfxRect& aRect, const gfxIntSize& aBlurRadius, - const gfxRect* aDirtyRect, - gfxRect* aSkipRect) + const gfxRect* aDirtyRect) { mBlurRadius = aBlurRadius; @@ -93,25 +80,6 @@ gfxAlphaBoxBlur::Init(const gfxRect& aRect, mHasDirtyRect = PR_FALSE; } - if (aSkipRect) { - // If we get passed a skip rect, we can lower the amount of - // blurring we need to do. We convert it to nsIntRect to avoid - // expensive int<->float conversions if we were to use gfxRect instead. - aSkipRect->RoundIn(); - mSkipRect = GfxRectToIntRect(*aSkipRect); - nsIntRect shadowIntRect = GfxRectToIntRect(rect); - - mSkipRect.Deflate(aBlurRadius.width, aBlurRadius.height); - mSkipRect.IntersectRect(mSkipRect, shadowIntRect); - if (mSkipRect == shadowIntRect) - return nsnull; - - mSkipRect -= shadowIntRect.TopLeft(); - mHasSkipRect = !mSkipRect.IsEmpty(); - } else { - mHasSkipRect = PR_FALSE; - } - // Make an alpha-only surface to draw on. We will play with the data after // everything is drawn to create a blur effect. mImageSurface = new gfxImageSurface(gfxIntSize(static_cast(rect.Width()), static_cast(rect.Height())), @@ -151,7 +119,6 @@ gfxAlphaBoxBlur::PremultiplyAlpha(gfxFloat alpha) * @param aRightLobe The number of pixels to blend on the right. * @param aStride The stride of the buffers. * @param aRows The number of rows in the buffers. - * @param aSkipRect An area to skip blurring in. */ static void BoxBlurHorizontal(unsigned char* aInput, @@ -159,24 +126,11 @@ BoxBlurHorizontal(unsigned char* aInput, PRInt32 aLeftLobe, PRInt32 aRightLobe, PRInt32 aStride, - PRInt32 aRows, - const nsIntRect* aSkipRect) + PRInt32 aRows) { PRInt32 boxSize = aLeftLobe + aRightLobe + 1; - PRBool skipRectSpans = aSkipRect && aSkipRect->x <= 0 && - aSkipRect->XMost() >= aStride - 1; for (PRInt32 y = 0; y < aRows; y++) { - // Check whether the skip rect intersects this row. If the skip - // rect covers the whole surface in this row, we can avoid - // this row entirely (and any others along the skip rect). - PRBool inSkipRectY = aSkipRect && y >= aSkipRect->y && - y < aSkipRect->YMost(); - if (inSkipRectY && skipRectSpans) { - y = aSkipRect->YMost() - 1; - continue; - } - PRInt32 alphaSum = 0; for (PRInt32 i = 0; i < boxSize; i++) { PRInt32 pos = i - aLeftLobe; @@ -185,24 +139,6 @@ BoxBlurHorizontal(unsigned char* aInput, alphaSum += aInput[aStride * y + pos]; } for (PRInt32 x = 0; x < aStride; x++) { - // Check whether we are within the skip rect. If so, go - // to the next point outside the skip rect. - if (inSkipRectY && x >= aSkipRect->x && - x < aSkipRect->XMost()) { - x = aSkipRect->XMost(); - if (x >= aStride) - break; - - // Recalculate the neighbouring alpha values for - // our new point on the surface. - alphaSum = 0; - for (PRInt32 i = 0; i < boxSize; i++) { - PRInt32 pos = x + i - aLeftLobe; - pos = PR_MAX(pos, 0); - pos = PR_MIN(pos, aStride - 1); - alphaSum += aInput[aStride * y + pos]; - } - } PRInt32 tmp = x - aLeftLobe; PRInt32 last = PR_MAX(tmp, 0); PRInt32 next = PR_MIN(tmp + boxSize, aStride - 1); @@ -225,21 +161,11 @@ BoxBlurVertical(unsigned char* aInput, PRInt32 aTopLobe, PRInt32 aBottomLobe, PRInt32 aStride, - PRInt32 aRows, - const nsIntRect* aSkipRect) + PRInt32 aRows) { PRInt32 boxSize = aTopLobe + aBottomLobe + 1; - PRBool skipRectSpans = aSkipRect && aSkipRect->y <= 0 && - aSkipRect->YMost() >= aRows - 1; for (PRInt32 x = 0; x < aStride; x++) { - PRBool inSkipRectX = aSkipRect && x >= aSkipRect->x && - x < aSkipRect->XMost(); - if (inSkipRectX && skipRectSpans) { - x = aSkipRect->XMost() - 1; - continue; - } - PRInt32 alphaSum = 0; for (PRInt32 i = 0; i < boxSize; i++) { PRInt32 pos = i - aTopLobe; @@ -248,20 +174,6 @@ BoxBlurVertical(unsigned char* aInput, alphaSum += aInput[aStride * pos + x]; } for (PRInt32 y = 0; y < aRows; y++) { - if (inSkipRectX && y >= aSkipRect->y && - y < aSkipRect->YMost()) { - y = aSkipRect->YMost(); - if (y >= aRows) - break; - - alphaSum = 0; - for (PRInt32 i = 0; i < boxSize; i++) { - PRInt32 pos = y + i - aTopLobe; - pos = PR_MAX(pos, 0); - pos = PR_MIN(pos, aRows - 1); - alphaSum += aInput[aStride * pos + x]; - } - } PRInt32 tmp = y - aTopLobe; PRInt32 last = PR_MAX(tmp, 0); PRInt32 next = PR_MIN(tmp + boxSize, aRows - 1); @@ -333,22 +245,21 @@ gfxAlphaBoxBlur::Paint(gfxContext* aDestinationCtx, const gfxPoint& offset) unsigned char* tmpData = tempAlphaDataBuf.Elements(); PRInt32 stride = mImageSurface->Stride(); PRInt32 rows = mImageSurface->Height(); - const nsIntRect* skipRect = (mHasSkipRect ? &mSkipRect : nsnull); if (mBlurRadius.width > 0) { PRInt32 lobes[3][2]; ComputeLobes(mBlurRadius.width, lobes); - BoxBlurHorizontal(boxData, tmpData, lobes[0][0], lobes[0][1], stride, rows, skipRect); - BoxBlurHorizontal(tmpData, boxData, lobes[1][0], lobes[1][1], stride, rows, skipRect); - BoxBlurHorizontal(boxData, tmpData, lobes[2][0], lobes[2][1], stride, rows, skipRect); + BoxBlurHorizontal(boxData, tmpData, lobes[0][0], lobes[0][1], stride, rows); + BoxBlurHorizontal(tmpData, boxData, lobes[1][0], lobes[1][1], stride, rows); + BoxBlurHorizontal(boxData, tmpData, lobes[2][0], lobes[2][1], stride, rows); } if (mBlurRadius.height > 0) { PRInt32 lobes[3][2]; ComputeLobes(mBlurRadius.height, lobes); - BoxBlurVertical(tmpData, boxData, lobes[0][0], lobes[0][1], stride, rows, skipRect); - BoxBlurVertical(boxData, tmpData, lobes[1][0], lobes[1][1], stride, rows, skipRect); - BoxBlurVertical(tmpData, boxData, lobes[2][0], lobes[2][1], stride, rows, skipRect); + BoxBlurVertical(tmpData, boxData, lobes[0][0], lobes[0][1], stride, rows); + BoxBlurVertical(boxData, tmpData, lobes[1][0], lobes[1][1], stride, rows); + BoxBlurVertical(tmpData, boxData, lobes[2][0], lobes[2][1], stride, rows); } } diff --git a/gfx/thebes/src/gfxRect.cpp b/gfx/thebes/src/gfxRect.cpp index 1ce499640200..89b19659c8b1 100644 --- a/gfx/thebes/src/gfxRect.cpp +++ b/gfx/thebes/src/gfxRect.cpp @@ -103,21 +103,6 @@ gfxRect::Round() size.height = y1 - y0; } -void -gfxRect::RoundIn() -{ - gfxFloat x0 = NS_ceil(X()); - gfxFloat y0 = NS_ceil(Y()); - gfxFloat x1 = NS_floor(XMost()); - gfxFloat y1 = NS_floor(YMost()); - - pos.x = x0; - pos.y = y0; - - size.width = x1 - x0; - size.height = y1 - y0; -} - void gfxRect::RoundOut() { diff --git a/layout/base/nsCSSRendering.cpp b/layout/base/nsCSSRendering.cpp index 90096f68a68a..58a5824890e2 100644 --- a/layout/base/nsCSSRendering.cpp +++ b/layout/base/nsCSSRendering.cpp @@ -1154,14 +1154,6 @@ nsCSSRendering::PaintBoxShadowOuter(nsPresContext* aPresContext, gfxRect frameGfxRect = RectToGfxRect(aFrameArea, twipsPerPixel); frameGfxRect.Round(); - // We don't show anything that intersects with the frame we're blurring on. So tell the - // blurrer not to do unnecessary work there. - gfxRect skipGfxRect = frameGfxRect; - if (hasBorderRadius) { - skipGfxRect.Inset(PR_MAX(borderRadii[C_TL].height, borderRadii[C_TR].height), 0, - PR_MAX(borderRadii[C_BL].height, borderRadii[C_BR].height), 0); - } - for (PRUint32 i = shadows->Length(); i > 0; --i) { nsCSSShadowItem* shadowItem = shadows->ShadowAt(i - 1); if (shadowItem->mInset) @@ -1186,8 +1178,7 @@ nsCSSRendering::PaintBoxShadowOuter(nsPresContext* aPresContext, nsRefPtr shadowContext; nsContextBoxBlur blurringArea; - shadowContext = blurringArea.Init(shadowRect, blurRadius, twipsPerPixel, renderContext, - aDirtyRect, &skipGfxRect); + shadowContext = blurringArea.Init(shadowRect, blurRadius, twipsPerPixel, renderContext, aDirtyRect); if (!shadowContext) continue; @@ -1314,9 +1305,46 @@ nsCSSRendering::PaintBoxShadowInner(nsPresContext* aPresContext, shadowClipRect.MoveBy(shadowItem->mXOffset, shadowItem->mYOffset); shadowClipRect.Deflate(shadowItem->mSpread, shadowItem->mSpread); - gfxCornerSizes clipRectRadii; + gfxContext* renderContext = aRenderingContext.ThebesContext(); + nsRefPtr shadowContext; + nsContextBoxBlur blurringArea; + + shadowContext = blurringArea.Init(shadowPaintRect, blurRadius, twipsPerPixel, renderContext, aDirtyRect); + if (!shadowContext) + continue; + + // Set the shadow color; if not specified, use the foreground color + nscolor shadowColor; + if (shadowItem->mHasColor) + shadowColor = shadowItem->mColor; + else + shadowColor = aForFrame->GetStyleColor()->mColor; + + renderContext->Save(); + renderContext->SetColor(gfxRGBA(shadowColor)); + + // Clip the context to the area of the frame's padding rect, so no part of the + // shadow is painted outside + gfxRect shadowGfxRect = RectToGfxRect(paddingRect, twipsPerPixel); + shadowGfxRect.Round(); + renderContext->NewPath(); + if (hasBorderRadius) + renderContext->RoundedRectangle(shadowGfxRect, innerRadii, PR_FALSE); + else + renderContext->Rectangle(shadowGfxRect); + renderContext->Clip(); + + // Fill the temporary surface minus the area within the frame that we should + // not paint in, and blur and apply it + gfxRect shadowPaintGfxRect = RectToGfxRect(shadowPaintRect, twipsPerPixel); + gfxRect shadowClipGfxRect = RectToGfxRect(shadowClipRect, twipsPerPixel); + shadowPaintGfxRect.RoundOut(); + shadowClipGfxRect.Round(); + shadowContext->NewPath(); + shadowContext->Rectangle(shadowPaintGfxRect); if (hasBorderRadius) { // Calculate the radii the inner clipping rect will have + gfxCornerSizes clipRectRadii; gfxFloat spreadDistance = shadowItem->mSpread / twipsPerPixel; gfxFloat borderSizes[4] = {0, 0, 0, 0}; @@ -1339,63 +1367,10 @@ nsCSSRendering::PaintBoxShadowInner(nsPresContext* aPresContext, nsCSSBorderRenderer::ComputeInnerRadii(innerRadii, borderSizes, &clipRectRadii); - } - - // Set the "skip rect" to the area within the frame that we don't paint in, - // including after blurring. We also use this for clipping later on. - nsRect skipRect = shadowClipRect; - skipRect.Deflate(blurRadius, blurRadius); - gfxRect skipGfxRect = RectToGfxRect(skipRect, twipsPerPixel); - if (hasBorderRadius) { - skipGfxRect.Inset(PR_MAX(clipRectRadii[C_TL].height, clipRectRadii[C_TR].height), 0, - PR_MAX(clipRectRadii[C_BL].height, clipRectRadii[C_BR].height), 0); - } - - gfxContext* renderContext = aRenderingContext.ThebesContext(); - nsRefPtr shadowContext; - nsContextBoxBlur blurringArea; - - shadowContext = blurringArea.Init(shadowPaintRect, blurRadius, twipsPerPixel, renderContext, - aDirtyRect, &skipGfxRect); - if (!shadowContext) - continue; - - // Set the shadow color; if not specified, use the foreground color - nscolor shadowColor; - if (shadowItem->mHasColor) - shadowColor = shadowItem->mColor; - else - shadowColor = aForFrame->GetStyleColor()->mColor; - - renderContext->Save(); - renderContext->SetColor(gfxRGBA(shadowColor)); - - // Clip the context to the area of the frame's padding rect, so no part of the - // shadow is painted outside. Also cut out anything beyond where the inset shadow - // will be. - gfxRect shadowGfxRect = RectToGfxRect(paddingRect, twipsPerPixel); - shadowGfxRect.Round(); - renderContext->NewPath(); - if (hasBorderRadius) - renderContext->RoundedRectangle(shadowGfxRect, innerRadii, PR_FALSE); - else - renderContext->Rectangle(shadowGfxRect); - renderContext->Rectangle(skipGfxRect); - renderContext->SetFillRule(gfxContext::FILL_RULE_EVEN_ODD); - renderContext->Clip(); - - // Fill the temporary surface minus the area within the frame that we should - // not paint in, and blur and apply it - gfxRect shadowPaintGfxRect = RectToGfxRect(shadowPaintRect, twipsPerPixel); - shadowPaintGfxRect.RoundOut(); - gfxRect shadowClipGfxRect = RectToGfxRect(shadowClipRect, twipsPerPixel); - shadowClipGfxRect.Round(); - shadowContext->NewPath(); - shadowContext->Rectangle(shadowPaintGfxRect); - if (hasBorderRadius) shadowContext->RoundedRectangle(shadowClipGfxRect, clipRectRadii, PR_FALSE); - else + } else { shadowContext->Rectangle(shadowClipGfxRect); + } shadowContext->SetFillRule(gfxContext::FILL_RULE_EVEN_ODD); shadowContext->Fill(); @@ -3692,8 +3667,7 @@ gfxContext* nsContextBoxBlur::Init(const nsRect& aRect, nscoord aBlurRadius, PRInt32 aAppUnitsPerDevPixel, gfxContext* aDestinationCtx, - const nsRect& aDirtyRect, - gfxRect* aSkipRect) + const nsRect& aDirtyRect) { if (aRect.IsEmpty()) { mContext = nsnull; @@ -3717,8 +3691,7 @@ nsContextBoxBlur::Init(const nsRect& aRect, nscoord aBlurRadius, dirtyRect.RoundOut(); // Create the temporary surface for blurring - mContext = blur.Init(rect, gfxIntSize(blurRadius, blurRadius), - &dirtyRect, aSkipRect); + mContext = blur.Init(rect, gfxIntSize(blurRadius, blurRadius), &dirtyRect); return mContext; } diff --git a/layout/base/nsCSSRendering.h b/layout/base/nsCSSRendering.h index ea43d95520a9..027cca08ab24 100644 --- a/layout/base/nsCSSRendering.h +++ b/layout/base/nsCSSRendering.h @@ -417,9 +417,6 @@ public: * @param aDirtyRect The absolute dirty rect in app units. Used to * optimize the temporary surface size and speed up blur. * - * @param aSkipRect An area in device pixels (NOT app units!) to avoid - * blurring over, to prevent unnecessary work. - * * @return A blank 8-bit alpha-channel-only graphics context to * draw on, or null on error. Must not be freed. The * context has a device offset applied to it given by @@ -435,7 +432,7 @@ public: */ gfxContext* Init(const nsRect& aRect, nscoord aBlurRadius, PRInt32 aAppUnitsPerDevPixel, gfxContext* aDestinationCtx, - const nsRect& aDirtyRect, gfxRect* aSkipRect); + const nsRect& aDirtyRect); /** * Does the actual blurring and mask applying. Users of this object *must* diff --git a/layout/generic/nsHTMLContainerFrame.cpp b/layout/generic/nsHTMLContainerFrame.cpp index 4b0ca8bec7e9..8a713b3d6072 100644 --- a/layout/generic/nsHTMLContainerFrame.cpp +++ b/layout/generic/nsHTMLContainerFrame.cpp @@ -264,7 +264,7 @@ nsDisplayTextShadow::Paint(nsDisplayListBuilder* aBuilder, nsContextBoxBlur contextBoxBlur; gfxContext* shadowCtx = contextBoxBlur.Init(shadowRect, mBlurRadius, presContext->AppUnitsPerDevPixel(), - thebesCtx, mVisibleRect, nsnull); + thebesCtx, mVisibleRect); if (!shadowCtx) return; diff --git a/layout/generic/nsTextFrameThebes.cpp b/layout/generic/nsTextFrameThebes.cpp index f69bddfd54d9..9f1095b14bd8 100644 --- a/layout/generic/nsTextFrameThebes.cpp +++ b/layout/generic/nsTextFrameThebes.cpp @@ -4478,12 +4478,12 @@ nsTextFrame::PaintOneShadow(PRUint32 aOffset, PRUint32 aLength, gfxRect shadowGfxRect = shadowMetrics.mBoundingBox + gfxPoint(aFramePt.x, aTextBaselinePt.y) + shadowOffset; nsRect shadowRect(shadowGfxRect.X(), shadowGfxRect.Y(), - shadowGfxRect.Width(), shadowGfxRect.Height()); + shadowGfxRect.Width(), shadowGfxRect.Height());; nsContextBoxBlur contextBoxBlur; gfxContext* shadowContext = contextBoxBlur.Init(shadowRect, blurRadius, PresContext()->AppUnitsPerDevPixel(), - aCtx, aDirtyRect, nsnull); + aCtx, aDirtyRect); if (!shadowContext) return; diff --git a/layout/reftests/box-shadow/boxshadow-skiprect-ref.html b/layout/reftests/box-shadow/boxshadow-skiprect-ref.html deleted file mode 100644 index bceca9211371..000000000000 --- a/layout/reftests/box-shadow/boxshadow-skiprect-ref.html +++ /dev/null @@ -1,24 +0,0 @@ - - - -
 
-
 
diff --git a/layout/reftests/box-shadow/boxshadow-skiprect.html b/layout/reftests/box-shadow/boxshadow-skiprect.html deleted file mode 100644 index b8027e8c0fc0..000000000000 --- a/layout/reftests/box-shadow/boxshadow-skiprect.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -
 
diff --git a/layout/reftests/box-shadow/reftest.list b/layout/reftests/box-shadow/reftest.list index aa3522129d56..ad5a7f5b3acc 100644 --- a/layout/reftests/box-shadow/reftest.list +++ b/layout/reftests/box-shadow/reftest.list @@ -13,4 +13,3 @@ == boxshadow-rounded-spread.html boxshadow-rounded-spread-ref.html HTTP(..) == boxshadow-dynamic.xul boxshadow-dynamic-ref.xul == boxshadow-onecorner.html boxshadow-onecorner-ref.html -== boxshadow-skiprect.html boxshadow-skiprect-ref.html diff --git a/layout/xul/base/src/nsTextBoxFrame.cpp b/layout/xul/base/src/nsTextBoxFrame.cpp index b40747759c79..d79a33edba6f 100644 --- a/layout/xul/base/src/nsTextBoxFrame.cpp +++ b/layout/xul/base/src/nsTextBoxFrame.cpp @@ -579,7 +579,7 @@ void nsTextBoxFrame::PaintOneShadow(gfxContext* aCtx, nsContextBoxBlur contextBoxBlur; gfxContext* shadowContext = contextBoxBlur.Init(shadowRect, blurRadius, PresContext()->AppUnitsPerDevPixel(), - aCtx, aDirtyRect, nsnull); + aCtx, aDirtyRect); if (!shadowContext) return;