Alexandre Julliard : gdi32: Update the coordinates in convert_bitmapinfo to reflect the position in the destination bitmap .

Alexandre Julliard julliard at winehq.org
Thu Aug 4 12:22:08 CDT 2011


Module: wine
Branch: master
Commit: c309883a702bcb48db818e889cf122172a240fad
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=c309883a702bcb48db818e889cf122172a240fad

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Wed Aug  3 20:26:44 2011 +0200

gdi32: Update the coordinates in convert_bitmapinfo to reflect the position in the destination bitmap.

---

 dlls/gdi32/bitblt.c      |    2 +-
 dlls/gdi32/dib.c         |    4 ++--
 dlls/gdi32/dibdrv/dc.c   |   10 +++++++---
 dlls/gdi32/gdi_private.h |    2 +-
 4 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/dlls/gdi32/bitblt.c b/dlls/gdi32/bitblt.c
index c32302b..e8e2c88 100644
--- a/dlls/gdi32/bitblt.c
+++ b/dlls/gdi32/bitblt.c
@@ -212,7 +212,7 @@ BOOL nulldrv_StretchBlt( PHYSDEV dst_dev, struct bitblt_coords *dst,
         dst_info->bmiHeader.biWidth = src->visrect.right - src->visrect.left;
         if ((ptr = HeapAlloc( GetProcessHeap(), 0, get_dib_image_size( dst_info ))))
         {
-            err = convert_bitmapinfo( src_info, bits.ptr, &src->visrect, dst_info, ptr );
+            err = convert_bitmapinfo( src_info, bits.ptr, src, dst_info, ptr );
             if (bits.free) bits.free( &bits );
             bits.ptr = ptr;
             bits.is_copy = TRUE;
diff --git a/dlls/gdi32/dib.c b/dlls/gdi32/dib.c
index 4fc3f3a..d09d351 100644
--- a/dlls/gdi32/dib.c
+++ b/dlls/gdi32/dib.c
@@ -615,7 +615,7 @@ INT WINAPI SetDIBits( HDC hdc, HBITMAP hbitmap, UINT startscan,
         ptr = HeapAlloc( GetProcessHeap(), 0, get_dib_image_size( dst_info ));
         if (ptr)
         {
-            err = convert_bitmapinfo( src_info, src_bits.ptr, &src.visrect, dst_info, ptr );
+            err = convert_bitmapinfo( src_info, src_bits.ptr, &src, dst_info, ptr );
             {
                 if (src_bits.free) src_bits.free( &src_bits );
                 src_bits.ptr = ptr;
@@ -1134,7 +1134,7 @@ INT WINAPI GetDIBits(
         else
             dst_info->bmiHeader.biHeight = -src.height;
 
-        convert_bitmapinfo( src_info, src_bits.ptr, &src.visrect, dst_info, bits );
+        convert_bitmapinfo( src_info, src_bits.ptr, &src, dst_info, bits );
         if (src_bits.free) src_bits.free( &src_bits );
     }
     else lines = abs(height);
diff --git a/dlls/gdi32/dibdrv/dc.c b/dlls/gdi32/dibdrv/dc.c
index 7e45772..17b2966 100644
--- a/dlls/gdi32/dibdrv/dc.c
+++ b/dlls/gdi32/dibdrv/dc.c
@@ -260,7 +260,7 @@ void copy_dib_color_info(dib_info *dst, const dib_info *src)
     }
 }
 
-DWORD convert_bitmapinfo( const BITMAPINFO *src_info, void *src_bits, const RECT *src_rect,
+DWORD convert_bitmapinfo( const BITMAPINFO *src_info, void *src_bits, struct bitblt_coords *src,
                           const BITMAPINFO *dst_info, void *dst_bits )
 {
     dib_info src_dib, dst_dib;
@@ -271,11 +271,15 @@ DWORD convert_bitmapinfo( const BITMAPINFO *src_info, void *src_bits, const RECT
     if ( !init_dib_info_from_bitmapinfo( &dst_dib, dst_info, dst_bits, 0 ) )
         return ERROR_BAD_FORMAT;
 
-    ret = dst_dib.funcs->convert_to( &dst_dib, &src_dib, src_rect );
+    ret = dst_dib.funcs->convert_to( &dst_dib, &src_dib, &src->visrect );
 
     /* We shared the color tables, so there's no need to free the dib_infos here */
-
     if(!ret) return ERROR_BAD_FORMAT;
+
+    /* update coordinates, the destination rectangle is always stored at 0,0 */
+    src->x -= src->visrect.left;
+    src->y -= src->visrect.top;
+    offset_rect( &src->visrect, -src->visrect.left, -src->visrect.top );
     return ERROR_SUCCESS;
 }
 
diff --git a/dlls/gdi32/gdi_private.h b/dlls/gdi32/gdi_private.h
index f0fb825..0111951 100644
--- a/dlls/gdi32/gdi_private.h
+++ b/dlls/gdi32/gdi_private.h
@@ -340,7 +340,7 @@ extern void DC_UpdateXforms( DC * dc ) DECLSPEC_HIDDEN;
 extern int bitmap_info_size( const BITMAPINFO * info, WORD coloruse ) DECLSPEC_HIDDEN;
 extern int DIB_GetBitmapInfo( const BITMAPINFOHEADER *header, LONG *width,
                               LONG *height, WORD *planes, WORD *bpp, DWORD *compr, DWORD *size ) DECLSPEC_HIDDEN;
-extern DWORD convert_bitmapinfo( const BITMAPINFO *src_info, void *src_bits, const RECT *src_rect,
+extern DWORD convert_bitmapinfo( const BITMAPINFO *src_info, void *src_bits, struct bitblt_coords *src,
                                  const BITMAPINFO *dst_info, void *dst_bits ) DECLSPEC_HIDDEN;
 
 




More information about the wine-cvs mailing list