diff --git a/mi/mi.h b/mi/mi.h index 1e0d5a603..30aa48766 100644 --- a/mi/mi.h +++ b/mi/mi.h @@ -80,16 +80,6 @@ extern _X_EXPORT void miPolyArc(DrawablePtr /*pDraw */ , /* mibitblt.c */ -extern _X_EXPORT void miGetImage(DrawablePtr /*pDraw */ , - int /*sx */ , - int /*sy */ , - int /*w */ , - int /*h */ , - unsigned int /*format */ , - unsigned long /*planeMask */ , - char * /*pdstLine */ - ); - extern _X_EXPORT void miPutImage(DrawablePtr /*pDraw */ , GCPtr /*pGC */ , int /*depth */ , diff --git a/mi/mibitblt.c b/mi/mibitblt.c index dd2cfcb8b..21678d78b 100644 --- a/mi/mibitblt.c +++ b/mi/mibitblt.c @@ -66,111 +66,6 @@ SOFTWARE. #define ffs __builtin_ffs #endif -/* 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 - * bits and then stuff them in a 1 bit deep map. - */ -/* - * This should be replaced with something more general. mi shouldn't have to - * care about such things as scanline padding et alia. - */ -_X_COLD static MiBits * -miGetPlane(DrawablePtr pDraw, int planeNum, /* number of the bitPlane */ - int sx, int sy, int w, int h, MiBits * result) -{ - int i, j, k, width, bitsPerPixel, widthInBytes; - DDXPointRec pt = { 0, 0 }; - MiBits pixel; - MiBits bit; - unsigned char *pCharsOut = NULL; - -#if BITMAP_SCANLINE_UNIT == 8 -#define OUT_TYPE unsigned char -#endif -#if BITMAP_SCANLINE_UNIT == 16 -#define OUT_TYPE CARD16 -#endif -#if BITMAP_SCANLINE_UNIT == 32 -#define OUT_TYPE CARD32 -#endif -#if BITMAP_SCANLINE_UNIT == 64 -#define OUT_TYPE CARD64 -#endif - - OUT_TYPE *pOut; - int delta = 0; - - sx += pDraw->x; - sy += pDraw->y; - widthInBytes = BitmapBytePad(w); - if (!result) - result = calloc(h, widthInBytes); - if (!result) - return NULL; - bitsPerPixel = pDraw->bitsPerPixel; - pOut = (OUT_TYPE *) result; - if (bitsPerPixel == 1) { - pCharsOut = (unsigned char *) result; - width = w; - } - else { - delta = (widthInBytes / (BITMAP_SCANLINE_UNIT / 8)) - - (w / BITMAP_SCANLINE_UNIT); - width = 1; -#if IMAGE_BYTE_ORDER == MSBFirst - planeNum += (32 - bitsPerPixel); -#endif - } - pt.y = sy; - for (i = h; --i >= 0; pt.y++) { - pt.x = sx; - if (bitsPerPixel == 1) { - (*pDraw->pScreen->GetSpans) (pDraw, width, &pt, &width, 1, - (char *) pCharsOut); - pCharsOut += widthInBytes; - } - else { - k = 0; - for (j = w; --j >= 0; pt.x++) { - /* Fetch the next pixel */ - (*pDraw->pScreen->GetSpans) (pDraw, width, &pt, &width, 1, - (char *) &pixel); - /* - * Now get the bit and insert into a bitmap in XY format. - */ - bit = (pixel >> planeNum) & 1; -#if 0 - /* XXX assuming bit order == byte order */ -#if BITMAP_BIT_ORDER == LSBFirst - bit <<= k; -#else - bit <<= ((BITMAP_SCANLINE_UNIT - 1) - k); -#endif -#else - /* XXX assuming byte order == LSBFirst */ - if (screenInfo.bitmapBitOrder == LSBFirst) - bit <<= k; - else - bit <<= ((screenInfo.bitmapScanlineUnit - 1) - - (k % screenInfo.bitmapScanlineUnit)) + - ((k / screenInfo.bitmapScanlineUnit) * - screenInfo.bitmapScanlineUnit); -#endif - *pOut |= (OUT_TYPE) bit; - k++; - if (k == BITMAP_SCANLINE_UNIT) { - pOut++; - k = 0; - } - } - pOut += delta; - } - } - return result; - -} - /* MIOPQSTIPDRAWABLE -- use pbits as an opaque stipple for pDraw. * Drawing through the clip mask we SetSpans() the bits into a * bitmap and stipple those bits onto the destination drawable by doing a @@ -317,92 +212,6 @@ miOpqStipDrawable(DrawablePtr pDraw, GCPtr pGC, RegionPtr prgnSrc, } -/* MIGETIMAGE -- public entry for the GetImage Request - * We're getting the image into a memory buffer. While we have to use GetSpans - * to read a line from the device (since we don't know what that looks like), - * we can just write into the destination buffer - * - * two different strategies are used, depending on whether we're getting the - * image in Z format or XY format - * Z format: - * Line at a time, GetSpans a line into the destination buffer, then if the - * planemask is not all ones, we do a SetSpans into a temporary buffer (to get - * bits turned off) and then another GetSpans to get stuff back (because - * pixmaps are opaque, and we are passed in the memory to write into). This is - * pretty ugly and slow but works. Life is hard. - * XY format: - * get the single plane specified in planemask - */ -_X_COLD void -miGetImage(DrawablePtr pDraw, int sx, int sy, int w, int h, - unsigned int format, unsigned long planeMask, char *pDst) -{ - unsigned char depth; - int i, linelength, width, srcx, srcy; - DDXPointRec pt = { 0, 0 }; - PixmapPtr pPixmap = NULL; - GCPtr pGC = NULL; - - depth = pDraw->depth; - if (format == ZPixmap) { - if ((((1LL << depth) - 1) & planeMask) != (1LL << depth) - 1) { - ChangeGCVal gcv; - xPoint xpt; - - pGC = GetScratchGC(depth, pDraw->pScreen); - if (!pGC) - return; - pPixmap = (*pDraw->pScreen->CreatePixmap) - (pDraw->pScreen, w, 1, depth, CREATE_PIXMAP_USAGE_SCRATCH); - if (!pPixmap) { - FreeScratchGC(pGC); - return; - } - /* - * Clear the pixmap before doing anything else - */ - ValidateGC((DrawablePtr) pPixmap, pGC); - xpt.x = xpt.y = 0; - width = w; - (*pGC->ops->FillSpans) ((DrawablePtr) pPixmap, pGC, 1, &xpt, &width, - TRUE); - - /* alu is already GXCopy */ - gcv.val = (XID) planeMask; - ChangeGC(NullClient, pGC, GCPlaneMask, &gcv); - ValidateGC((DrawablePtr) pPixmap, pGC); - } - - linelength = PixmapBytePad(w, depth); - srcx = sx + pDraw->x; - srcy = sy + pDraw->y; - for (i = 0; i < h; i++) { - pt.x = srcx; - pt.y = srcy + i; - width = w; - (*pDraw->pScreen->GetSpans) (pDraw, w, &pt, &width, 1, pDst); - if (pPixmap) { - pt.x = 0; - pt.y = 0; - width = w; - (*pGC->ops->SetSpans) ((DrawablePtr) pPixmap, pGC, pDst, - &pt, &width, 1, TRUE); - (*pDraw->pScreen->GetSpans) ((DrawablePtr) pPixmap, w, &pt, - &width, 1, pDst); - } - pDst += linelength; - } - if (pPixmap) { - (*pGC->pScreen->DestroyPixmap) (pPixmap); - FreeScratchGC(pGC); - } - } - else { - (void) miGetPlane(pDraw, ffs(planeMask) - 1, sx, sy, w, h, - (MiBits *) pDst); - } -} - /* MIPUTIMAGE -- public entry for the PutImage request * Here we benefit from knowing the format of the bits pointed to by pImage, * even if we don't know how pDraw represents them.