diff options
Diffstat (limited to 'uxa/uxa-accel.c')
-rw-r--r-- | uxa/uxa-accel.c | 79 |
1 files changed, 24 insertions, 55 deletions
diff --git a/uxa/uxa-accel.c b/uxa/uxa-accel.c index 31c37e85..8f6da635 100644 --- a/uxa/uxa-accel.c +++ b/uxa/uxa-accel.c @@ -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++; } } |