@@ -63,11 +63,9 @@ uxa_fill_spans(DrawablePtr pDrawable, GCPtr pGC, int n,
uxa_screen_t *uxa_screen = uxa_get_screen(screen);
RegionPtr pClip = fbGetCompositeClip(pGC);
PixmapPtr dst_pixmap, src_pixmap = NULL;
- BoxPtr pextent, pbox;
+ BoxPtr pbox;
int nbox;
- int extentX1, extentX2, extentY1, extentY2;
- int x1, x2, y, fullX1, fullX2, fullY1;
- int partX1, partX2;
+ int x1, x2, y;
int off_x, off_y;
xRenderColor color;
PictFormatPtr format;
@@ -142,62 +140,35 @@ uxa_fill_spans(DrawablePtr pDrawable, GCPtr pGC, int n,
goto solid;
}
- pextent = REGION_EXTENTS(pGC->screen, pClip);
- extentX1 = pextent->x1;
- extentY1 = pextent->y1;
- extentX2 = pextent->x2;
- extentY2 = pextent->y2;
while (n--) {
- fullX1 = ppt->x;
- fullY1 = ppt->y;
- fullX2 = fullX1 + (int)*pwidth;
+ x1 = ppt->x;
+ y = ppt->y;
+ x2 = x1 + (int)*pwidth;
ppt++;
pwidth++;
- if (fullY1 < extentY1 || extentY2 <= fullY1)
- continue;
+ nbox = REGION_NUM_RECTS(pClip);
+ pbox = REGION_RECTS(pClip);
+ while (nbox--) {
+ if (pbox->y1 > y || pbox->y2 <= y)
+ continue;
- if (fullX1 < extentX1)
- fullX1 = extentX1;
+ if (x1 < pbox->x1)
+ x1 = pbox->x1;
- if (fullX2 > extentX2)
- fullX2 = extentX2;
+ if (x2 > pbox->x2)
+ x2 = pbox->x2;
- if (fullX1 >= fullX2)
- continue;
+ if (x2 <= x1)
+ continue;
- nbox = REGION_NUM_RECTS(pClip);
- if (nbox == 1) {
uxa_screen->info->composite(dst_pixmap,
- 0, 0, 0, 0,
- fullX1 + off_x,
- fullY1 + off_y,
- fullX2 - fullX1, 1);
- } else {
- pbox = REGION_RECTS(pClip);
- while (nbox--) {
- if (pbox->y1 > fullY1)
- break;
-
- if (pbox->y1 <= fullY1) {
- partX1 = pbox->x1;
- if (partX1 < fullX1)
- partX1 = fullX1;
-
- partX2 = pbox->x2;
- if (partX2 > fullX2)
- partX2 = fullX2;
-
- if (partX2 > partX1) {
- uxa_screen->info->composite(dst_pixmap,
- 0, 0, 0, 0,
- partX1 + off_x,
- fullY1 + off_y,
- partX2 - partX1, 1);
- }
- }
- pbox++;
- }
+ 0, 0,
+ 0, 0,
+ x1 + off_x, y + off_y,
+ x2 - x1, 1);
+
+ pbox++;
}
}
@@ -240,10 +211,8 @@ solid:
continue;
(*uxa_screen->info->solid) (dst_pixmap,
- x1 + off_x,
- y + off_y,
- x2 + off_x,
- y + 1 + off_y);
+ x1 + off_x, y + off_y,
+ x2 + off_x, y + 1 + off_y);
pbox++;
}
}