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
1 changed files with 30 additions and 10 deletions

View File

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