Fix gdk_cairo_region_create_from_surface on big endian
gdk_cairo_region_create_from_surface doesn't work correctly on PPC. This is most prominently seen with the GTK window resize grip, the shape of which is mirrored every eight pixels horizontally. At the same time, use an A1 surface for the resize grip shape to eliminates an A8->A1 surface conversion.
This commit is contained in:
committed by
Matthias Clasen
parent
182cf3daa6
commit
b448ae7963
@@ -427,7 +427,11 @@ gdk_cairo_region_create_from_surface (cairo_surface_t *surface)
|
||||
gint x0 = x;
|
||||
while (x < extents.width)
|
||||
{
|
||||
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
|
||||
if (((data[x / 8] >> (x%8)) & 1) == 0)
|
||||
#else
|
||||
if (((data[x / 8] >> (7-(x%8))) & 1) == 0)
|
||||
#endif
|
||||
/* This pixel is "transparent"*/
|
||||
break;
|
||||
x++;
|
||||
|
||||
@@ -5297,7 +5297,7 @@ set_grip_shape (GtkWindow *window)
|
||||
|
||||
width = gdk_window_get_width (priv->grip_window);
|
||||
height = gdk_window_get_height (priv->grip_window);
|
||||
surface = cairo_image_surface_create (CAIRO_FORMAT_A8, width, height);
|
||||
surface = cairo_image_surface_create (CAIRO_FORMAT_A1, width, height);
|
||||
|
||||
cr = cairo_create (surface);
|
||||
cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 0.0);
|
||||
|
||||
Reference in New Issue
Block a user