Bug 635643. Remove nsIRegion, because it is a useless wrapper class. r=tnikkel

This commit is contained in:
Marco Castelluccio 2011-07-25 17:19:37 -05:00
parent 67d4a7782c
commit 6e58070f5f
19 changed files with 76 additions and 739 deletions

View File

@ -75,7 +75,6 @@
#include "gfxContext.h"
// for painting the background window
#include "nsIRegion.h"
#include "nsILookAndFeel.h"
// Printing Includes

View File

@ -77,7 +77,6 @@ EXPORTS = \
nsFontMetrics.h \
nsDeviceContext.h \
nsGfxCIID.h \
nsIRegion.h \
nsITheme.h \
nsThemeConstants.h \
nsBoundingMetrics.h \
@ -98,7 +97,6 @@ CPPSRCS = \
nsScriptableRegion.cpp \
gfxCrashReporterUtils.cpp \
nsDeviceContext.cpp \
nsThebesRegion.cpp \
nsThebesGfxFactory.cpp \
nsRenderingContext.cpp \
nsFontMetrics.cpp \

View File

@ -1,286 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** 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 mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1998
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* Alternatively, the contents of this file may be used under the terms of
* either of 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 ***** */
#ifndef nsIRegion_h___
#define nsIRegion_h___
#include "nscore.h"
#include "nsISupports.h"
#include "nsRect.h"
#include "nsRegion.h"
enum nsRegionComplexity
{
eRegionComplexity_empty = 0,
eRegionComplexity_rect = 1,
eRegionComplexity_complex = 2
};
typedef struct
{
PRInt32 x;
PRInt32 y;
PRUint32 width;
PRUint32 height;
} nsRegionRect;
typedef struct
{
PRUint32 mNumRects; //number of actual rects in the mRects array
PRUint32 mRectsLen; //length, in rects, of the mRects array
PRUint32 mArea; //area of the covered portion of the region
nsRegionRect mRects[1];
} nsRegionRectSet;
// An implementation of a region primitive that can be used to
// represent arbitrary pixel areas. Probably implemented on top
// of the native region primitive. The assumption is that, at worst,
// it is a rectangle list.
#define NS_IREGION_IID \
{ 0x8ef366e0, 0xee94, 0x11d1, \
{ 0xa8, 0x2a, 0x00, 0x40, 0x95, 0x9a, 0x28, 0xc9 } }
class nsIRegion : public nsISupports
{
public:
NS_DECLARE_STATIC_IID_ACCESSOR(NS_IREGION_IID)
virtual nsresult Init(void) = 0;
/**
* copy operator equivalent that takes another region
*
* @param region to copy
* @return void
*
**/
virtual void SetTo(const nsIRegion &aRegion) = 0;
/**
* copy operator equivalent that takes a rect
*
* @param aX xoffset of rect to set region to
* @param aY yoffset of rect to set region to
* @param aWidth width of rect to set region to
* @param aHeight height of rect to set region to
* @return void
*
**/
virtual void SetTo(PRInt32 aX, PRInt32 aY, PRInt32 aWidth, PRInt32 aHeight) = 0;
/**
* destructively intersect another region with this one
*
* @param region to intersect
* @return void
*
**/
virtual void Intersect(const nsIRegion &aRegion) = 0;
/**
* destructively intersect a rect with this region
*
* @param aX xoffset of rect to intersect with region
* @param aY yoffset of rect to intersect with region
* @param aWidth width of rect to intersect with region
* @param aHeight height of rect to intersect with region
* @return void
*
**/
virtual void Intersect(PRInt32 aX, PRInt32 aY, PRInt32 aWidth, PRInt32 aHeight) = 0;
/**
* destructively union another region with this one
*
* @param region to union
* @return void
*
**/
virtual void Union(const nsIRegion &aRegion) = 0;
/**
* destructively union a rect with this region
*
* @param aX xoffset of rect to union with region
* @param aY yoffset of rect to union with region
* @param aWidth width of rect to union with region
* @param aHeight height of rect to union with region
* @return void
*
**/
virtual void Union(PRInt32 aX, PRInt32 aY, PRInt32 aWidth, PRInt32 aHeight) = 0;
/**
* destructively subtract another region with this one
*
* @param region to subtract
* @return void
*
**/
virtual void Subtract(const nsIRegion &aRegion) = 0;
/**
* destructively subtract a rect from this region
*
* @param aX xoffset of rect to subtract with region
* @param aY yoffset of rect to subtract with region
* @param aWidth width of rect to subtract with region
* @param aHeight height of rect to subtract with region
* @return void
*
**/
virtual void Subtract(PRInt32 aX, PRInt32 aY, PRInt32 aWidth, PRInt32 aHeight) = 0;
/**
* is this region empty? i.e. does it contain any pixels
*
* @param none
* @return returns whether the region is empty
*
**/
virtual PRBool IsEmpty(void) = 0;
/**
* == operator equivalent i.e. do the regions contain exactly
* the same pixels
*
* @param region to compare
* @return whether the regions are identical
*
**/
virtual PRBool IsEqual(const nsIRegion &aRegion) = 0;
/**
* returns the bounding box of the region i.e. the smallest
* rectangle that completely contains the region.
*
* @param aX out parameter for xoffset of bounding rect for region
* @param aY out parameter for yoffset of bounding rect for region
* @param aWidth out parameter for width of bounding rect for region
* @param aHeight out parameter for height of bounding rect for region
* @return void
*
**/
virtual void GetBoundingBox(PRInt32 *aX, PRInt32 *aY, PRInt32 *aWidth, PRInt32 *aHeight) = 0;
/**
* offsets the region in x and y
*
* @param xoffset pixel offset in x
* @param yoffset pixel offset in y
* @return void
*
**/
virtual void Offset(PRInt32 aXOffset, PRInt32 aYOffset) = 0;
/**
* does the region intersect the rectangle?
*
* @param rect to check for containment
* @return true if the region intersects the rect
*
**/
virtual PRBool ContainsRect(PRInt32 aX, PRInt32 aY, PRInt32 aWidth, PRInt32 aHeight) = 0;
/**
* get the set of rects which make up this region. the aRects
* parameter must be freed by calling FreeRects before the region
* is deleted. aRects may be passed in again when requesting
* the rect list as a recycling method.
*
* @param aRects out parameter containing set of rects
* comprising the region
* @return error status
*
**/
NS_IMETHOD GetRects(nsRegionRectSet **aRects) = 0;
/**
* Free a rect set returned by GetRects.
*
* @param aRects rects to free
* @return error status
*
**/
NS_IMETHOD FreeRects(nsRegionRectSet *aRects) = 0;
/**
* Get the underlying nsIntRegion that this nsIRegion represents.
**/
virtual nsIntRegion GetUnderlyingRegion() const = 0;
/**
* Get the native region that this nsIRegion represents.
* @param aRegion out parameter for native region handle
* @return error status
**/
NS_IMETHOD GetNativeRegion(void *&aRegion) const = 0;
/**
* Get the complexity of the region as defined by the
* nsRegionComplexity enum.
* @param aComplexity out parameter for region complexity
* @return error status
**/
NS_IMETHOD GetRegionComplexity(nsRegionComplexity &aComplexity) const = 0;
/**
* get the number of rects which make up this region.
*
* @param aRects out parameter containing the number of rects
* comprising the region
* @return error status
*
**/
NS_IMETHOD GetNumRects(PRUint32 *aRects) const = 0;
};
NS_DEFINE_STATIC_IID_ACCESSOR(nsIRegion, NS_IREGION_IID)
#endif // nsIRegion_h___

