mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-09 19:35:51 +00:00
Bug 607653 - avoid temporary fbos/textures on transformed layers, when possible. part1 r=roc a=apporval2.0
This commit is contained in:
parent
1e726f5136
commit
b19d4e2f0c
@ -68,6 +68,7 @@
|
|||||||
#include "nsSVGFilterElement.h"
|
#include "nsSVGFilterElement.h"
|
||||||
#include "nsSVGString.h"
|
#include "nsSVGString.h"
|
||||||
#include "nsSVGEffects.h"
|
#include "nsSVGEffects.h"
|
||||||
|
#include "gfxUtils.h"
|
||||||
|
|
||||||
#if defined(XP_WIN)
|
#if defined(XP_WIN)
|
||||||
// Prevent Windows redefining LoadImage
|
// Prevent Windows redefining LoadImage
|
||||||
@ -179,7 +180,7 @@ nsSVGFE::SetupScalingFilter(nsSVGFilterInstance *aInstance,
|
|||||||
r.Scale(gfxFloat(scaledSize.width)/aTarget->mImage->Width(),
|
r.Scale(gfxFloat(scaledSize.width)/aTarget->mImage->Width(),
|
||||||
gfxFloat(scaledSize.height)/aTarget->mImage->Height());
|
gfxFloat(scaledSize.height)/aTarget->mImage->Height());
|
||||||
r.RoundOut();
|
r.RoundOut();
|
||||||
if (NS_FAILED(nsLayoutUtils::GfxRectToIntRect(r, &result.mDataRect)))
|
if (!gfxUtils::GfxRectToIntRect(r, &result.mDataRect))
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
#ifdef DEBUG_tor
|
#ifdef DEBUG_tor
|
||||||
@ -2949,9 +2950,9 @@ nsSVGFETileElement::Filter(nsSVGFilterInstance *instance,
|
|||||||
// but nothing clips mFilterPrimitiveSubregion so this should be changed.
|
// but nothing clips mFilterPrimitiveSubregion so this should be changed.
|
||||||
|
|
||||||
nsIntRect tile;
|
nsIntRect tile;
|
||||||
nsresult res = nsLayoutUtils::GfxRectToIntRect(aSources[0]->mFilterPrimitiveSubregion, &tile);
|
PRBool res = gfxUtils::GfxRectToIntRect(aSources[0]->mFilterPrimitiveSubregion, &tile);
|
||||||
|
|
||||||
NS_ENSURE_SUCCESS(res, res); // asserts on failure (not
|
NS_ENSURE_TRUE(res, NS_ERROR_FAILURE); // asserts on failure (not
|
||||||
if (tile.IsEmpty())
|
if (tile.IsEmpty())
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
|
||||||
|
@ -35,7 +35,6 @@ EXPORTS = \
|
|||||||
gfxTypes.h \
|
gfxTypes.h \
|
||||||
gfxTextRunCache.h \
|
gfxTextRunCache.h \
|
||||||
gfxTextRunWordCache.h \
|
gfxTextRunWordCache.h \
|
||||||
gfxThebesUtils.h \
|
|
||||||
gfxUtils.h \
|
gfxUtils.h \
|
||||||
gfxUserFontSet.h \
|
gfxUserFontSet.h \
|
||||||
GLDefs.h \
|
GLDefs.h \
|
||||||
@ -184,7 +183,6 @@ CPPSRCS = \
|
|||||||
gfxSkipChars.cpp \
|
gfxSkipChars.cpp \
|
||||||
gfxTextRunCache.cpp \
|
gfxTextRunCache.cpp \
|
||||||
gfxTextRunWordCache.cpp \
|
gfxTextRunWordCache.cpp \
|
||||||
gfxThebesUtils.cpp \
|
|
||||||
gfxUserFontSet.cpp \
|
gfxUserFontSet.cpp \
|
||||||
gfxUtils.cpp \
|
gfxUtils.cpp \
|
||||||
gfxUnicodeProperties.cpp \
|
gfxUnicodeProperties.cpp \
|
||||||
|
@ -88,8 +88,9 @@ gfxAlphaBoxBlur::Init(const gfxRect& aRect,
|
|||||||
gfxRect skipRect = *aSkipRect;
|
gfxRect skipRect = *aSkipRect;
|
||||||
skipRect.RoundIn();
|
skipRect.RoundIn();
|
||||||
skipRect.Inset(aBlurRadius + aSpreadRadius);
|
skipRect.Inset(aBlurRadius + aSpreadRadius);
|
||||||
mSkipRect = gfxThebesUtils::GfxRectToIntRect(skipRect);
|
gfxUtils::GfxRectToIntRect(skipRect, &mSkipRect);
|
||||||
nsIntRect shadowIntRect = gfxThebesUtils::GfxRectToIntRect(rect);
|
nsIntRect shadowIntRect;
|
||||||
|
gfxUtils::GfxRectToIntRect(rect, &shadowIntRect);
|
||||||
mSkipRect.IntersectRect(mSkipRect, shadowIntRect);
|
mSkipRect.IntersectRect(mSkipRect, shadowIntRect);
|
||||||
if (mSkipRect == shadowIntRect)
|
if (mSkipRect == shadowIntRect)
|
||||||
return nsnull;
|
return nsnull;
|
||||||
|
@ -41,7 +41,8 @@
|
|||||||
#include "gfxContext.h"
|
#include "gfxContext.h"
|
||||||
#include "gfxImageSurface.h"
|
#include "gfxImageSurface.h"
|
||||||
#include "gfxTypes.h"
|
#include "gfxTypes.h"
|
||||||
#include "gfxThebesUtils.h"
|
#include "gfxUtils.h"
|
||||||
|
#include "nsRect.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of a triple box blur approximation of a Gaussian blur.
|
* Implementation of a triple box blur approximation of a Gaussian blur.
|
||||||
|
@ -265,6 +265,15 @@ public:
|
|||||||
*/
|
*/
|
||||||
void NudgeToIntegers(void);
|
void NudgeToIntegers(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if matrix is multiple of 90 degrees rotation with flipping,
|
||||||
|
* scaling and translation.
|
||||||
|
*/
|
||||||
|
PRBool PreservesAxisAlignedRectangles() const {
|
||||||
|
return ((FuzzyEqual(xx, 0.0) && FuzzyEqual(yy, 0.0))
|
||||||
|
|| (FuzzyEqual(xy, 0.0) && FuzzyEqual(yx, 0.0)));
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static PRBool FuzzyEqual(gfxFloat aV1, gfxFloat aV2) {
|
static PRBool FuzzyEqual(gfxFloat aV1, gfxFloat aV2) {
|
||||||
return fabs(aV2 - aV1) < 1e-6;
|
return fabs(aV2 - aV1) < 1e-6;
|
||||||
|
@ -1,49 +0,0 @@
|
|||||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
|
||||||
* ***** BEGIN LICENSE BLOCK *****
|
|
||||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
||||||
*
|
|
||||||
* The contents of this file are subject to the Mozilla Public License Version
|
|
||||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
|
||||||
* the License. You may obtain a copy of the License at
|
|
||||||
* http://www.mozilla.org/MPL/
|
|
||||||
*
|
|
||||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
||||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
||||||
* for the specific language governing rights and limitations under the
|
|
||||||
* License.
|
|
||||||
*
|
|
||||||
* The Original Code is gfx thebes code.
|
|
||||||
*
|
|
||||||
* The Initial Developer of the Original Code is Mozilla Foundation.
|
|
||||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
|
||||||
* the Initial Developer. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Contributor(s):
|
|
||||||
* Michael Ventnor <m.ventnor@gmail.com>
|
|
||||||
*
|
|
||||||
* Alternatively, the contents of this file may be used under the terms of
|
|
||||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
|
||||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
||||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
||||||
* of those above. If you wish to allow use of your version of this file only
|
|
||||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
|
||||||
* use your version of this file under the terms of the MPL, indicate your
|
|
||||||
* decision by deleting the provisions above and replace them with the notice
|
|
||||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
||||||
* the provisions above, a recipient may use your version of this file under
|
|
||||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
|
||||||
*
|
|
||||||
* ***** END LICENSE BLOCK ***** */
|
|
||||||
|
|
||||||
#include "gfxThebesUtils.h"
|
|
||||||
|
|
||||||
// Converts a gfxRect to an nsIntRect for speed
|
|
||||||
nsIntRect
|
|
||||||
gfxThebesUtils::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;
|
|
||||||
}
|
|
@ -1,53 +0,0 @@
|
|||||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
|
||||||
* ***** BEGIN LICENSE BLOCK *****
|
|
||||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
||||||
*
|
|
||||||
* The contents of this file are subject to the Mozilla Public License Version
|
|
||||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
|
||||||
* the License. You may obtain a copy of the License at
|
|
||||||
* http://www.mozilla.org/MPL/
|
|
||||||
*
|
|
||||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
||||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
||||||
* for the specific language governing rights and limitations under the
|
|
||||||
* License.
|
|
||||||
*
|
|
||||||
* The Original Code is gfx thebes code.
|
|
||||||
*
|
|
||||||
* The Initial Developer of the Original Code is Mozilla Foundation.
|
|
||||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
|
||||||
* the Initial Developer. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Contributor(s):
|
|
||||||
* Michael Ventnor <m.ventnor@gmail.com>
|
|
||||||
*
|
|
||||||
* Alternatively, the contents of this file may be used under the terms of
|
|
||||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
|
||||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
||||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
||||||
* of those above. If you wish to allow use of your version of this file only
|
|
||||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
|
||||||
* use your version of this file under the terms of the MPL, indicate your
|
|
||||||
* decision by deleting the provisions above and replace them with the notice
|
|
||||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
||||||
* the provisions above, a recipient may use your version of this file under
|
|
||||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
|
||||||
*
|
|
||||||
* ***** END LICENSE BLOCK ***** */
|
|
||||||
|
|
||||||
#include "gfxRect.h"
|
|
||||||
#include "nsRect.h"
|
|
||||||
|
|
||||||
#ifndef GFX_THEBES_UTILS_H
|
|
||||||
#define GFX_THEBES_UTILS_H
|
|
||||||
|
|
||||||
class THEBES_API gfxThebesUtils
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
/**
|
|
||||||
* Converts a gfxRect into nsIntRect for speed reasons.
|
|
||||||
*/
|
|
||||||
static nsIntRect GfxRectToIntRect(const gfxRect& aIn);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* GFX_THEBES_UTILS_H */
|
|
@ -458,3 +458,12 @@ gfxUtils::ClipToRegionSnapped(gfxContext* aContext, const nsIntRegion& aRegion)
|
|||||||
{
|
{
|
||||||
ClipToRegionInternal(aContext, aRegion, PR_TRUE);
|
ClipToRegionInternal(aContext, aRegion, PR_TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PRBool
|
||||||
|
gfxUtils::GfxRectToIntRect(const gfxRect& aIn, nsIntRect* aOut)
|
||||||
|
{
|
||||||
|
*aOut = nsIntRect(PRInt32(aIn.X()), PRInt32(aIn.Y()),
|
||||||
|
PRInt32(aIn.Width()), PRInt32(aIn.Height()));
|
||||||
|
return gfxRect(aOut->x, aOut->y, aOut->width, aOut->height) == aIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -44,6 +44,7 @@
|
|||||||
|
|
||||||
class gfxDrawable;
|
class gfxDrawable;
|
||||||
class nsIntRegion;
|
class nsIntRegion;
|
||||||
|
class nsIntRect;
|
||||||
|
|
||||||
class THEBES_API gfxUtils {
|
class THEBES_API gfxUtils {
|
||||||
public:
|
public:
|
||||||
@ -99,6 +100,13 @@ public:
|
|||||||
* Convert image format to depth value
|
* Convert image format to depth value
|
||||||
*/
|
*/
|
||||||
static int ImageFormatToDepth(gfxASurface::gfxImageFormat aFormat);
|
static int ImageFormatToDepth(gfxASurface::gfxImageFormat aFormat);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If aIn can be represented exactly using an nsIntRect (i.e.
|
||||||
|
* integer-aligned edges and coordinates in the PRInt32 range) then we
|
||||||
|
* set aOut to that rectangle, otherwise return failure.
|
||||||
|
*/
|
||||||
|
static PRBool GfxRectToIntRect(const gfxRect& aIn, nsIntRect* aOut);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -45,6 +45,7 @@
|
|||||||
#include "nsSubDocumentFrame.h"
|
#include "nsSubDocumentFrame.h"
|
||||||
#include "nsCSSRendering.h"
|
#include "nsCSSRendering.h"
|
||||||
#include "nsCSSFrameConstructor.h"
|
#include "nsCSSFrameConstructor.h"
|
||||||
|
#include "gfxUtils.h"
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -747,7 +748,7 @@ SetVisibleRectForLayer(Layer* aLayer, const nsIntRect& aRect)
|
|||||||
gfxRect(aRect.x, aRect.y, aRect.width, aRect.height));
|
gfxRect(aRect.x, aRect.y, aRect.width, aRect.height));
|
||||||
layerVisible.RoundOut();
|
layerVisible.RoundOut();
|
||||||
nsIntRect visibleRect;
|
nsIntRect visibleRect;
|
||||||
if (NS_FAILED(nsLayoutUtils::GfxRectToIntRect(layerVisible, &visibleRect))) {
|
if (!gfxUtils::GfxRectToIntRect(layerVisible, &visibleRect)) {
|
||||||
visibleRect = nsIntRect(0, 0, 0, 0);
|
visibleRect = nsIntRect(0, 0, 0, 0);
|
||||||
NS_WARNING("Visible rect transformed out of bounds");
|
NS_WARNING("Visible rect transformed out of bounds");
|
||||||
}
|
}
|
||||||
|
@ -985,15 +985,6 @@ nsLayoutUtils::InvertTransformsToRoot(nsIFrame *aFrame,
|
|||||||
return MatrixTransformPoint(aPoint, ctm.Invert(), aFrame->PresContext()->AppUnitsPerDevPixel());
|
return MatrixTransformPoint(aPoint, ctm.Invert(), aFrame->PresContext()->AppUnitsPerDevPixel());
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult
|
|
||||||
nsLayoutUtils::GfxRectToIntRect(const gfxRect& aIn, nsIntRect* aOut)
|
|
||||||
{
|
|
||||||
*aOut = nsIntRect(PRInt32(aIn.X()), PRInt32(aIn.Y()),
|
|
||||||
PRInt32(aIn.Width()), PRInt32(aIn.Height()));
|
|
||||||
return gfxRect(aOut->x, aOut->y, aOut->width, aOut->height) == aIn
|
|
||||||
? NS_OK : NS_ERROR_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static nsIntPoint GetWidgetOffset(nsIWidget* aWidget, nsIWidget*& aRootWidget) {
|
static nsIntPoint GetWidgetOffset(nsIWidget* aWidget, nsIWidget*& aRootWidget) {
|
||||||
nsIntPoint offset(0, 0);
|
nsIntPoint offset(0, 0);
|
||||||
nsIWidget* parent = aWidget->GetParent();
|
nsIWidget* parent = aWidget->GetParent();
|
||||||
|
@ -512,13 +512,6 @@ public:
|
|||||||
*/
|
*/
|
||||||
static nsRect RoundGfxRectToAppRect(const gfxRect &aRect, float aFactor);
|
static nsRect RoundGfxRectToAppRect(const gfxRect &aRect, float aFactor);
|
||||||
|
|
||||||
/**
|
|
||||||
* If aIn can be represented exactly using an nsIntRect (i.e.
|
|
||||||
* integer-aligned edges and coordinates in the PRInt32 range) then we
|
|
||||||
* set aOut to that rectangle, otherwise return failure.
|
|
||||||
*/
|
|
||||||
static nsresult GfxRectToIntRect(const gfxRect& aIn, nsIntRect* aOut);
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
PAINT_IN_TRANSFORM = 0x01,
|
PAINT_IN_TRANSFORM = 0x01,
|
||||||
PAINT_SYNC_DECODE_IMAGES = 0x02,
|
PAINT_SYNC_DECODE_IMAGES = 0x02,
|
||||||
|
@ -47,6 +47,7 @@
|
|||||||
#include "nsSVGFilterPaintCallback.h"
|
#include "nsSVGFilterPaintCallback.h"
|
||||||
#include "nsSVGRect.h"
|
#include "nsSVGRect.h"
|
||||||
#include "nsSVGFilterInstance.h"
|
#include "nsSVGFilterInstance.h"
|
||||||
|
#include "gfxUtils.h"
|
||||||
|
|
||||||
nsIFrame*
|
nsIFrame*
|
||||||
NS_NewSVGFilterFrame(nsIPresShell* aPresShell, nsStyleContext* aContext)
|
NS_NewSVGFilterFrame(nsIPresShell* aPresShell, nsStyleContext* aContext)
|
||||||
@ -67,7 +68,7 @@ MapDeviceRectToFilterSpace(const gfxMatrix& aMatrix,
|
|||||||
aDeviceRect->width, aDeviceRect->height));
|
aDeviceRect->width, aDeviceRect->height));
|
||||||
r.RoundOut();
|
r.RoundOut();
|
||||||
nsIntRect intRect;
|
nsIntRect intRect;
|
||||||
if (NS_SUCCEEDED(nsLayoutUtils::GfxRectToIntRect(r, &intRect))) {
|
if (gfxUtils::GfxRectToIntRect(r, &intRect)) {
|
||||||
rect = intRect;
|
rect = intRect;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -236,9 +237,8 @@ TransformFilterSpaceToDeviceSpace(nsSVGFilterInstance *aInstance, nsIntRect *aRe
|
|||||||
r = m.TransformBounds(r);
|
r = m.TransformBounds(r);
|
||||||
r.RoundOut();
|
r.RoundOut();
|
||||||
nsIntRect deviceRect;
|
nsIntRect deviceRect;
|
||||||
nsresult rv = nsLayoutUtils::GfxRectToIntRect(r, &deviceRect);
|
if (!gfxUtils::GfxRectToIntRect(r, &deviceRect))
|
||||||
if (NS_FAILED(rv))
|
return NS_ERROR_FAILURE;
|
||||||
return rv;
|
|
||||||
*aRect = deviceRect;
|
*aRect = deviceRect;
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
@ -41,6 +41,7 @@
|
|||||||
#include "nsSVGFilterPaintCallback.h"
|
#include "nsSVGFilterPaintCallback.h"
|
||||||
#include "nsSVGFilterElement.h"
|
#include "nsSVGFilterElement.h"
|
||||||
#include "nsLayoutUtils.h"
|
#include "nsLayoutUtils.h"
|
||||||
|
#include "gfxUtils.h"
|
||||||
|
|
||||||
static double Square(double aX)
|
static double Square(double aX)
|
||||||
{
|
{
|
||||||
@ -165,7 +166,7 @@ nsSVGFilterInstance::BuildSources()
|
|||||||
gfxRect sourceBounds = UserSpaceToFilterSpace(mTargetBBox);
|
gfxRect sourceBounds = UserSpaceToFilterSpace(mTargetBBox);
|
||||||
sourceBounds.RoundOut();
|
sourceBounds.RoundOut();
|
||||||
// Detect possible float->int overflow
|
// Detect possible float->int overflow
|
||||||
if (NS_FAILED(nsLayoutUtils::GfxRectToIntRect(sourceBounds, &sourceBoundsInt)))
|
if (!gfxUtils::GfxRectToIntRect(sourceBounds, &sourceBoundsInt))
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
|
|
||||||
mSourceColorAlpha.mResultBoundingBox = sourceBoundsInt;
|
mSourceColorAlpha.mResultBoundingBox = sourceBoundsInt;
|
||||||
@ -356,9 +357,8 @@ nsSVGFilterInstance::BuildSourceImages()
|
|||||||
r = m.TransformBounds(r);
|
r = m.TransformBounds(r);
|
||||||
r.RoundOut();
|
r.RoundOut();
|
||||||
nsIntRect dirty;
|
nsIntRect dirty;
|
||||||
nsresult rv = nsLayoutUtils::GfxRectToIntRect(r, &dirty);
|
if (!gfxUtils::GfxRectToIntRect(r, &dirty))
|
||||||
if (NS_FAILED(rv))
|
return NS_ERROR_FAILURE;
|
||||||
return rv;
|
|
||||||
|
|
||||||
// SVG graphics paint to device space, so we need to set an initial device
|
// SVG graphics paint to device space, so we need to set an initial device
|
||||||
// space to filter space transform on the gfxContext that SourceGraphic
|
// space to filter space transform on the gfxContext that SourceGraphic
|
||||||
|
@ -91,6 +91,7 @@
|
|||||||
#include "nsSVGPathGeometryFrame.h"
|
#include "nsSVGPathGeometryFrame.h"
|
||||||
#include "prdtoa.h"
|
#include "prdtoa.h"
|
||||||
#include "mozilla/dom/Element.h"
|
#include "mozilla/dom/Element.h"
|
||||||
|
#include "gfxUtils.h"
|
||||||
|
|
||||||
using namespace mozilla::dom;
|
using namespace mozilla::dom;
|
||||||
|
|
||||||
@ -636,7 +637,7 @@ nsSVGUtils::FindFilterInvalidation(nsIFrame *aFrame, const nsRect& aRect)
|
|||||||
TransformBounds(gfxRect(x, y, width, height));
|
TransformBounds(gfxRect(x, y, width, height));
|
||||||
bounds.RoundOut();
|
bounds.RoundOut();
|
||||||
nsIntRect r;
|
nsIntRect r;
|
||||||
if (NS_SUCCEEDED(nsLayoutUtils::GfxRectToIntRect(bounds, &r))) {
|
if (gfxUtils::GfxRectToIntRect(bounds, &r)) {
|
||||||
rect = r;
|
rect = r;
|
||||||
} else {
|
} else {
|
||||||
NS_NOTREACHED("Not going to invalidate the correct area");
|
NS_NOTREACHED("Not going to invalidate the correct area");
|
||||||
@ -955,7 +956,7 @@ public:
|
|||||||
gfxRect dirtyBounds = userToDeviceSpace.TransformBounds(
|
gfxRect dirtyBounds = userToDeviceSpace.TransformBounds(
|
||||||
gfxRect(aDirtyRect->x, aDirtyRect->y, aDirtyRect->width, aDirtyRect->height));
|
gfxRect(aDirtyRect->x, aDirtyRect->y, aDirtyRect->width, aDirtyRect->height));
|
||||||
dirtyBounds.RoundOut();
|
dirtyBounds.RoundOut();
|
||||||
if (NS_SUCCEEDED(nsLayoutUtils::GfxRectToIntRect(dirtyBounds, &tmpDirtyRect))) {
|
if (gfxUtils::GfxRectToIntRect(dirtyBounds, &tmpDirtyRect)) {
|
||||||
dirtyRect = &tmpDirtyRect;
|
dirtyRect = &tmpDirtyRect;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user