From 7d354131624f52284be2a638b38ecb5b0bc245fc Mon Sep 17 00:00:00 2001
From: Francois Jacques <francoisj@macadamian.com>
Date: Sat, 8 Jul 2000 18:34:39 +0000
Subject: [PATCH] Updated X11DRV_DIB_GetDIBits to properly handle bottom-up
 DIBs manipulation. Corrected XGetSubImage arguments order.

---
 graphics/x11drv/dib.c | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/graphics/x11drv/dib.c b/graphics/x11drv/dib.c
index 943247d71f5..e6281b3972c 100644
--- a/graphics/x11drv/dib.c
+++ b/graphics/x11drv/dib.c
@@ -2701,9 +2701,9 @@ int X11DRV_DIB_GetImageBits( const X11DRV_DIB_IMAGEBITS_DESCR *descr )
             return lines;
         }                                                                           }
 
-    XGetSubImage( display, descr->drawable, descr->xDest, descr->yDest,
-                  descr->width, descr->height, AllPlanes, ZPixmap,
-                  bmpImage, descr->xSrc, descr->ySrc );
+    XGetSubImage( display, descr->drawable, descr->xSrc, descr->ySrc,
+                  descr->width, lines, AllPlanes, ZPixmap,
+                  bmpImage, descr->xDest, descr->yDest );
 
       /* Transfer the pixels */
     switch(descr->infoBpp)
@@ -3013,13 +3013,21 @@ INT X11DRV_DIB_GetDIBits(
   descr.depth     = bmp->bitmap.bmBitsPixel;
   descr.drawable  = (Pixmap)bmp->physBitmap;
   descr.gc        = BITMAP_GC(bmp);
-  descr.xSrc      = 0;
-  descr.ySrc      = startscan;
-  descr.xDest     = 0;
-  descr.yDest     = 0;
   descr.width     = bmp->bitmap.bmWidth;
   descr.height    = bmp->bitmap.bmHeight;
   descr.colorMap  = info->bmiColors;
+  descr.xDest     = 0;
+  descr.yDest     = 0;
+  descr.xSrc      = 0;
+  
+  if (descr.lines > 0)
+  {
+     descr.ySrc = descr.height - startscan - 1;
+  }
+  else
+  {
+     descr.ySrc = startscan;
+  }
 
   if (dib)
     descr.useShm = (dib->shminfo.shmid != -1);
-- 
GitLab