From ec066eeef855e8b8c32303ebb5018bf6f910a7ac Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 23 Aug 2004 05:19:52 +0000 Subject: [PATCH] Set unused bits in pixel to 1s in case they are used as alpha; copying Mon Aug 23 01:17:59 2004 Matthias Clasen * gdk/gdkrgb.c (gdk_rgb_xpixel_from_rgb_internal): Set unused bits in pixel to 1s in case they are used as alpha; copying code from gdk_colormap_alloc_colors(). (#150466, Rich Wareham) --- ChangeLog | 6 ++++++ ChangeLog.pre-2-10 | 6 ++++++ ChangeLog.pre-2-6 | 6 ++++++ ChangeLog.pre-2-8 | 6 ++++++ gdk/gdkrgb.c | 11 ++++++++++- 5 files changed, 34 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 216d4b624e..25cc01c22b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Mon Aug 23 01:17:59 2004 Matthias Clasen + + * gdk/gdkrgb.c (gdk_rgb_xpixel_from_rgb_internal): Set unused + bits in pixel to 1s in case they are used as alpha; copying + code from gdk_colormap_alloc_colors(). (#150466, Rich Wareham) + 2004-08-22 Philip Langdale * gtk/gtkaction.c (gtk_action_disconnect_proxy): Two signals diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 216d4b624e..25cc01c22b 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,9 @@ +Mon Aug 23 01:17:59 2004 Matthias Clasen + + * gdk/gdkrgb.c (gdk_rgb_xpixel_from_rgb_internal): Set unused + bits in pixel to 1s in case they are used as alpha; copying + code from gdk_colormap_alloc_colors(). (#150466, Rich Wareham) + 2004-08-22 Philip Langdale * gtk/gtkaction.c (gtk_action_disconnect_proxy): Two signals diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 216d4b624e..25cc01c22b 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,9 @@ +Mon Aug 23 01:17:59 2004 Matthias Clasen + + * gdk/gdkrgb.c (gdk_rgb_xpixel_from_rgb_internal): Set unused + bits in pixel to 1s in case they are used as alpha; copying + code from gdk_colormap_alloc_colors(). (#150466, Rich Wareham) + 2004-08-22 Philip Langdale * gtk/gtkaction.c (gtk_action_disconnect_proxy): Two signals diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 216d4b624e..25cc01c22b 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,9 @@ +Mon Aug 23 01:17:59 2004 Matthias Clasen + + * gdk/gdkrgb.c (gdk_rgb_xpixel_from_rgb_internal): Set unused + bits in pixel to 1s in case they are used as alpha; copying + code from gdk_colormap_alloc_colors(). (#150466, Rich Wareham) + 2004-08-22 Philip Langdale * gtk/gtkaction.c (gtk_action_disconnect_proxy): Two signals diff --git a/gdk/gdkrgb.c b/gdk/gdkrgb.c index 555cf7d1f5..4dfd315150 100644 --- a/gdk/gdkrgb.c +++ b/gdk/gdkrgb.c @@ -745,6 +745,8 @@ gdk_rgb_xpixel_from_rgb_internal (GdkColormap *colormap, else if (image_info->visual->type == GDK_VISUAL_TRUE_COLOR || image_info->visual->type == GDK_VISUAL_DIRECT_COLOR) { + guint32 unused; + #ifdef VERBOSE g_print ("shift, prec: r %d %d g %d %d b %d %d\n", image_info->visual->red_shift, @@ -754,8 +756,15 @@ gdk_rgb_xpixel_from_rgb_internal (GdkColormap *colormap, image_info->visual->blue_shift, image_info->visual->blue_prec); #endif + /* If bits not used for color are used for something other than padding, + * it's likely alpha, so we set them to 1s. + */ + unused = ~ (image_info->visual->red_mask | + image_info->visual->green_mask | + image_info->visual->blue_mask | + (((~(guint32)0)) << image_info->visual->depth)); - pixel = (((r >> (16 - image_info->visual->red_prec)) << image_info->visual->red_shift) + + pixel = (unused + ((r >> (16 - image_info->visual->red_prec)) << image_info->visual->red_shift) + ((g >> (16 - image_info->visual->green_prec)) << image_info->visual->green_shift) + ((b >> (16 - image_info->visual->blue_prec)) << image_info->visual->blue_shift)); }