View File

@ -40,13 +40,13 @@
#include "nsISupports.idl"
%{C++
class nsIRegion;
class nsIntRegion;
%}
[ptr] native nsIRegion(nsIRegion);
native nsIntRegion(nsIntRegion);
[scriptable, uuid(4d179656-a5bd-42a6-a937-c81f820dcf2f)]
[scriptable, uuid(f390b97c-a0cf-4cb4-b9e8-bfc15df76ab5)]
interface nsIScriptableRegion : nsISupports
{
void init ( ) ;
@ -204,7 +204,7 @@ interface nsIScriptableRegion : nsISupports
boolean containsRect ( in long aX, in long aY, in long aWidth, in long aHeight ) ;
[noscript] readonly attribute nsIRegion region;
[noscript] readonly attribute nsIntRegion region;
};

View File

@ -44,115 +44,111 @@
#include "nsServiceManagerUtils.h"
#include "jsapi.h"
nsScriptableRegion::nsScriptableRegion(nsIRegion* region) : mRegion(nsnull), mRectSet(nsnull)
nsScriptableRegion::nsScriptableRegion()
{
mRegion = region;
NS_IF_ADDREF(mRegion);
}
nsScriptableRegion::~nsScriptableRegion()
{
if (mRegion) {
mRegion->FreeRects(mRectSet);
NS_RELEASE(mRegion);
}
}
NS_IMPL_ISUPPORTS1(nsScriptableRegion, nsIScriptableRegion)
NS_IMETHODIMP nsScriptableRegion::Init()
{
return mRegion->Init();
return NS_OK;
}
NS_IMETHODIMP nsScriptableRegion::SetToRegion(nsIScriptableRegion *aRegion)
{
nsCOMPtr<nsIRegion> region(do_QueryInterface(aRegion));
mRegion->SetTo(*region);
return NS_OK;
aRegion->GetRegion(&mRegion);
return NS_OK;
}
NS_IMETHODIMP nsScriptableRegion::SetToRect(PRInt32 aX, PRInt32 aY, PRInt32 aWidth, PRInt32 aHeight)
{
mRegion->SetTo(aX, aY, aWidth, aHeight);
return NS_OK;
mRegion = nsIntRect(aX, aY, aWidth, aHeight);
return NS_OK;
}
NS_IMETHODIMP nsScriptableRegion::IntersectRegion(nsIScriptableRegion *aRegion)
{
nsCOMPtr<nsIRegion> region(do_QueryInterface(aRegion));
mRegion->Intersect(*region);
return NS_OK;
nsIntRegion region;
aRegion->GetRegion(&region);
mRegion.And(mRegion, region);
return NS_OK;
}
NS_IMETHODIMP nsScriptableRegion::IntersectRect(PRInt32 aX, PRInt32 aY, PRInt32 aWidth, PRInt32 aHeight)
{
mRegion->Intersect(aX, aY, aWidth, aHeight);
return NS_OK;
mRegion.And(mRegion, nsIntRect(aX, aY, aWidth, aHeight));
return NS_OK;
}
NS_IMETHODIMP nsScriptableRegion::UnionRegion(nsIScriptableRegion *aRegion)
{
nsCOMPtr<nsIRegion> region(do_QueryInterface(aRegion));
mRegion->Union(*region);
return NS_OK;
nsIntRegion region;
aRegion->GetRegion(&region);
mRegion.Or(mRegion, region);
return NS_OK;
}
NS_IMETHODIMP nsScriptableRegion::UnionRect(PRInt32 aX, PRInt32 aY, PRInt32 aWidth, PRInt32 aHeight)
{
mRegion->Union(aX, aY, aWidth, aHeight);
return NS_OK;
mRegion.Or(mRegion, nsIntRect(aX, aY, aWidth, aHeight));
return NS_OK;
}
NS_IMETHODIMP nsScriptableRegion::SubtractRegion(nsIScriptableRegion *aRegion)
{
nsCOMPtr<nsIRegion> region(do_QueryInterface(aRegion));
mRegion->Subtract(*region);
return NS_OK;
nsIntRegion region;
aRegion->GetRegion(&region);
mRegion.Sub(mRegion, region);
return NS_OK;
}
NS_IMETHODIMP nsScriptableRegion::SubtractRect(PRInt32 aX, PRInt32 aY, PRInt32 aWidth, PRInt32 aHeight)
{
mRegion->Subtract(aX, aY, aWidth, aHeight);
return NS_OK;
mRegion.Sub(mRegion, nsIntRect(aX, aY, aWidth, aHeight));
return NS_OK;
}
NS_IMETHODIMP nsScriptableRegion::IsEmpty(PRBool *isEmpty)
{
*isEmpty = mRegion->IsEmpty();
return NS_OK;
*isEmpty = mRegion.IsEmpty();
return NS_OK;
}
NS_IMETHODIMP nsScriptableRegion::IsEqualRegion(nsIScriptableRegion *aRegion, PRBool *isEqual)
{
nsCOMPtr<nsIRegion> region(do_QueryInterface(aRegion));
*isEqual = mRegion->IsEqual(*region);
return NS_OK;
nsIntRegion region;
aRegion->GetRegion(&region);
*isEqual = mRegion.IsEqual(region);
return NS_OK;
}
NS_IMETHODIMP nsScriptableRegion::GetBoundingBox(PRInt32 *aX, PRInt32 *aY, PRInt32 *aWidth, PRInt32 *aHeight)
{
mRegion->GetBoundingBox(aX, aY, aWidth, aHeight);
return NS_OK;
nsIntRect boundRect = mRegion.GetBounds();
*aX = boundRect.x;
*aY = boundRect.y;
*aWidth = boundRect.width;
*aHeight = boundRect.height;
return NS_OK;
}
NS_IMETHODIMP nsScriptableRegion::Offset(PRInt32 aXOffset, PRInt32 aYOffset)
{
mRegion->Offset(aXOffset, aYOffset);
return NS_OK;
mRegion.MoveBy(aXOffset, aYOffset);
return NS_OK;
}
NS_IMETHODIMP nsScriptableRegion::ContainsRect(PRInt32 aX, PRInt32 aY, PRInt32 aWidth, PRInt32 aHeight, PRBool *containsRect)
{
*containsRect = mRegion->ContainsRect(aX, aY, aWidth, aHeight);
return NS_OK;
*containsRect = mRegion.Contains(nsIntRect(aX, aY, aWidth, aHeight));
return NS_OK;
}
NS_IMETHODIMP nsScriptableRegion::GetRegion(nsIRegion** outRgn)
NS_IMETHODIMP nsScriptableRegion::GetRegion(nsIntRegion* outRgn)
{
*outRgn = mRegion;
NS_IF_ADDREF(*outRgn);
return NS_OK;
}
@ -170,33 +166,36 @@ NS_IMETHODIMP nsScriptableRegion::GetRects() {
jsval *retvalPtr;
ncc->GetRetValPtr(&retvalPtr);
rv = mRegion->GetRects(&mRectSet);
NS_ENSURE_SUCCESS(rv, rv);
if (!mRectSet->mNumRects) {
PRUint32 numRects = mRegion.GetNumRects();
if (!numRects) {
*retvalPtr = JSVAL_NULL;
ncc->SetReturnValueWasSet(PR_TRUE);
return NS_OK;
}
JSContext *cx = nsnull;
rv = ncc->GetJSContext(&cx);
NS_ENSURE_SUCCESS(rv, rv);
JSObject *destArray = JS_NewArrayObject(cx, mRectSet->mNumRects*4, NULL);
JSObject *destArray = JS_NewArrayObject(cx, numRects*4, NULL);
*retvalPtr = OBJECT_TO_JSVAL(destArray);
ncc->SetReturnValueWasSet(PR_TRUE);
for(PRUint32 i = 0; i < mRectSet->mNumRects; i++) {
nsRegionRect &rect = mRectSet->mRects[i];
int n = i*4;
int n = 0;
nsIntRegionRectIterator iter(mRegion);
const nsIntRect *rect;
while ((rect = iter.Next())) {
// This will contain bogus data if values don't fit in 31 bit
JS_DefineElement(cx, destArray, n, INT_TO_JSVAL(rect.x), NULL, NULL, JSPROP_ENUMERATE);
JS_DefineElement(cx, destArray, n+1, INT_TO_JSVAL(rect.y), NULL, NULL, JSPROP_ENUMERATE);
JS_DefineElement(cx, destArray, n+2, INT_TO_JSVAL(rect.width), NULL, NULL, JSPROP_ENUMERATE);
JS_DefineElement(cx, destArray, n+3, INT_TO_JSVAL(rect.height), NULL, NULL, JSPROP_ENUMERATE);
JS_DefineElement(cx, destArray, n, INT_TO_JSVAL(rect->x), NULL, NULL, JSPROP_ENUMERATE);
JS_DefineElement(cx, destArray, n+1, INT_TO_JSVAL(rect->y), NULL, NULL, JSPROP_ENUMERATE);
JS_DefineElement(cx, destArray, n+2, INT_TO_JSVAL(rect->width), NULL, NULL, JSPROP_ENUMERATE);
JS_DefineElement(cx, destArray, n+3, INT_TO_JSVAL(rect->height), NULL, NULL, JSPROP_ENUMERATE);
n += 4;
}
NS_ENSURE_SUCCESS(rv, rv);

View File

@ -39,23 +39,17 @@
#include "nsIScriptableRegion.h"
#include "gfxCore.h"
#include "nsIRegion.h"
#include "nsISupports.h"
#include "nsRegion.h"
class nsIRegion;
/**
* An adapter class for the unscriptable nsIRegion interface.
*/
class NS_GFX nsScriptableRegion : public nsIScriptableRegion {
public:
nsScriptableRegion(nsIRegion* region);
virtual ~nsScriptableRegion();
nsScriptableRegion();
NS_DECL_ISUPPORTS
NS_DECL_NSISCRIPTABLEREGION
private:
nsIRegion* mRegion;
nsRegionRectSet *mRectSet;
nsIntRegion mRegion;
};

View File

@ -41,7 +41,6 @@
#include "nsGfxCIID.h"
#include "nsThebesFontEnumerator.h"
#include "nsThebesRegion.h"
#include "nsScriptableRegion.h"
#include "nsDeviceContext.h"
@ -62,59 +61,30 @@ NS_IMPL_ISUPPORTS0(GfxInitialization)
}
NS_GENERIC_FACTORY_CONSTRUCTOR(nsThebesFontEnumerator)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsThebesRegion)
static nsresult
nsScriptableRegionConstructor(nsISupports *aOuter, REFNSIID aIID, void **aResult)
{
nsresult rv;
nsIScriptableRegion *inst = nsnull;
if ( !aResult )
{
rv = NS_ERROR_NULL_POINTER;
return rv;
if (!aResult) {
return NS_ERROR_NULL_POINTER;
}
*aResult = nsnull;
if (aOuter)
{
rv = NS_ERROR_NO_AGGREGATION;
return rv;
if (aOuter) {
return NS_ERROR_NO_AGGREGATION;
}
nsCOMPtr <nsIRegion> rgn = new nsThebesRegion();
nsCOMPtr<nsIScriptableRegion> scriptableRgn;
if (rgn != nsnull)
{
scriptableRgn = new nsScriptableRegion(rgn);
inst = scriptableRgn;
}
if (!inst)
{
rv = NS_ERROR_OUT_OF_MEMORY;
return rv;
}
NS_ADDREF(inst);
// release our variable above now that we have created our owning
// reference - we don't want this to go out of scope early!
scriptableRgn = nsnull;
rv = inst->QueryInterface(aIID, aResult);
NS_RELEASE(inst);
return rv;
nsCOMPtr<nsIScriptableRegion> scriptableRgn = new nsScriptableRegion();
return scriptableRgn->QueryInterface(aIID, aResult);
}
NS_GENERIC_FACTORY_CONSTRUCTOR(GfxInitialization)
NS_DEFINE_NAMED_CID(NS_FONT_ENUMERATOR_CID);
NS_DEFINE_NAMED_CID(NS_REGION_CID);
NS_DEFINE_NAMED_CID(NS_SCRIPTABLE_REGION_CID);
NS_DEFINE_NAMED_CID(NS_GFX_INITIALIZATION_CID);
static const mozilla::Module::CIDEntry kThebesCIDs[] = {
{ &kNS_FONT_ENUMERATOR_CID, false, NULL, nsThebesFontEnumeratorConstructor },
{ &kNS_REGION_CID, false, NULL, nsThebesRegionConstructor },
{ &kNS_SCRIPTABLE_REGION_CID, false, NULL, nsScriptableRegionConstructor },
{ &kNS_GFX_INITIALIZATION_CID, false, NULL, GfxInitializationConstructor },
{ NULL }
@ -122,7 +92,6 @@ static const mozilla::Module::CIDEntry kThebesCIDs[] = {
static const mozilla::Module::ContractIDEntry kThebesContracts[] = {
{ "@mozilla.org/gfx/fontenumerator;1", &kNS_FONT_ENUMERATOR_CID },
{ "@mozilla.org/gfx/region/nsThebes;1", &kNS_REGION_CID },
{ "@mozilla.org/gfx/region;1", &kNS_SCRIPTABLE_REGION_CID },
{ "@mozilla.org/gfx/init;1", &kNS_GFX_INITIALIZATION_CID },
{ NULL }

View File

@ -1,217 +0,0 @@
/* -*- Mode: C++; tab-width: 20; 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 mozilla.org code.
*
* The Initial Developer of the Original Code is
* mozilla.org.
* Portions created by the Initial Developer are Copyright (C) 2004
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Stuart Parmenter <pavlov@pavlov.net>
* Vladimir Vukicevic <vladimir@pobox.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 "nsThebesRegion.h"
NS_IMPL_ISUPPORTS1(nsThebesRegion, nsIRegion)
nsThebesRegion::nsThebesRegion()
{
NS_INIT_ISUPPORTS();
}
nsresult nsThebesRegion::Init (void)
{
mRegion.SetEmpty();
return NS_OK;
}
void nsThebesRegion::SetTo (const nsIRegion &aRegion)
{
const nsThebesRegion* pRegion = static_cast<const nsThebesRegion*>(&aRegion);
mRegion = pRegion->mRegion;
}
void nsThebesRegion::SetTo (PRInt32 aX, PRInt32 aY, PRInt32 aWidth, PRInt32 aHeight)
{
mRegion = nsIntRect (aX, aY, aWidth, aHeight);
}
void nsThebesRegion::Intersect (const nsIRegion &aRegion)
{
const nsThebesRegion* pRegion = static_cast<const nsThebesRegion*>(&aRegion);
mRegion.And (mRegion, pRegion->mRegion);
}
void nsThebesRegion::Intersect (PRInt32 aX, PRInt32 aY, PRInt32 aWidth, PRInt32 aHeight)
{
mRegion.And (mRegion, nsIntRect (aX, aY, aWidth, aHeight));
}
void nsThebesRegion::Union (const nsIRegion &aRegion)
{
const nsThebesRegion* pRegion = static_cast<const nsThebesRegion*>(&aRegion);
mRegion.Or (mRegion, pRegion->mRegion);
}
void nsThebesRegion::Union (PRInt32 aX, PRInt32 aY, PRInt32 aWidth, PRInt32 aHeight)
{
mRegion.Or (mRegion, nsIntRect (aX, aY, aWidth, aHeight));
}
void nsThebesRegion::Subtract (const nsIRegion &aRegion)
{
const nsThebesRegion* pRegion = static_cast<const nsThebesRegion*>(&aRegion);
mRegion.Sub (mRegion, pRegion->mRegion);
}
void nsThebesRegion::Subtract (PRInt32 aX, PRInt32 aY, PRInt32 aWidth, PRInt32 aHeight)
{
mRegion.Sub (mRegion, nsIntRect (aX, aY, aWidth, aHeight));
}
PRBool nsThebesRegion::IsEmpty (void)
{
return mRegion.IsEmpty ();
}
PRBool nsThebesRegion::IsEqual (const nsIRegion &aRegion)
{
const nsThebesRegion* pRegion = static_cast<const nsThebesRegion*>(&aRegion);
return mRegion.IsEqual (pRegion->mRegion);
}
void nsThebesRegion::GetBoundingBox (PRInt32 *aX, PRInt32 *aY, PRInt32 *aWidth, PRInt32 *aHeight)
{
nsIntRect BoundRect;
BoundRect = mRegion.GetBounds();
*aX = BoundRect.x;
*aY = BoundRect.y;
*aWidth = BoundRect.width;
*aHeight = BoundRect.height;
}
void nsThebesRegion::Offset (PRInt32 aXOffset, PRInt32 aYOffset)
{
mRegion.MoveBy (aXOffset, aYOffset);
}
PRBool nsThebesRegion::ContainsRect (PRInt32 aX, PRInt32 aY, PRInt32 aWidth, PRInt32 aHeight)
{
nsIntRegion TmpRegion;
TmpRegion.And (mRegion, nsIntRect (aX, aY, aWidth, aHeight));
return (!TmpRegion.IsEmpty ());
}
NS_IMETHODIMP
nsThebesRegion::GetRects (nsRegionRectSet **aRects)
{
if (!aRects)
return NS_ERROR_NULL_POINTER;
nsRegionRectSet* pRegionSet = *aRects;
PRUint32 NumRects = mRegion.GetNumRects ();
if (pRegionSet == nsnull) // Not yet allocated
{
PRUint8* pBuf = new PRUint8 [sizeof (nsRegionRectSet) + NumRects * sizeof (nsRegionRect)];
pRegionSet = reinterpret_cast<nsRegionRectSet*>(pBuf);
pRegionSet->mRectsLen = NumRects + 1;
} else // Already allocated in previous call
{
if (NumRects > pRegionSet->mRectsLen) // passed array is not big enough - reallocate it.
{
delete [] reinterpret_cast<PRUint8*>(pRegionSet);
PRUint8* pBuf = new PRUint8 [sizeof (nsRegionRectSet) + NumRects * sizeof (nsRegionRect)];
pRegionSet = reinterpret_cast<nsRegionRectSet*>(pBuf);
pRegionSet->mRectsLen = NumRects + 1;
}
}
pRegionSet->mNumRects = NumRects;
*aRects = pRegionSet;
nsIntRegionRectIterator ri (mRegion);
nsRegionRect* pDest = &pRegionSet->mRects [0];
const nsIntRect* pSrc;
while ((pSrc = ri.Next ()))
{
pDest->x = pSrc->x;
pDest->y = pSrc->y;
pDest->width = pSrc->width;
pDest->height = pSrc->height;
pDest++;
}
return NS_OK;
}
NS_IMETHODIMP
nsThebesRegion::FreeRects (nsRegionRectSet *aRects)
{
if (!aRects)
return NS_ERROR_NULL_POINTER;
delete [] reinterpret_cast<PRUint8*>(aRects);
return NS_OK;
}
nsIntRegion nsThebesRegion::GetUnderlyingRegion () const
{
return mRegion;
}
NS_IMETHODIMP
nsThebesRegion::GetNativeRegion (void *&aRegion) const
{
aRegion = 0;
return NS_OK;
}
NS_IMETHODIMP
nsThebesRegion::GetRegionComplexity (nsRegionComplexity &aComplexity) const
{
switch (mRegion.GetNumRects ())
{
case 0: aComplexity = eRegionComplexity_empty; break;
case 1: aComplexity = eRegionComplexity_rect; break;
default: aComplexity = eRegionComplexity_complex; break;
}
return NS_OK;
}
NS_IMETHODIMP
nsThebesRegion::GetNumRects (PRUint32 *aRects) const
{
*aRects = mRegion.GetNumRects ();
return NS_OK;
}

View File

@ -1,79 +0,0 @@
/* -*- Mode: C++; tab-width: 20; 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 mozilla.org code.
*
* The Initial Developer of the Original Code is
* mozilla.org.
* Portions created by the Initial Developer are Copyright (C) 2004
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Stuart Parmenter <pavlov@pavlov.net>
* Vladimir Vukicevic <vladimir@pobox.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 ***** */
#ifndef NSTHEBESREGION__H__
#define NSTHEBESREGION__H__
#include "nsIRegion.h"
#include "nsRegion.h"
class nsThebesRegion : public nsIRegion
{
public:
nsThebesRegion();
NS_DECL_ISUPPORTS
// nsIRegion
nsresult Init (void);
void SetTo (const nsIRegion &aRegion);
void SetTo (PRInt32 aX, PRInt32 aY, PRInt32 aWidth, PRInt32 aHeight);
void Intersect (const nsIRegion &aRegion);
void Intersect (PRInt32 aX, PRInt32 aY, PRInt32 aWidth, PRInt32 aHeight);
void Union (const nsIRegion &aRegion);
void Union (PRInt32 aX, PRInt32 aY, PRInt32 aWidth, PRInt32 aHeight);
void Subtract (const nsIRegion &aRegion);
void Subtract (PRInt32 aX, PRInt32 aY, PRInt32 aWidth, PRInt32 aHeight);
PRBool IsEmpty (void);
PRBool IsEqual (const nsIRegion &aRegion);
void GetBoundingBox (PRInt32 *aX, PRInt32 *aY, PRInt32 *aWidth, PRInt32 *aHeight);
void Offset (PRInt32 aXOffset, PRInt32 aYOffset);
PRBool ContainsRect (PRInt32 aX, PRInt32 aY, PRInt32 aWidth, PRInt32 aHeight);
NS_IMETHOD GetRects (nsRegionRectSet **aRects);
NS_IMETHOD FreeRects (nsRegionRectSet *aRects);
nsIntRegion GetUnderlyingRegion() const;
NS_IMETHOD GetNativeRegion (void *&aRegion) const;
NS_IMETHOD GetRegionComplexity (nsRegionComplexity &aComplexity) const;
NS_IMETHOD GetNumRects (PRUint32 *aRects) const;
protected:
nsIntRegion mRegion;
};
#endif

View File

@ -133,7 +133,6 @@
#include "nsIAttribute.h"
#include "nsIGlobalHistory2.h"
#include "nsDisplayList.h"
#include "nsIRegion.h"
#include "nsRegion.h"
#include "nsRenderingContext.h"

View File

@ -42,7 +42,6 @@
#include "nsGUIEvent.h"
#include "nsIComponentManager.h"
#include "nsGfxCIID.h"
#include "nsIRegion.h"
#include "nsIInterfaceRequestor.h"
//mmptemp

View File

@ -60,8 +60,6 @@
#include "nsPresContext.h"
#include "nsEventStateManager.h"
static NS_DEFINE_IID(kRegionCID, NS_REGION_CID);
PRTime gFirstPaintTimestamp = 0; // Timestamp of the first paint event
/**
XXX TODO XXX
@ -165,28 +163,6 @@ nsViewManager::~nsViewManager()
NS_IMPL_ISUPPORTS1(nsViewManager, nsIViewManager)
nsresult
nsViewManager::CreateRegion(nsIRegion* *result)
{
nsresult rv;
if (!mRegionFactory) {
mRegionFactory = do_GetClassObject(kRegionCID, &rv);
if (NS_FAILED(rv)) {
*result = nsnull;
return rv;
}
}
nsIRegion* region = nsnull;
rv = CallCreateInstance(mRegionFactory.get(), &region);
if (NS_SUCCEEDED(rv)) {
rv = region->Init();
*result = region;
}
return rv;
}
// We don't hold a reference to the presentation context because it
// holds a reference to us.
NS_IMETHODIMP nsViewManager::Init(nsDeviceContext* aContext)

View File

@ -45,7 +45,6 @@
#include "prinrval.h"
#include "nsVoidArray.h"
#include "nsThreadUtils.h"
#include "nsIRegion.h"
#include "nsView.h"
#include "nsIViewObserver.h"
#include "nsDeviceContext.h"
@ -248,8 +247,6 @@ public: // NOT in nsIViewManager, so private to the view module
nsEventStatus HandleEvent(nsView* aView, nsGUIEvent* aEvent);
nsresult CreateRegion(nsIRegion* *result);
PRBool IsRefreshEnabled() { return RootViewManager()->mUpdateBatchCnt == 0; }
// Call this when you need to let the viewmanager know that it now has
@ -269,7 +266,6 @@ private:
// visible again.
nsSize mDelayedResize;
nsCOMPtr<nsIFactory> mRegionFactory;
nsView *mRootView;
// mRootViewManager is a strong ref unless it equals |this|. It's
// never null (if we have no ancestors, it will be |this|).

View File

@ -57,7 +57,6 @@
#include "nsCRT.h"
#include "nsFontMetrics.h"
#include "nsIRegion.h"
#include "nsIRollupListener.h"
#include "nsIViewManager.h"
#include "nsIInterfaceRequestor.h"

View File

@ -62,7 +62,6 @@
#include "nsIContent.h"
#include "nsIFrame.h"
#include "nsIView.h"
#include "nsIRegion.h"
#include "gfxASurface.h"
#include "gfxContext.h"

View File

@ -96,7 +96,6 @@ using namespace QtMobility;
#include "nsToolkit.h"
#include "nsIdleService.h"
#include "nsRenderingContext.h"
#include "nsIRegion.h"
#include "nsIRollupListener.h"
#include "nsIMenuRollup.h"
#include "nsWidgetsCID.h"

View File

@ -127,7 +127,6 @@
#include "nsIFile.h"
#include "nsIRollupListener.h"
#include "nsIMenuRollup.h"
#include "nsIRegion.h"
#include "nsIServiceManager.h"
#include "nsIClipboard.h"
#include "nsIMM32Handler.h"

View File

@ -58,7 +58,6 @@ using mozilla::plugins::PluginInstanceParent;
#include "nsWindowGfx.h"
#include <windows.h>
#include "nsIRegion.h"
#include "gfxImageSurface.h"
#include "gfxWindowsSurface.h"
#include "gfxWindowsPlatform.h"

View File

@ -43,7 +43,6 @@
#include "nsITransferable.h"
#include "nsISupportsArray.h"
#include "nsSize.h"
#include "nsIRegion.h"
#include "nsXPCOM.h"
#include "nsISupportsPrimitives.h"
#include "nsCOMPtr.h"
@ -520,11 +519,7 @@ nsBaseDragService::DrawDrag(nsIDOMNode* aDOMNode,
// otherwise, just draw the node
nsIntRegion clipRegion;
if (aRegion) {
nsCOMPtr<nsIRegion> clipIRegion;
aRegion->GetRegion(getter_AddRefs(clipIRegion));
if (clipIRegion) {
clipRegion = clipIRegion->GetUnderlyingRegion();
}
aRegion->GetRegion(&clipRegion);
}
nsIntPoint pnt(aScreenDragRect->x, aScreenDragRect->y);