miext/damage: take care of the coordinate mode in damagePolyPoint

The mode (CoordModeOrigin or CoordModePrevious) was not taken into
account when computing the box. The result was a bad drawing of
points in some situations (on my hardware/software configuration,
calling XDrawString followed by XDrawPoints in the mode
CoordModePrevious).

Signed-off-by: Cedric Roux <sed@free.fr>
Signed-off-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
Cedric Roux 2018-09-12 19:14:18 +02:00 committed by Eric Anholt
parent 734b2d6907
commit bc36594e0e

View File

@ -829,16 +829,36 @@ damagePolyPoint(DrawablePtr pDrawable,
/* this could be slow if the points were spread out */ /* this could be slow if the points were spread out */
while (--nptTmp) { if (mode == CoordModePrevious) {
pptTmp++; int x = box.x1;
if (box.x1 > pptTmp->x) int y = box.y1;
box.x1 = pptTmp->x;
else if (box.x2 < pptTmp->x) while (--nptTmp) {
box.x2 = pptTmp->x; pptTmp++;
if (box.y1 > pptTmp->y) x += pptTmp->x;
box.y1 = pptTmp->y; y += pptTmp->y;
else if (box.y2 < pptTmp->y) if (box.x1 > x)
box.y2 = pptTmp->y; box.x1 = x;
else if (box.x2 < x)
box.x2 = x;
if (box.y1 > y)
box.y1 = y;
else if (box.y2 < y)
box.y2 = y;
}
}
else {
while (--nptTmp) {
pptTmp++;
if (box.x1 > pptTmp->x)
box.x1 = pptTmp->x;
else if (box.x2 < pptTmp->x)
box.x2 = pptTmp->x;
if (box.y1 > pptTmp->y)
box.y1 = pptTmp->y;
else if (box.y2 < pptTmp->y)
box.y2 = pptTmp->y;
}
} }
box.x2++; box.x2++;