Huw Davies : gdi32: Add a copy_rect helper function.
Alexandre Julliard
julliard at winehq.org
Tue Aug 23 12:45:06 CDT 2011
Module: wine
Branch: master
Commit: 95f1abc8d87e462c90ba6d5e66a986eff71fe0ca
URL: http://source.winehq.org/git/wine.git/?a=commit;h=95f1abc8d87e462c90ba6d5e66a986eff71fe0ca
Author: Huw Davies <huw at codeweavers.com>
Date: Tue Aug 23 11:16:31 2011 +0100
gdi32: Add a copy_rect helper function.
---
dlls/gdi32/dibdrv/bitblt.c | 51 ++++++++++++++++++++++++++-----------------
1 files changed, 31 insertions(+), 20 deletions(-)
diff --git a/dlls/gdi32/dibdrv/bitblt.c b/dlls/gdi32/dibdrv/bitblt.c
index 9e6c74f..3e4de88 100644
--- a/dlls/gdi32/dibdrv/bitblt.c
+++ b/dlls/gdi32/dibdrv/bitblt.c
@@ -27,6 +27,35 @@
WINE_DEFAULT_DEBUG_CHANNEL(dib);
+static DWORD copy_rect( dib_info *dst, const RECT *dst_rect, const dib_info *src, const RECT *src_rect,
+ HRGN clip, INT rop2 )
+{
+ POINT origin;
+ RECT clipped_rect;
+ const WINEREGION *clip_data;
+ int i;
+
+ origin.x = src_rect->left;
+ origin.y = src_rect->top;
+
+ if (clip == NULL) dst->funcs->copy_rect( dst, dst_rect, src, &origin, rop2 );
+ else
+ {
+ clip_data = get_wine_region( clip );
+ for (i = 0; i < clip_data->numRects; i++)
+ {
+ if (intersect_rect( &clipped_rect, dst_rect, clip_data->rects + i ))
+ {
+ origin.x = src_rect->left + clipped_rect.left - dst_rect->left;
+ origin.y = src_rect->top + clipped_rect.top - dst_rect->top;
+ dst->funcs->copy_rect( dst, &clipped_rect, src, &origin, rop2 );
+ }
+ }
+ release_wine_region( clip );
+ }
+ return ERROR_SUCCESS;
+}
+
static void set_color_info( const dib_info *dib, BITMAPINFO *info )
{
DWORD *masks = (DWORD *)info->bmiColors;
@@ -182,8 +211,7 @@ DWORD dibdrv_PutImage( PHYSDEV dev, HBITMAP hbitmap, HRGN clip, BITMAPINFO *info
dib_info src_dib;
HRGN saved_clip = NULL;
dibdrv_physdev *pdev = NULL;
- const WINEREGION *clip_data;
- int i, rop2;
+ int rop2;
TRACE( "%p %p %p\n", dev, hbitmap, info );
@@ -244,24 +272,7 @@ DWORD dibdrv_PutImage( PHYSDEV dev, HBITMAP hbitmap, HRGN clip, BITMAPINFO *info
rop2 = ((rop >> 16) & 0xf) + 1;
- if (clip == NULL) dib->funcs->copy_rect( dib, &dst->visrect, &src_dib, &origin, rop2 );
- else
- {
- clip_data = get_wine_region( clip );
- for (i = 0; i < clip_data->numRects; i++)
- {
- RECT clipped_rect;
-
- if (intersect_rect( &clipped_rect, &dst->visrect, clip_data->rects + i ))
- {
- origin.x = src->visrect.left + clipped_rect.left - dst->visrect.left;
- origin.y = src->visrect.top + clipped_rect.top - dst->visrect.top;
- dib->funcs->copy_rect( dib, &clipped_rect, &src_dib, &origin, rop2 );
- }
- }
- release_wine_region( clip );
- }
- ret = ERROR_SUCCESS;
+ ret = copy_rect( dib, &dst->visrect, &src_dib, &src->visrect, clip, rop2 );
if (saved_clip) restore_clipping_region( pdev, saved_clip );
More information about the wine-cvs
mailing list