diff --git a/ChangeLog b/ChangeLog index 6fd9db0df3baa0980c91df0c213c187b2f08134c..5eaa44f32a3f28c44c1d89444876c509f09d6f03 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,23 @@ +2005-10-13 Tor Lillqvist <tml@novell.com> + + Set visual depth to 24 for 32 bits-per-pixel devices on + Win32. This allows gdk_drawable_real_draw_pixbuf() to use the + optimized composite_0888() function rather than the slower image + dithering functions to draw pixbufs (#313993, John Ehresman) + + * gdk/win32/gdkimage-win32.c (_gdk_win32_new_image): Use + _gdk_windowing_get_bits_for_depth() to initialize + GdkImage::bits_per_pixel. + (_gdk_windowing_get_bits_for_depth): Return 32 bits for depth 24. + + * gdk/win32/gdkpixmap-win32.c (gdk_pixmap_new): Use + _gdk_windowing_get_bits_for_depth() to initialize + BITMAPINFOHEADER::biBitCount. + + * gdk/win32/gdkvisual-win32.c (_gdk_visual_init): Set + GdkVisual::depth to 24 even if GetDeviceCaps(BITSPIXEL) returns + 32. + 2005-10-12 Stefan Kost <ensonic@users.sf.net> * demos/gtk-demo/appwindow.c: (about_cb): diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 6fd9db0df3baa0980c91df0c213c187b2f08134c..5eaa44f32a3f28c44c1d89444876c509f09d6f03 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,23 @@ +2005-10-13 Tor Lillqvist <tml@novell.com> + + Set visual depth to 24 for 32 bits-per-pixel devices on + Win32. This allows gdk_drawable_real_draw_pixbuf() to use the + optimized composite_0888() function rather than the slower image + dithering functions to draw pixbufs (#313993, John Ehresman) + + * gdk/win32/gdkimage-win32.c (_gdk_win32_new_image): Use + _gdk_windowing_get_bits_for_depth() to initialize + GdkImage::bits_per_pixel. + (_gdk_windowing_get_bits_for_depth): Return 32 bits for depth 24. + + * gdk/win32/gdkpixmap-win32.c (gdk_pixmap_new): Use + _gdk_windowing_get_bits_for_depth() to initialize + BITMAPINFOHEADER::biBitCount. + + * gdk/win32/gdkvisual-win32.c (_gdk_visual_init): Set + GdkVisual::depth to 24 even if GetDeviceCaps(BITSPIXEL) returns + 32. + 2005-10-12 Stefan Kost <ensonic@users.sf.net> * demos/gtk-demo/appwindow.c: (about_cb): diff --git a/gdk/win32/gdkimage-win32.c b/gdk/win32/gdkimage-win32.c index 7ed740db068b95a105bd6a2b96694bdc0c311083..576bba7e60a6e4e63798eb4dcb5b21f30af1e141 100644 --- a/gdk/win32/gdkimage-win32.c +++ b/gdk/win32/gdkimage-win32.c @@ -127,6 +127,7 @@ _gdk_win32_new_image (GdkVisual *visual, image->width = width; image->height = height; image->depth = depth; + image->bits_per_pixel = _gdk_windowing_get_bits_for_depth (gdk_display_get_default (), depth); switch (depth) { case 1: @@ -142,7 +143,7 @@ _gdk_win32_new_image (GdkVisual *visual, image->bpp = 2; break; case 24: - image->bpp = 3; + image->bpp = image->bits_per_pixel / 8; break; case 32: image->bpp = 4; @@ -157,7 +158,6 @@ _gdk_win32_new_image (GdkVisual *visual, image->bpl = ((width - 1)/8 + 1)*4; else image->bpl = ((width*image->bpp - 1)/4 + 1)*4; - image->bits_per_pixel = image->depth; image->mem = bits; return image; @@ -423,8 +423,6 @@ _gdk_windowing_get_bits_for_depth (GdkDisplay *display, return 16; case 24: - return 24; - case 32: return 32; } diff --git a/gdk/win32/gdkpixmap-win32.c b/gdk/win32/gdkpixmap-win32.c index 5d20d179670421f8556e4a67d68066d3b910987b..362ef0759bcef03ca2b5288df60b6540aee06e6e 100644 --- a/gdk/win32/gdkpixmap-win32.c +++ b/gdk/win32/gdkpixmap-win32.c @@ -209,7 +209,7 @@ gdk_pixmap_new (GdkDrawable *drawable, case 1: case 24: case 32: - bmi.bmiHeader.biBitCount = depth; + bmi.bmiHeader.biBitCount = _gdk_windowing_get_bits_for_depth (gdk_display_get_default (), depth); break; case 4: diff --git a/gdk/win32/gdkvisual-win32.c b/gdk/win32/gdkvisual-win32.c index 0007c47d6a8e41f2bf9106fc40783b428b49ce87..ad821a3be9a4d120c8dc5afde9ed450f9b2e80d1 100644 --- a/gdk/win32/gdkvisual-win32.c +++ b/gdk/win32/gdkvisual-win32.c @@ -246,6 +246,7 @@ _gdk_visual_init (void) } else if (bitspixel == 24 || bitspixel == 32) { + bitspixel = 24; system_visual->type = GDK_VISUAL_TRUE_COLOR; system_visual->red_mask = 0x00FF0000; system_visual->green_mask = 0x0000FF00;