Don't pass regions to pixman_image_composite() anymore.
This commit is contained in:
parent
5cbec267b6
commit
54e023cec0
|
@ -626,7 +626,7 @@ XEXT_INC='-I$(top_srcdir)/Xext'
|
||||||
XEXT_LIB='$(top_builddir)/Xext/libXext.la'
|
XEXT_LIB='$(top_builddir)/Xext/libXext.la'
|
||||||
XEXTXORG_LIB='$(top_builddir)/Xext/libXextbuiltin.la'
|
XEXTXORG_LIB='$(top_builddir)/Xext/libXextbuiltin.la'
|
||||||
|
|
||||||
PIXMAN="[pixman >= 0.9.0]"
|
PIXMAN="[pixman >= 0.9.1]"
|
||||||
|
|
||||||
dnl Core modules for most extensions, et al.
|
dnl Core modules for most extensions, et al.
|
||||||
REQUIRED_MODULES="[randrproto >= 1.2] renderproto [fixesproto >= 4.0] [damageproto >= 1.1] xcmiscproto xextproto [xproto >= 7.0.9] xtrans [scrnsaverproto >= 1.1] bigreqsproto resourceproto fontsproto [inputproto >= 1.4.2] [kbproto >= 1.0.3]"
|
REQUIRED_MODULES="[randrproto >= 1.2] renderproto [fixesproto >= 4.0] [damageproto >= 1.1] xcmiscproto xextproto [xproto >= 7.0.9] xtrans [scrnsaverproto >= 1.1] bigreqsproto resourceproto fontsproto [inputproto >= 1.4.2] [kbproto >= 1.0.3]"
|
||||||
|
|
276
fb/fbpict.c
276
fb/fbpict.c
|
@ -38,122 +38,6 @@
|
||||||
#include "fbpict.h"
|
#include "fbpict.h"
|
||||||
#include "fbmmx.h"
|
#include "fbmmx.h"
|
||||||
|
|
||||||
static pixman_image_t *
|
|
||||||
create_solid_fill_image (PicturePtr pict)
|
|
||||||
{
|
|
||||||
PictSolidFill *solid = &pict->pSourcePict->solidFill;
|
|
||||||
pixman_color_t color;
|
|
||||||
CARD32 a, r, g, b;
|
|
||||||
|
|
||||||
a = (solid->color & 0xff000000) >> 24;
|
|
||||||
r = (solid->color & 0x00ff0000) >> 16;
|
|
||||||
g = (solid->color & 0x0000ff00) >> 8;
|
|
||||||
b = (solid->color & 0x000000ff) >> 0;
|
|
||||||
|
|
||||||
color.alpha = (a << 8) | a;
|
|
||||||
color.red = (r << 8) | r;
|
|
||||||
color.green = (g << 8) | g;
|
|
||||||
color.blue = (b << 8) | b;
|
|
||||||
|
|
||||||
return pixman_image_create_solid_fill (&color);
|
|
||||||
}
|
|
||||||
|
|
||||||
static pixman_image_t *
|
|
||||||
create_linear_gradient_image (PictGradient *gradient)
|
|
||||||
{
|
|
||||||
PictLinearGradient *linear = (PictLinearGradient *)gradient;
|
|
||||||
pixman_point_fixed_t p1;
|
|
||||||
pixman_point_fixed_t p2;
|
|
||||||
|
|
||||||
p1.x = linear->p1.x;
|
|
||||||
p1.y = linear->p1.y;
|
|
||||||
p2.x = linear->p2.x;
|
|
||||||
p2.y = linear->p2.y;
|
|
||||||
|
|
||||||
return pixman_image_create_linear_gradient (
|
|
||||||
&p1, &p2, (pixman_gradient_stop_t *)gradient->stops, gradient->nstops);
|
|
||||||
}
|
|
||||||
|
|
||||||
static pixman_image_t *
|
|
||||||
create_radial_gradient_image (PictGradient *gradient)
|
|
||||||
{
|
|
||||||
PictRadialGradient *radial = (PictRadialGradient *)gradient;
|
|
||||||
pixman_point_fixed_t c1;
|
|
||||||
pixman_point_fixed_t c2;
|
|
||||||
|
|
||||||
c1.x = radial->c1.x;
|
|
||||||
c1.y = radial->c1.y;
|
|
||||||
c2.x = radial->c2.x;
|
|
||||||
c2.y = radial->c2.y;
|
|
||||||
|
|
||||||
return pixman_image_create_radial_gradient (
|
|
||||||
&c1, &c2, radial->c1.radius,
|
|
||||||
radial->c2.radius,
|
|
||||||
(pixman_gradient_stop_t *)gradient->stops, gradient->nstops);
|
|
||||||
}
|
|
||||||
|
|
||||||
static pixman_image_t *
|
|
||||||
create_conical_gradient_image (PictGradient *gradient)
|
|
||||||
{
|
|
||||||
PictConicalGradient *conical = (PictConicalGradient *)gradient;
|
|
||||||
pixman_point_fixed_t center;
|
|
||||||
|
|
||||||
center.x = conical->center.x;
|
|
||||||
center.y = conical->center.y;
|
|
||||||
|
|
||||||
return pixman_image_create_conical_gradient (
|
|
||||||
¢er, conical->angle, (pixman_gradient_stop_t *)gradient->stops,
|
|
||||||
gradient->nstops);
|
|
||||||
}
|
|
||||||
|
|
||||||
static pixman_image_t *
|
|
||||||
create_bits_picture (PicturePtr pict,
|
|
||||||
Bool has_clip)
|
|
||||||
{
|
|
||||||
FbBits *bits;
|
|
||||||
FbStride stride;
|
|
||||||
int bpp, xoff, yoff;
|
|
||||||
pixman_image_t *image;
|
|
||||||
|
|
||||||
fbGetDrawable (pict->pDrawable, bits, stride, bpp, xoff, yoff);
|
|
||||||
|
|
||||||
bits += yoff * stride + xoff;
|
|
||||||
|
|
||||||
image = pixman_image_create_bits (
|
|
||||||
pict->format,
|
|
||||||
pict->pDrawable->width, pict->pDrawable->height,
|
|
||||||
(uint32_t *)bits, stride * sizeof (FbStride));
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef FB_ACCESS_WRAPPER
|
|
||||||
#if FB_SHIFT==5
|
|
||||||
|
|
||||||
pixman_image_set_accessors (image,
|
|
||||||
(pixman_read_memory_func_t)wfbReadMemory,
|
|
||||||
(pixman_write_memory_func_t)wfbWriteMemory);
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
#error The pixman library only works when FbBits is 32 bits wide
|
|
||||||
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* pCompositeClip is undefined for source pictures, so
|
|
||||||
* only set the clip region for pictures with drawables
|
|
||||||
*/
|
|
||||||
if (has_clip)
|
|
||||||
pixman_image_set_clip_region (image, pict->pCompositeClip);
|
|
||||||
|
|
||||||
/* Indexed table */
|
|
||||||
if (pict->pFormat->index.devPrivate)
|
|
||||||
pixman_image_set_indexed (image, pict->pFormat->index.devPrivate);
|
|
||||||
|
|
||||||
fbFinishAccess (pict->pDrawable);
|
|
||||||
|
|
||||||
return image;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define mod(a,b) ((b) == 1 ? 0 : (a) >= 0 ? (a) % (b) : (b) - (-a) % (b))
|
#define mod(a,b) ((b) == 1 ? 0 : (a) >= 0 ? (a) % (b) : (b) - (-a) % (b))
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -274,7 +158,6 @@ fbComposite (CARD8 op,
|
||||||
CARD16 width,
|
CARD16 width,
|
||||||
CARD16 height)
|
CARD16 height)
|
||||||
{
|
{
|
||||||
pixman_region16_t region;
|
|
||||||
pixman_image_t *src, *mask, *dest;
|
pixman_image_t *src, *mask, *dest;
|
||||||
|
|
||||||
xDst += pDst->pDrawable->x;
|
xDst += pDst->pDrawable->x;
|
||||||
|
@ -290,9 +173,9 @@ fbComposite (CARD8 op,
|
||||||
yMask += pMask->pDrawable->y;
|
yMask += pMask->pDrawable->y;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!miComputeCompositeRegion (®ion, pSrc, pMask, pDst, xSrc, ySrc,
|
miCompositeSourceValidate (pSrc, xSrc, ySrc, width, height);
|
||||||
xMask, yMask, xDst, yDst, width, height))
|
if (pMask)
|
||||||
return;
|
miCompositeSourceValidate (pMask, xMask, yMask, width, height);
|
||||||
|
|
||||||
src = image_from_pict (pSrc, TRUE);
|
src = image_from_pict (pSrc, TRUE);
|
||||||
mask = image_from_pict (pMask, TRUE);
|
mask = image_from_pict (pMask, TRUE);
|
||||||
|
@ -302,10 +185,9 @@ fbComposite (CARD8 op,
|
||||||
{
|
{
|
||||||
pixman_image_composite (op, src, mask, dest,
|
pixman_image_composite (op, src, mask, dest,
|
||||||
xSrc, ySrc, xMask, yMask, xDst, yDst,
|
xSrc, ySrc, xMask, yMask, xDst, yDst,
|
||||||
width, height, ®ion);
|
width, height);
|
||||||
}
|
|
||||||
|
|
||||||
pixman_region_fini (®ion);
|
}
|
||||||
|
|
||||||
if (src)
|
if (src)
|
||||||
pixman_image_unref (src);
|
pixman_image_unref (src);
|
||||||
|
@ -336,27 +218,125 @@ fbCompositeGeneral (CARD8 op,
|
||||||
|
|
||||||
#endif /* RENDER */
|
#endif /* RENDER */
|
||||||
|
|
||||||
Bool
|
static pixman_image_t *
|
||||||
fbPictureInit (ScreenPtr pScreen, PictFormatPtr formats, int nformats)
|
create_solid_fill_image (PicturePtr pict)
|
||||||
{
|
{
|
||||||
|
PictSolidFill *solid = &pict->pSourcePict->solidFill;
|
||||||
|
pixman_color_t color;
|
||||||
|
CARD32 a, r, g, b;
|
||||||
|
|
||||||
#ifdef RENDER
|
a = (solid->color & 0xff000000) >> 24;
|
||||||
|
r = (solid->color & 0x00ff0000) >> 16;
|
||||||
|
g = (solid->color & 0x0000ff00) >> 8;
|
||||||
|
b = (solid->color & 0x000000ff) >> 0;
|
||||||
|
|
||||||
PictureScreenPtr ps;
|
color.alpha = (a << 8) | a;
|
||||||
|
color.red = (r << 8) | r;
|
||||||
|
color.green = (g << 8) | g;
|
||||||
|
color.blue = (b << 8) | b;
|
||||||
|
|
||||||
if (!miPictureInit (pScreen, formats, nformats))
|
return pixman_image_create_solid_fill (&color);
|
||||||
return FALSE;
|
}
|
||||||
ps = GetPictureScreen(pScreen);
|
|
||||||
ps->Composite = fbComposite;
|
|
||||||
ps->Glyphs = miGlyphs;
|
|
||||||
ps->CompositeRects = miCompositeRects;
|
|
||||||
ps->RasterizeTrapezoid = fbRasterizeTrapezoid;
|
|
||||||
ps->AddTraps = fbAddTraps;
|
|
||||||
ps->AddTriangles = fbAddTriangles;
|
|
||||||
|
|
||||||
#endif /* RENDER */
|
static pixman_image_t *
|
||||||
|
create_linear_gradient_image (PictGradient *gradient)
|
||||||
|
{
|
||||||
|
PictLinearGradient *linear = (PictLinearGradient *)gradient;
|
||||||
|
pixman_point_fixed_t p1;
|
||||||
|
pixman_point_fixed_t p2;
|
||||||
|
|
||||||
return TRUE;
|
p1.x = linear->p1.x;
|
||||||
|
p1.y = linear->p1.y;
|
||||||
|
p2.x = linear->p2.x;
|
||||||
|
p2.y = linear->p2.y;
|
||||||
|
|
||||||
|
return pixman_image_create_linear_gradient (
|
||||||
|
&p1, &p2, (pixman_gradient_stop_t *)gradient->stops, gradient->nstops);
|
||||||
|
}
|
||||||
|
|
||||||
|
static pixman_image_t *
|
||||||
|
create_radial_gradient_image (PictGradient *gradient)
|
||||||
|
{
|
||||||
|
PictRadialGradient *radial = (PictRadialGradient *)gradient;
|
||||||
|
pixman_point_fixed_t c1;
|
||||||
|
pixman_point_fixed_t c2;
|
||||||
|
|
||||||
|
c1.x = radial->c1.x;
|
||||||
|
c1.y = radial->c1.y;
|
||||||
|
c2.x = radial->c2.x;
|
||||||
|
c2.y = radial->c2.y;
|
||||||
|
|
||||||
|
return pixman_image_create_radial_gradient (
|
||||||
|
&c1, &c2, radial->c1.radius,
|
||||||
|
radial->c2.radius,
|
||||||
|
(pixman_gradient_stop_t *)gradient->stops, gradient->nstops);
|
||||||
|
}
|
||||||
|
|
||||||
|
static pixman_image_t *
|
||||||
|
create_conical_gradient_image (PictGradient *gradient)
|
||||||
|
{
|
||||||
|
PictConicalGradient *conical = (PictConicalGradient *)gradient;
|
||||||
|
pixman_point_fixed_t center;
|
||||||
|
|
||||||
|
center.x = conical->center.x;
|
||||||
|
center.y = conical->center.y;
|
||||||
|
|
||||||
|
return pixman_image_create_conical_gradient (
|
||||||
|
¢er, conical->angle, (pixman_gradient_stop_t *)gradient->stops,
|
||||||
|
gradient->nstops);
|
||||||
|
}
|
||||||
|
|
||||||
|
static pixman_image_t *
|
||||||
|
create_bits_picture (PicturePtr pict,
|
||||||
|
Bool has_clip)
|
||||||
|
{
|
||||||
|
FbBits *bits;
|
||||||
|
FbStride stride;
|
||||||
|
int bpp, xoff, yoff;
|
||||||
|
pixman_image_t *image;
|
||||||
|
|
||||||
|
fbGetDrawable (pict->pDrawable, bits, stride, bpp, xoff, yoff);
|
||||||
|
|
||||||
|
bits += yoff * stride + xoff;
|
||||||
|
|
||||||
|
image = pixman_image_create_bits (
|
||||||
|
pict->format,
|
||||||
|
pict->pDrawable->width, pict->pDrawable->height,
|
||||||
|
(uint32_t *)bits, stride * sizeof (FbStride));
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef FB_ACCESS_WRAPPER
|
||||||
|
#if FB_SHIFT==5
|
||||||
|
|
||||||
|
pixman_image_set_accessors (image,
|
||||||
|
(pixman_read_memory_func_t)wfbReadMemory,
|
||||||
|
(pixman_write_memory_func_t)wfbWriteMemory);
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#error The pixman library only works when FbBits is 32 bits wide
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* pCompositeClip is undefined for source pictures, so
|
||||||
|
* only set the clip region for pictures with drawables
|
||||||
|
*/
|
||||||
|
if (has_clip)
|
||||||
|
{
|
||||||
|
if (pict->clientClipType != CT_NONE)
|
||||||
|
pixman_image_set_has_client_clip (image, TRUE);
|
||||||
|
|
||||||
|
pixman_image_set_clip_region (image, pict->pCompositeClip);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Indexed table */
|
||||||
|
if (pict->pFormat->index.devPrivate)
|
||||||
|
pixman_image_set_indexed (image, pict->pFormat->index.devPrivate);
|
||||||
|
|
||||||
|
fbFinishAccess (pict->pDrawable);
|
||||||
|
|
||||||
|
return image;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -466,8 +446,28 @@ image_from_pict (PicturePtr pict,
|
||||||
return image;
|
return image;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Bool
|
||||||
|
fbPictureInit (ScreenPtr pScreen, PictFormatPtr formats, int nformats)
|
||||||
|
{
|
||||||
|
|
||||||
|
#ifdef RENDER
|
||||||
|
|
||||||
|
PictureScreenPtr ps;
|
||||||
|
|
||||||
|
if (!miPictureInit (pScreen, formats, nformats))
|
||||||
|
return FALSE;
|
||||||
|
ps = GetPictureScreen(pScreen);
|
||||||
|
ps->Composite = fbComposite;
|
||||||
|
ps->Glyphs = miGlyphs;
|
||||||
|
ps->CompositeRects = miCompositeRects;
|
||||||
|
ps->RasterizeTrapezoid = fbRasterizeTrapezoid;
|
||||||
|
ps->AddTraps = fbAddTraps;
|
||||||
|
ps->AddTriangles = fbAddTriangles;
|
||||||
|
|
||||||
|
#endif /* RENDER */
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef USE_MMX
|
#ifdef USE_MMX
|
||||||
/* The CPU detection code needs to be in a file not compiled with
|
/* The CPU detection code needs to be in a file not compiled with
|
||||||
|
|
|
@ -266,17 +266,17 @@ miChangePictureFilter (PicturePtr pPicture,
|
||||||
|
|
||||||
#define BOUND(v) (INT16) ((v) < MINSHORT ? MINSHORT : (v) > MAXSHORT ? MAXSHORT : (v))
|
#define BOUND(v) (INT16) ((v) < MINSHORT ? MINSHORT : (v) > MAXSHORT ? MAXSHORT : (v))
|
||||||
|
|
||||||
static __inline Bool
|
static inline pixman_bool_t
|
||||||
miClipPictureReg (RegionPtr pRegion,
|
miClipPictureReg (pixman_region16_t * pRegion,
|
||||||
RegionPtr pClip,
|
pixman_region16_t * pClip,
|
||||||
int dx,
|
int dx,
|
||||||
int dy)
|
int dy)
|
||||||
{
|
{
|
||||||
if (REGION_NUM_RECTS(pRegion) == 1 &&
|
if (pixman_region_n_rects(pRegion) == 1 &&
|
||||||
REGION_NUM_RECTS(pClip) == 1)
|
pixman_region_n_rects(pClip) == 1)
|
||||||
{
|
{
|
||||||
BoxPtr pRbox = REGION_RECTS(pRegion);
|
pixman_box16_t * pRbox = pixman_region_rectangles(pRegion, NULL);
|
||||||
BoxPtr pCbox = REGION_RECTS(pClip);
|
pixman_box16_t * pCbox = pixman_region_rectangles(pClip, NULL);
|
||||||
int v;
|
int v;
|
||||||
|
|
||||||
if (pRbox->x1 < (v = pCbox->x1 + dx))
|
if (pRbox->x1 < (v = pCbox->x1 + dx))
|
||||||
|
@ -290,21 +290,21 @@ miClipPictureReg (RegionPtr pRegion,
|
||||||
if (pRbox->x1 >= pRbox->x2 ||
|
if (pRbox->x1 >= pRbox->x2 ||
|
||||||
pRbox->y1 >= pRbox->y2)
|
pRbox->y1 >= pRbox->y2)
|
||||||
{
|
{
|
||||||
REGION_EMPTY(pScreen, pRegion);
|
pixman_region_init (pRegion);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!REGION_NOTEMPTY (pScreen, pClip))
|
else if (!pixman_region_not_empty (pClip))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (dx || dy)
|
if (dx || dy)
|
||||||
REGION_TRANSLATE(pScreen, pRegion, -dx, -dy);
|
pixman_region_translate (pRegion, -dx, -dy);
|
||||||
if (!REGION_INTERSECT (pScreen, pRegion, pRegion, pClip))
|
if (!pixman_region_intersect (pRegion, pRegion, pClip))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (dx || dy)
|
if (dx || dy)
|
||||||
REGION_TRANSLATE(pScreen, pRegion, dx, dy);
|
pixman_region_translate(pRegion, dx, dy);
|
||||||
}
|
}
|
||||||
return REGION_NOTEMPTY(pScreen, pRegion);
|
return pixman_region_not_empty(pRegion);
|
||||||
}
|
}
|
||||||
|
|
||||||
static __inline Bool
|
static __inline Bool
|
||||||
|
@ -320,13 +320,13 @@ miClipPictureSrc (RegionPtr pRegion,
|
||||||
{
|
{
|
||||||
if (pPicture->clientClipType != CT_NONE)
|
if (pPicture->clientClipType != CT_NONE)
|
||||||
{
|
{
|
||||||
REGION_TRANSLATE(pScreen, pRegion,
|
pixman_region_translate ( pRegion,
|
||||||
dx - pPicture->clipOrigin.x,
|
dx - pPicture->clipOrigin.x,
|
||||||
dy - pPicture->clipOrigin.y);
|
dy - pPicture->clipOrigin.y);
|
||||||
if (!REGION_INTERSECT (pScreen, pRegion, pRegion,
|
if (!REGION_INTERSECT (pScreen, pRegion, pRegion,
|
||||||
(RegionPtr) pPicture->clientClip))
|
(RegionPtr) pPicture->pCompositeClip)) // clientClip))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
REGION_TRANSLATE(pScreen, pRegion,
|
pixman_region_translate ( pRegion,
|
||||||
- (dx - pPicture->clipOrigin.x),
|
- (dx - pPicture->clipOrigin.x),
|
||||||
- (dy - pPicture->clipOrigin.y));
|
- (dy - pPicture->clipOrigin.y));
|
||||||
}
|
}
|
||||||
|
@ -341,7 +341,7 @@ miClipPictureSrc (RegionPtr pRegion,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
void
|
||||||
miCompositeSourceValidate (PicturePtr pPicture,
|
miCompositeSourceValidate (PicturePtr pPicture,
|
||||||
INT16 x,
|
INT16 x,
|
||||||
INT16 y,
|
INT16 y,
|
||||||
|
@ -417,6 +417,7 @@ miComputeCompositeRegion (RegionPtr pRegion,
|
||||||
CARD16 width,
|
CARD16 width,
|
||||||
CARD16 height)
|
CARD16 height)
|
||||||
{
|
{
|
||||||
|
|
||||||
int v;
|
int v;
|
||||||
|
|
||||||
pRegion->extents.x1 = xDst;
|
pRegion->extents.x1 = xDst;
|
||||||
|
@ -430,13 +431,13 @@ miComputeCompositeRegion (RegionPtr pRegion,
|
||||||
if (pRegion->extents.x1 >= pRegion->extents.x2 ||
|
if (pRegion->extents.x1 >= pRegion->extents.x2 ||
|
||||||
pRegion->extents.y1 >= pRegion->extents.y2)
|
pRegion->extents.y1 >= pRegion->extents.y2)
|
||||||
{
|
{
|
||||||
REGION_EMPTY (pDst->pDrawable->pScreen, pRegion);
|
pixman_region_init (pRegion);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
/* clip against dst */
|
/* clip against dst */
|
||||||
if (!miClipPictureReg (pRegion, pDst->pCompositeClip, 0, 0))
|
if (!miClipPictureReg (pRegion, pDst->pCompositeClip, 0, 0))
|
||||||
{
|
{
|
||||||
REGION_UNINIT (pScreen, pRegion);
|
pixman_region_fini (pRegion);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
if (pDst->alphaMap)
|
if (pDst->alphaMap)
|
||||||
|
@ -445,14 +446,14 @@ miComputeCompositeRegion (RegionPtr pRegion,
|
||||||
-pDst->alphaOrigin.x,
|
-pDst->alphaOrigin.x,
|
||||||
-pDst->alphaOrigin.y))
|
-pDst->alphaOrigin.y))
|
||||||
{
|
{
|
||||||
REGION_UNINIT (pScreen, pRegion);
|
pixman_region_fini (pRegion);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* clip against src */
|
/* clip against src */
|
||||||
if (!miClipPictureSrc (pRegion, pSrc, xDst - xSrc, yDst - ySrc))
|
if (!miClipPictureSrc (pRegion, pSrc, xDst - xSrc, yDst - ySrc))
|
||||||
{
|
{
|
||||||
REGION_UNINIT (pScreen, pRegion);
|
pixman_region_fini (pRegion);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
if (pSrc->alphaMap)
|
if (pSrc->alphaMap)
|
||||||
|
@ -461,7 +462,7 @@ miComputeCompositeRegion (RegionPtr pRegion,
|
||||||
xDst - (xSrc + pSrc->alphaOrigin.x),
|
xDst - (xSrc + pSrc->alphaOrigin.x),
|
||||||
yDst - (ySrc + pSrc->alphaOrigin.y)))
|
yDst - (ySrc + pSrc->alphaOrigin.y)))
|
||||||
{
|
{
|
||||||
REGION_UNINIT (pScreen, pRegion);
|
pixman_region_fini (pRegion);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -470,7 +471,7 @@ miComputeCompositeRegion (RegionPtr pRegion,
|
||||||
{
|
{
|
||||||
if (!miClipPictureSrc (pRegion, pMask, xDst - xMask, yDst - yMask))
|
if (!miClipPictureSrc (pRegion, pMask, xDst - xMask, yDst - yMask))
|
||||||
{
|
{
|
||||||
REGION_UNINIT (pScreen, pRegion);
|
pixman_region_fini (pRegion);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
if (pMask->alphaMap)
|
if (pMask->alphaMap)
|
||||||
|
@ -479,14 +480,17 @@ miComputeCompositeRegion (RegionPtr pRegion,
|
||||||
xDst - (xMask + pMask->alphaOrigin.x),
|
xDst - (xMask + pMask->alphaOrigin.x),
|
||||||
yDst - (yMask + pMask->alphaOrigin.y)))
|
yDst - (yMask + pMask->alphaOrigin.y)))
|
||||||
{
|
{
|
||||||
REGION_UNINIT (pScreen, pRegion);
|
pixman_region_fini (pRegion);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
miCompositeSourceValidate (pSrc, xSrc, ySrc, width, height);
|
miCompositeSourceValidate (pSrc, xSrc, ySrc, width, height);
|
||||||
if (pMask)
|
if (pMask)
|
||||||
miCompositeSourceValidate (pMask, xMask, yMask, width, height);
|
miCompositeSourceValidate (pMask, xMask, yMask, width, height);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -88,6 +88,12 @@ miClipPicture (RegionPtr pRegion,
|
||||||
INT16 xPict,
|
INT16 xPict,
|
||||||
INT16 yPict);
|
INT16 yPict);
|
||||||
|
|
||||||
|
void
|
||||||
|
miCompositeSourceValidate (PicturePtr pPicture,
|
||||||
|
INT16 x,
|
||||||
|
INT16 y,
|
||||||
|
CARD16 width,
|
||||||
|
CARD16 height);
|
||||||
Bool
|
Bool
|
||||||
miComputeCompositeRegion (RegionPtr pRegion,
|
miComputeCompositeRegion (RegionPtr pRegion,
|
||||||
PicturePtr pSrc,
|
PicturePtr pSrc,
|
||||||
|
|
|
@ -661,6 +661,10 @@ AddTraps (PicturePtr pPicture,
|
||||||
int ntraps,
|
int ntraps,
|
||||||
xTrap *traps);
|
xTrap *traps);
|
||||||
|
|
||||||
|
pixman_image_t *
|
||||||
|
PixmanImageFromPicture (PicturePtr pPict,
|
||||||
|
Bool hasClip);
|
||||||
|
|
||||||
PicturePtr
|
PicturePtr
|
||||||
CreateSolidPicture (Picture pid,
|
CreateSolidPicture (Picture pid,
|
||||||
xRenderColor *color,
|
xRenderColor *color,
|
||||||
|
|
Loading…
Reference in New Issue