(!1502) mi: drop unused miCopyArea()
With removal of Xwin's NATIVEGDI (back a decade ago), the last caller is
gone, and it also doesn't seem to be called by any driver.
Fixes: 8465ee788f
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
			
			
This commit is contained in:
		
							parent
							
								
									c8bd612f75
								
							
						
					
					
						commit
						5d19a2b907
					
				
							
								
								
									
										11
									
								
								mi/mi.h
								
								
								
								
							
							
						
						
									
										11
									
								
								mi/mi.h
								
								
								
								
							| 
						 | 
				
			
			@ -80,17 +80,6 @@ extern _X_EXPORT void miPolyArc(DrawablePtr /*pDraw */ ,
 | 
			
		|||
 | 
			
		||||
/* mibitblt.c */
 | 
			
		||||
 | 
			
		||||
extern _X_EXPORT RegionPtr miCopyArea(DrawablePtr /*pSrcDrawable */ ,
 | 
			
		||||
                                      DrawablePtr /*pDstDrawable */ ,
 | 
			
		||||
                                      GCPtr /*pGC */ ,
 | 
			
		||||
                                      int /*xIn */ ,
 | 
			
		||||
                                      int /*yIn */ ,
 | 
			
		||||
                                      int /*widthSrc */ ,
 | 
			
		||||
                                      int /*heightSrc */ ,
 | 
			
		||||
                                      int /*xOut */ ,
 | 
			
		||||
                                      int       /*yOut */
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
extern _X_EXPORT void miGetImage(DrawablePtr /*pDraw */ ,
 | 
			
		||||
                                 int /*sx */ ,
 | 
			
		||||
                                 int /*sy */ ,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										188
									
								
								mi/mibitblt.c
								
								
								
								
							
							
						
						
									
										188
									
								
								mi/mibitblt.c
								
								
								
								
							| 
						 | 
				
			
			@ -66,194 +66,6 @@ SOFTWARE.
 | 
			
		|||
#define ffs __builtin_ffs
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* MICOPYAREA -- public entry for the CopyArea request
 | 
			
		||||
 * For each rectangle in the source region
 | 
			
		||||
 *     get the pixels with GetSpans
 | 
			
		||||
 *     set them in the destination with SetSpans
 | 
			
		||||
 * We let SetSpans worry about clipping to the destination.
 | 
			
		||||
 */
 | 
			
		||||
_X_COLD RegionPtr
 | 
			
		||||
miCopyArea(DrawablePtr pSrcDrawable,
 | 
			
		||||
           DrawablePtr pDstDrawable,
 | 
			
		||||
           GCPtr pGC,
 | 
			
		||||
           int xIn, int yIn, int widthSrc, int heightSrc, int xOut, int yOut)
 | 
			
		||||
{
 | 
			
		||||
    DDXPointPtr ppt, pptFirst;
 | 
			
		||||
    unsigned int *pwidthFirst, *pwidth, *pbits;
 | 
			
		||||
    BoxRec srcBox, *prect;
 | 
			
		||||
 | 
			
		||||
    /* may be a new region, or just a copy */
 | 
			
		||||
    RegionPtr prgnSrcClip;
 | 
			
		||||
 | 
			
		||||
    /* non-0 if we've created a src clip */
 | 
			
		||||
    RegionPtr prgnExposed;
 | 
			
		||||
    int realSrcClip = 0;
 | 
			
		||||
    int srcx, srcy, dstx, dsty, i, j, y, width, height, xMin, xMax, yMin, yMax;
 | 
			
		||||
    unsigned int *ordering;
 | 
			
		||||
    int numRects;
 | 
			
		||||
    BoxPtr boxes;
 | 
			
		||||
 | 
			
		||||
    srcx = xIn + pSrcDrawable->x;
 | 
			
		||||
    srcy = yIn + pSrcDrawable->y;
 | 
			
		||||
 | 
			
		||||
    /* If the destination isn't realized, this is easy */
 | 
			
		||||
    if (pDstDrawable->type == DRAWABLE_WINDOW &&
 | 
			
		||||
        !((WindowPtr) pDstDrawable)->realized)
 | 
			
		||||
        return NULL;
 | 
			
		||||
 | 
			
		||||
    /* clip the source */
 | 
			
		||||
    if (pSrcDrawable->type == DRAWABLE_PIXMAP) {
 | 
			
		||||
        BoxRec box;
 | 
			
		||||
 | 
			
		||||
        box.x1 = pSrcDrawable->x;
 | 
			
		||||
        box.y1 = pSrcDrawable->y;
 | 
			
		||||
        box.x2 = pSrcDrawable->x + (int) pSrcDrawable->width;
 | 
			
		||||
        box.y2 = pSrcDrawable->y + (int) pSrcDrawable->height;
 | 
			
		||||
 | 
			
		||||
        prgnSrcClip = RegionCreate(&box, 1);
 | 
			
		||||
        realSrcClip = 1;
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        if (pGC->subWindowMode == IncludeInferiors) {
 | 
			
		||||
            prgnSrcClip = NotClippedByChildren((WindowPtr) pSrcDrawable);
 | 
			
		||||
            realSrcClip = 1;
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
            prgnSrcClip = &((WindowPtr) pSrcDrawable)->clipList;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* If the src drawable is a window, we need to translate the srcBox so
 | 
			
		||||
     * that we can compare it with the window's clip region later on. */
 | 
			
		||||
    srcBox.x1 = srcx;
 | 
			
		||||
    srcBox.y1 = srcy;
 | 
			
		||||
    srcBox.x2 = srcx + widthSrc;
 | 
			
		||||
    srcBox.y2 = srcy + heightSrc;
 | 
			
		||||
 | 
			
		||||
    dstx = xOut;
 | 
			
		||||
    dsty = yOut;
 | 
			
		||||
    if (pGC->miTranslate) {
 | 
			
		||||
        dstx += pDstDrawable->x;
 | 
			
		||||
        dsty += pDstDrawable->y;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pptFirst = ppt = xallocarray(heightSrc, sizeof(DDXPointRec));
 | 
			
		||||
    pwidthFirst = pwidth = xallocarray(heightSrc, sizeof(unsigned int));
 | 
			
		||||
    numRects = RegionNumRects(prgnSrcClip);
 | 
			
		||||
    boxes = RegionRects(prgnSrcClip);
 | 
			
		||||
    ordering = xallocarray(numRects, sizeof(unsigned int));
 | 
			
		||||
    if (!pptFirst || !pwidthFirst || !ordering) {
 | 
			
		||||
        free(ordering);
 | 
			
		||||
        free(pwidthFirst);
 | 
			
		||||
        free(pptFirst);
 | 
			
		||||
        if (realSrcClip)
 | 
			
		||||
            RegionDestroy(prgnSrcClip);
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* If not the same drawable then order of move doesn't matter.
 | 
			
		||||
       Following assumes that boxes are sorted from top
 | 
			
		||||
       to bottom and left to right.
 | 
			
		||||
     */
 | 
			
		||||
    if ((pSrcDrawable != pDstDrawable) &&
 | 
			
		||||
        ((pGC->subWindowMode != IncludeInferiors) ||
 | 
			
		||||
         (pSrcDrawable->type == DRAWABLE_PIXMAP) ||
 | 
			
		||||
         (pDstDrawable->type == DRAWABLE_PIXMAP)))
 | 
			
		||||
        for (i = 0; i < numRects; i++)
 | 
			
		||||
            ordering[i] = i;
 | 
			
		||||
    else {                      /* within same drawable, must sequence moves carefully! */
 | 
			
		||||
        if (dsty <= srcBox.y1) {        /* Scroll up or stationary vertical.
 | 
			
		||||
                                           Vertical order OK */
 | 
			
		||||
            if (dstx <= srcBox.x1)      /* Scroll left or stationary horizontal.
 | 
			
		||||
                                           Horizontal order OK as well */
 | 
			
		||||
                for (i = 0; i < numRects; i++)
 | 
			
		||||
                    ordering[i] = i;
 | 
			
		||||
            else {              /* scroll right. must reverse horizontal banding of rects. */
 | 
			
		||||
                for (i = 0, j = 1, xMax = 0; i < numRects; j = i + 1, xMax = i) {
 | 
			
		||||
                    /* find extent of current horizontal band */
 | 
			
		||||
                    y = boxes[i].y1;    /* band has this y coordinate */
 | 
			
		||||
                    while ((j < numRects) && (boxes[j].y1 == y))
 | 
			
		||||
                        j++;
 | 
			
		||||
                    /* reverse the horizontal band in the output ordering */
 | 
			
		||||
                    for (j--; j >= xMax; j--, i++)
 | 
			
		||||
                        ordering[i] = j;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else {                  /* Scroll down. Must reverse vertical banding. */
 | 
			
		||||
            if (dstx < srcBox.x1) {     /* Scroll left. Horizontal order OK. */
 | 
			
		||||
                for (i = numRects - 1, j = i - 1, yMin = i, yMax = 0;
 | 
			
		||||
                     i >= 0; j = i - 1, yMin = i) {
 | 
			
		||||
                    /* find extent of current horizontal band */
 | 
			
		||||
                    y = boxes[i].y1;    /* band has this y coordinate */
 | 
			
		||||
                    while ((j >= 0) && (boxes[j].y1 == y))
 | 
			
		||||
                        j--;
 | 
			
		||||
                    /* reverse the horizontal band in the output ordering */
 | 
			
		||||
                    for (j++; j <= yMin; j++, i--, yMax++)
 | 
			
		||||
                        ordering[yMax] = j;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else                /* Scroll right or horizontal stationary.
 | 
			
		||||
                                   Reverse horizontal order as well (if stationary, horizontal
 | 
			
		||||
                                   order can be swapped without penalty and this is faster
 | 
			
		||||
                                   to compute). */
 | 
			
		||||
                for (i = 0, j = numRects - 1; i < numRects; i++, j--)
 | 
			
		||||
                    ordering[i] = j;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    for (i = 0; i < numRects; i++) {
 | 
			
		||||
        prect = &boxes[ordering[i]];
 | 
			
		||||
        xMin = max(prect->x1, srcBox.x1);
 | 
			
		||||
        xMax = min(prect->x2, srcBox.x2);
 | 
			
		||||
        yMin = max(prect->y1, srcBox.y1);
 | 
			
		||||
        yMax = min(prect->y2, srcBox.y2);
 | 
			
		||||
        /* is there anything visible here? */
 | 
			
		||||
        if (xMax <= xMin || yMax <= yMin)
 | 
			
		||||
            continue;
 | 
			
		||||
 | 
			
		||||
        ppt = pptFirst;
 | 
			
		||||
        pwidth = pwidthFirst;
 | 
			
		||||
        y = yMin;
 | 
			
		||||
        height = yMax - yMin;
 | 
			
		||||
        width = xMax - xMin;
 | 
			
		||||
 | 
			
		||||
        for (j = 0; j < height; j++) {
 | 
			
		||||
            /* We must untranslate before calling GetSpans */
 | 
			
		||||
            ppt->x = xMin;
 | 
			
		||||
            ppt++->y = y++;
 | 
			
		||||
            *pwidth++ = width;
 | 
			
		||||
        }
 | 
			
		||||
        pbits = xallocarray(height, PixmapBytePad(width, pSrcDrawable->depth));
 | 
			
		||||
        if (pbits) {
 | 
			
		||||
            (*pSrcDrawable->pScreen->GetSpans) (pSrcDrawable, width, pptFirst,
 | 
			
		||||
                                                (int *) pwidthFirst, height,
 | 
			
		||||
                                                (char *) pbits);
 | 
			
		||||
            ppt = pptFirst;
 | 
			
		||||
            pwidth = pwidthFirst;
 | 
			
		||||
            xMin -= (srcx - dstx);
 | 
			
		||||
            y = yMin - (srcy - dsty);
 | 
			
		||||
            for (j = 0; j < height; j++) {
 | 
			
		||||
                ppt->x = xMin;
 | 
			
		||||
                ppt++->y = y++;
 | 
			
		||||
                *pwidth++ = width;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            (*pGC->ops->SetSpans) (pDstDrawable, pGC, (char *) pbits, pptFirst,
 | 
			
		||||
                                   (int *) pwidthFirst, height, TRUE);
 | 
			
		||||
            free(pbits);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    prgnExposed = miHandleExposures(pSrcDrawable, pDstDrawable, pGC, xIn, yIn,
 | 
			
		||||
                                    widthSrc, heightSrc, xOut, yOut);
 | 
			
		||||
    if (realSrcClip)
 | 
			
		||||
        RegionDestroy(prgnSrcClip);
 | 
			
		||||
 | 
			
		||||
    free(ordering);
 | 
			
		||||
    free(pwidthFirst);
 | 
			
		||||
    free(pptFirst);
 | 
			
		||||
    return prgnExposed;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* MIGETPLANE -- gets a bitmap representing one plane of pDraw
 | 
			
		||||
 * A helper used for CopyPlane and XY format GetImage
 | 
			
		||||
 * No clever strategy here, we grab a scanline at a time, pull out the
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue