RFC on patch for bug 469278 (Color problem with Mozilla Firefox(1.5.0.3) over GTK-DirectFB)
- From: Attilio Fiandrotti <attilio fiandrotti gmail com>
- To: gtk-devel-list gnome org
- Cc: directfb-devel directfb org
- Subject: RFC on patch for bug 469278 (Color problem with Mozilla Firefox(1.5.0.3) over GTK-DirectFB)
- Date: Mon, 29 Oct 2007 11:39:17 +0100
Hi
Some time ago Siddartah posted a patch [1], which has been sitting in
Gnome BTS for a while now, for an issue that shows up when running
Mozilla over GTK with DirectFB backend.
I've now revised the patch (attached) and, after a few tests, it seems
to bring no notceable drawbacks.
Note the patch affects not only the DFB backend but some GDK common
files as well, so i didn't dare applying it as i'm not really expert in
GDK internals.
I'm now requesting feedback in order to know if the patch shall be
applied as it is, applied with modifications or discarded.
regards
Attilio Fiandrotti
[1] http://bugzilla.gnome.org/show_bug.cgi?id=469278
Index: gdk/directfb/gdkgc-directfb.c
===================================================================
--- gdk/directfb/gdkgc-directfb.c (revisione 18951)
+++ gdk/directfb/gdkgc-directfb.c (copia locale)
@@ -226,9 +226,9 @@
{
GdkPixmap *oldpm = private->values.tile;
- if (values->tile)
- g_assert (GDK_PIXMAP_OBJECT (values->tile)->depth > 1);
+ g_assert (GDK_PIXMAP_OBJECT (values->tile)->depth > 1);
+
private->values.tile = values->tile ? g_object_ref (values->tile) : NULL;
private->values_mask |= GDK_GC_TILE;
Index: gdk/gdkcolor.c
===================================================================
--- gdk/gdkcolor.c (revisione 18951)
+++ gdk/gdkcolor.c (copia locale)
@@ -94,7 +94,6 @@
for (i = 0; i < ncolors; i++)
{
- colormap->colors[i].pixel = colors[i].pixel;
colormap->colors[i].red = colors[i].red;
colormap->colors[i].green = colors[i].green;
colormap->colors[i].blue = colors[i].blue;
Index: gdk/gdkgc.c
===================================================================
--- gdk/gdkgc.c (revisione 18951)
+++ gdk/gdkgc.c (copia locale)
@@ -49,6 +49,14 @@
guint32 fg_pixel;
guint32 bg_pixel;
+
+ unsigned char fg_red;
+ unsigned char fg_green;
+ unsigned char fg_blue;
+
+ unsigned char bg_red;
+ unsigned char bg_green;
+ unsigned char bg_blue;
};
#define GDK_GC_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDK_TYPE_GC, GdkGCPrivate))
@@ -75,8 +83,13 @@
/* These are the default X11 value, which we match. They are clearly
* wrong for TrueColor displays, so apps have to change them.
*/
- priv->fg_pixel = 0;
- priv->bg_pixel = 1;
+ priv->fg_red = 0;
+ priv->fg_green = 0;
+ priv->fg_blue = 0;
+
+ priv->bg_red = 1;
+ priv->bg_green = 1;
+ priv->bg_blue = 1;
}
/**
@@ -169,9 +182,17 @@
g_object_ref (priv->tile);
}
if (values_mask & GDK_GC_FOREGROUND)
- priv->fg_pixel = values->foreground.pixel;
+ {
+ priv->fg_red = values->foreground.red;
+ priv->fg_green = values->foreground.green;
+ priv->fg_blue = values->foreground.blue;
+ }
if (values_mask & GDK_GC_BACKGROUND)
- priv->bg_pixel = values->background.pixel;
+ {
+ priv->bg_red = values->background.red;
+ priv->bg_green = values->background.green;
+ priv->bg_blue = values->background.blue;
+ }
gc->colormap = gdk_drawable_get_colormap (drawable);
if (gc->colormap)
@@ -310,9 +331,17 @@
}
}
if (values_mask & GDK_GC_FOREGROUND)
- priv->fg_pixel = values->foreground.pixel;
+ {
+ priv->fg_red = values->foreground.red;
+ priv->fg_green = values->foreground.green;
+ priv->fg_blue = values->foreground.blue;
+ }
if (values_mask & GDK_GC_BACKGROUND)
- priv->bg_pixel = values->background.pixel;
+ {
+ priv->bg_red = values->background.red;
+ priv->bg_green = values->background.green;
+ priv->bg_blue = values->background.blue;
+ }
GDK_GC_GET_CLASS (gc)->set_values (gc, values, values_mask);
}
@@ -336,7 +365,9 @@
g_return_if_fail (GDK_IS_GC (gc));
g_return_if_fail (color != NULL);
- values.foreground = *color;
+ values.foreground.red = color->red;
+ values.foreground.green = color->green;
+ values.foreground.blue = color->blue;
gdk_gc_set_values (gc, &values, GDK_GC_FOREGROUND);
}
@@ -901,8 +932,13 @@
if (dst_priv->tile)
g_object_ref (dst_priv->tile);
- dst_priv->fg_pixel = src_priv->fg_pixel;
- dst_priv->bg_pixel = src_priv->bg_pixel;
+ dst_priv->fg_red = src_priv->fg_red;
+ dst_priv->fg_green= src_priv->fg_green;
+ dst_priv->fg_blue = src_priv->fg_blue;
+
+ dst_priv->bg_red = src_priv->bg_red;
+ dst_priv->bg_green = src_priv->bg_green;
+ dst_priv->bg_blue = src_priv->bg_blue;
}
/**
@@ -1078,9 +1114,11 @@
GdkColor *color)
{
GdkGCPrivate *priv = GDK_GC_GET_PRIVATE (gc);
-
- color->pixel = priv->bg_pixel;
+ color->red = priv->fg_red;
+ color->green = priv->fg_green;
+ color->blue = priv->fg_blue;
+
if (gc->colormap)
gdk_colormap_query_color (gc->colormap, priv->fg_pixel, color);
else
@@ -1093,7 +1131,9 @@
{
GdkGCPrivate *priv = GDK_GC_GET_PRIVATE (gc);
- color->pixel = priv->bg_pixel;
+ color->red = priv->bg_red;
+ color->green = priv->bg_green;
+ color->blue = priv->bg_blue;
if (gc->colormap)
gdk_colormap_query_color (gc->colormap, priv->bg_pixel, color);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]