diff options
author | Tor Lillqvist <tml@src.gnome.org> | 1999-08-17 17:47:14 +0000 |
---|---|---|
committer | Tor Lillqvist <tml@src.gnome.org> | 1999-08-17 17:47:14 +0000 |
commit | 70372ba8bd5377d05d475f6d29285a62038ecec9 (patch) | |
tree | 3dbc19e560e526afd1455c59d07932f2dba3933c /gdk/win32 | |
parent | f29407afe85aa5409631a41785293368d0c5ac03 (diff) | |
download | gtk+-70372ba8bd5377d05d475f6d29285a62038ecec9.tar.gz |
When blitting inside one window, use ScrollWindowEx, and call
* gdk/win32/gdkdraw.c (gdk_draw_pixmap): When blitting inside one
window, use ScrollWindowEx, and call UpdateWindow. This prevents
bugs when for instance part of the window was outside the
display. Thanks to Philippe Colantoni for finding and fixing this.
Diffstat (limited to 'gdk/win32')
-rw-r--r-- | gdk/win32/gdkdraw.c | 21 | ||||
-rw-r--r-- | gdk/win32/gdkdrawable-win32.c | 21 |
2 files changed, 42 insertions, 0 deletions
diff --git a/gdk/win32/gdkdraw.c b/gdk/win32/gdkdraw.c index 8cc0c4b7ce..80abf7bcc2 100644 --- a/gdk/win32/gdkdraw.c +++ b/gdk/win32/gdkdraw.c @@ -560,9 +560,30 @@ gdk_draw_pixmap (GdkDrawable *drawable, if ((srcdc = GetDC (src_private->xwindow)) == NULL) g_warning ("gdk_draw_pixmap: GetDC failed"); +#if 0 if (!BitBlt (hdc, xdest, ydest, width, height, srcdc, xsrc, ysrc, SRCCOPY)) g_warning ("gdk_draw_pixmap: BitBlt failed"); +#else + /* If we are in fact just blitting inside one window, + * ScrollWindowEx works better. + * Thanks to Philippe Colantoni <colanton@aris.ss.uci.edu> + * for noticing and fixing this. + */ + if (drawable_private->xwindow==src_private->xwindow) + { + if (!ScrollWindowEx (drawable_private->xwindow,-xsrc+xdest, -ysrc+ydest, NULL, + NULL, NULL, NULL, SW_INVALIDATE)) + g_warning ("gdk_draw_pixmap: ScrollWindowEx failed"); + + if (!UpdateWindow (drawable_private->xwindow)) + g_warning ("gdk_draw_pixmap: UpdateWindow failed"); + } + else + if (!BitBlt (hdc, xdest, ydest, width, height, + srcdc, xsrc, ysrc, SRCCOPY)) + g_warning ("gdk_draw_pixmap: BitBlt failed"); +#endif ReleaseDC (src_private->xwindow, srcdc); } diff --git a/gdk/win32/gdkdrawable-win32.c b/gdk/win32/gdkdrawable-win32.c index 8cc0c4b7ce..80abf7bcc2 100644 --- a/gdk/win32/gdkdrawable-win32.c +++ b/gdk/win32/gdkdrawable-win32.c @@ -560,9 +560,30 @@ gdk_draw_pixmap (GdkDrawable *drawable, if ((srcdc = GetDC (src_private->xwindow)) == NULL) g_warning ("gdk_draw_pixmap: GetDC failed"); +#if 0 if (!BitBlt (hdc, xdest, ydest, width, height, srcdc, xsrc, ysrc, SRCCOPY)) g_warning ("gdk_draw_pixmap: BitBlt failed"); +#else + /* If we are in fact just blitting inside one window, + * ScrollWindowEx works better. + * Thanks to Philippe Colantoni <colanton@aris.ss.uci.edu> + * for noticing and fixing this. + */ + if (drawable_private->xwindow==src_private->xwindow) + { + if (!ScrollWindowEx (drawable_private->xwindow,-xsrc+xdest, -ysrc+ydest, NULL, + NULL, NULL, NULL, SW_INVALIDATE)) + g_warning ("gdk_draw_pixmap: ScrollWindowEx failed"); + + if (!UpdateWindow (drawable_private->xwindow)) + g_warning ("gdk_draw_pixmap: UpdateWindow failed"); + } + else + if (!BitBlt (hdc, xdest, ydest, width, height, + srcdc, xsrc, ysrc, SRCCOPY)) + g_warning ("gdk_draw_pixmap: BitBlt failed"); +#endif ReleaseDC (src_private->xwindow, srcdc); } |