More efficient layers clipping

svn path=/trunk/netsurf/; revision=5945
This commit is contained in:
Chris Young 2008-12-29 01:18:53 +00:00
parent e56aabc998
commit 96c314750f
2 changed files with 16 additions and 8 deletions

View File

@ -124,6 +124,7 @@ struct gui_globals
struct Layer_Info *layerinfo;
APTR areabuf;
APTR tmprasbuf;
struct Rectangle rect;
#ifdef NS_AMIGA_CAIRO
cairo_surface_t *surface;
cairo_t *cr;

View File

@ -244,21 +244,28 @@ bool ami_fill(int x0, int y0, int x1, int y1, colour c)
bool ami_clip(int x0, int y0, int x1, int y1)
{
struct Region *reg = NULL;
struct Rectangle rect;
if(currp->Layer)
{
reg = NewRegion();
reg = InstallClipRegion(currp->Layer,NULL);
rect.MinX = x0;
rect.MinY = y0;
rect.MaxX = x1-1;
rect.MaxY = y1-1;
if(!reg)
{
reg = NewRegion();
}
else
{
ClearRectRegion(reg,&glob.rect);
}
OrRectRegion(reg,&rect);
glob.rect.MinX = x0;
glob.rect.MinY = y0;
glob.rect.MaxX = x1-1;
glob.rect.MaxY = y1-1;
OrRectRegion(reg,&glob.rect);
reg = InstallClipRegion(currp->Layer,reg);
if(reg) DisposeRegion(reg);
}