diff options
author | marha <marha@users.sourceforge.net> | 2011-04-28 11:14:32 +0000 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2011-04-28 11:14:32 +0000 |
commit | 1840c5631682e0a69ed11487a23a43d45f2d15e1 (patch) | |
tree | fe954636044c0057b9f08e76d19489493ff09745 /xorg-server/fb/fbtrap.c | |
parent | 2ab09dc03e4ecc726ee7b5528306b0fe3e5b1837 (diff) | |
parent | 57a879849643e79d9674198a3a77c59532fb79b4 (diff) | |
download | vcxsrv-1840c5631682e0a69ed11487a23a43d45f2d15e1.tar.gz vcxsrv-1840c5631682e0a69ed11487a23a43d45f2d15e1.tar.bz2 vcxsrv-1840c5631682e0a69ed11487a23a43d45f2d15e1.zip |
svn merge ^/branches/released .
Diffstat (limited to 'xorg-server/fb/fbtrap.c')
-rw-r--r-- | xorg-server/fb/fbtrap.c | 63 |
1 files changed, 34 insertions, 29 deletions
diff --git a/xorg-server/fb/fbtrap.c b/xorg-server/fb/fbtrap.c index 2f23d8564..9c2bcd516 100644 --- a/xorg-server/fb/fbtrap.c +++ b/xorg-server/fb/fbtrap.c @@ -29,6 +29,7 @@ #include "picturestr.h"
#include "mipict.h"
#include "fbpict.h"
+#include "damage.h"
void
fbAddTraps (PicturePtr pPicture,
@@ -37,13 +38,14 @@ fbAddTraps (PicturePtr pPicture, int ntrap,
xTrap *traps)
{
- int image_xoff, image_yoff;
- pixman_image_t *image = image_from_pict (pPicture, FALSE, &image_xoff, &image_yoff);
+ pixman_image_t *image;
+ int dst_xoff, dst_yoff;
- if (!image)
+ if (!(image = image_from_pict (pPicture, FALSE, &dst_xoff, &dst_yoff)))
return;
- pixman_add_traps (image, x_off, y_off, ntrap, (pixman_trap_t *)traps);
+ pixman_add_traps (image, x_off + dst_xoff, y_off + dst_yoff,
+ ntrap, (pixman_trap_t *)traps);
free_pixman_pict (pPicture, image);
}
@@ -54,13 +56,15 @@ fbRasterizeTrapezoid (PicturePtr pPicture, int x_off,
int y_off)
{
- int mask_xoff, mask_yoff;
- pixman_image_t *image = image_from_pict (pPicture, FALSE, &mask_xoff, &mask_yoff);
+ pixman_image_t *image;
+ int dst_xoff, dst_yoff;
- if (!image)
+ if (!(image = image_from_pict (pPicture, FALSE, &dst_xoff, &dst_yoff)))
return;
- pixman_rasterize_trapezoid (image, (pixman_trapezoid_t *)trap, x_off, y_off);
+ pixman_rasterize_trapezoid (image, (pixman_trapezoid_t *)trap,
+ x_off + dst_xoff,
+ y_off + dst_yoff);
free_pixman_pict (pPicture, image);
}
@@ -72,14 +76,15 @@ fbAddTriangles (PicturePtr pPicture, int ntri,
xTriangle *tris)
{
- int image_xoff, image_yoff;
- pixman_image_t *image =
- image_from_pict (pPicture, FALSE, &image_xoff, &image_yoff);
+ pixman_image_t *image;
+ int dst_xoff, dst_yoff;
- if (!image)
+ if (!(image = image_from_pict (pPicture, FALSE, &dst_xoff, &dst_yoff)))
return;
- pixman_add_triangles (image, x_off, y_off, ntri, (pixman_triangle_t *)tris);
+ pixman_add_triangles (image,
+ dst_xoff + x_off, dst_yoff + y_off,
+ ntri, (pixman_triangle_t *)tris);
free_pixman_pict (pPicture, image);
}
@@ -100,8 +105,6 @@ fbShapes (CompositeShapesFunc composite, PictFormatPtr maskFormat,
int16_t xSrc,
int16_t ySrc,
- int16_t xDst,
- int16_t yDst,
int nshapes,
int shape_size,
const uint8_t * shapes)
@@ -110,6 +113,8 @@ fbShapes (CompositeShapesFunc composite, int src_xoff, src_yoff;
int dst_xoff, dst_yoff;
+ miCompositeSourceValidate (pSrc);
+
src = image_from_pict (pSrc, FALSE, &src_xoff, &src_yoff);
dst = image_from_pict (pDst, TRUE, &dst_xoff, &dst_yoff);
@@ -117,6 +122,8 @@ fbShapes (CompositeShapesFunc composite, {
pixman_format_code_t format;
+ DamageRegionAppend (pDst->pDrawable, pDst->pCompositeClip);
+
if (!maskFormat)
{
int i;
@@ -131,8 +138,8 @@ fbShapes (CompositeShapesFunc composite, composite (op, src, dst, format,
xSrc + src_xoff,
ySrc + src_yoff,
- xDst + dst_xoff,
- yDst + dst_yoff,
+ dst_xoff,
+ dst_yoff,
1, shapes + i * shape_size);
}
}
@@ -157,10 +164,12 @@ fbShapes (CompositeShapesFunc composite, composite (op, src, dst, format,
xSrc + src_xoff,
ySrc + src_yoff,
- xDst + dst_xoff,
- yDst + dst_yoff,
+ dst_xoff,
+ dst_yoff,
nshapes, shapes);
}
+
+ DamageRegionProcessPending (pDst->pDrawable);
}
free_pixman_pict (pSrc, src);
@@ -177,14 +186,12 @@ fbTrapezoids (CARD8 op, int ntrap,
xTrapezoid *traps)
{
- int xDst, yDst;
-
- xDst = traps[0].left.p1.x >> 16;
- yDst = traps[0].left.p1.y >> 16;
+ xSrc -= (traps[0].left.p1.x >> 16);
+ ySrc -= (traps[0].left.p1.y >> 16);
fbShapes ((CompositeShapesFunc)pixman_composite_trapezoids,
op, pSrc, pDst, maskFormat,
- xSrc, ySrc, xDst, yDst,
+ xSrc, ySrc,
ntrap, sizeof (xTrapezoid), (const uint8_t *)traps);
}
@@ -198,13 +205,11 @@ fbTriangles (CARD8 op, int ntris,
xTriangle *tris)
{
- int xDst, yDst;
-
- xDst = tris[0].p1.x >> 16;
- yDst = tris[0].p1.y >> 16;
+ xSrc -= (tris[0].p1.x >> 16);
+ ySrc -= (tris[0].p1.y >> 16);
fbShapes ((CompositeShapesFunc)pixman_composite_triangles,
op, pSrc, pDst, maskFormat,
- xSrc, ySrc, xDst, yDst,
+ xSrc, ySrc,
ntris, sizeof (xTriangle), (const uint8_t *)tris);
}
|