diff options
Diffstat (limited to 'gtk/gtkcellrenderertext.c')
-rw-r--r-- | gtk/gtkcellrenderertext.c | 136 |
1 files changed, 99 insertions, 37 deletions
diff --git a/gtk/gtkcellrenderertext.c b/gtk/gtkcellrenderertext.c index 4a3110caed..0313d16ecc 100644 --- a/gtk/gtkcellrenderertext.c +++ b/gtk/gtkcellrenderertext.c @@ -93,6 +93,8 @@ enum { PROP_FOREGROUND, PROP_BACKGROUND_GDK, PROP_FOREGROUND_GDK, + PROP_BACKGROUND_RGBA, + PROP_FOREGROUND_RGBA, PROP_FONT, PROP_FONT_DESC, PROP_FAMILY, @@ -140,8 +142,8 @@ struct _GtkCellRendererTextPrivate PangoAlignment align; PangoAttrList *extra_attrs; - PangoColor foreground; - PangoColor background; + GdkRGBA foreground; + GdkRGBA background; PangoEllipsizeMode ellipsize; PangoFontDescription *font; PangoLanguage *language; @@ -274,6 +276,20 @@ gtk_cell_renderer_text_class_init (GtkCellRendererTextClass *class) GDK_TYPE_COLOR, GTK_PARAM_READWRITE)); + /** + * GtkCellRendererText:background-rgba: + * + * Background color as a #GdkRGBA + * + * Since: 3.0 + */ + g_object_class_install_property (object_class, + PROP_BACKGROUND_RGBA, + g_param_spec_boxed ("background-rgba", + P_("Background color as RGBA"), + P_("Background color as a GdkRGBA"), + GDK_TYPE_RGBA, + GTK_PARAM_READWRITE)); g_object_class_install_property (object_class, PROP_FOREGROUND, g_param_spec_string ("foreground", @@ -290,6 +306,21 @@ gtk_cell_renderer_text_class_init (GtkCellRendererTextClass *class) GDK_TYPE_COLOR, GTK_PARAM_READWRITE)); + /** + * GtkCellRendererText:foreground-rgba: + * + * Foreground color as a #GdkRGBA + * + * Since: 3.0 + */ + g_object_class_install_property (object_class, + PROP_FOREGROUND_RGBA, + g_param_spec_boxed ("foreground-rgba", + P_("Foreground color as RGBA"), + P_("Foreground color as a GdkRGBA"), + GDK_TYPE_RGBA, + GTK_PARAM_READWRITE)); + g_object_class_install_property (object_class, PROP_EDITABLE, @@ -717,11 +748,11 @@ gtk_cell_renderer_text_get_property (GObject *object, case PROP_BACKGROUND_GDK: { GdkColor color; - - color.red = priv->background.red; - color.green = priv->background.green; - color.blue = priv->background.blue; - + + color.red = (guint16) (priv->background.red * 65535); + color.green = (guint16) (priv->background.green * 65535); + color.blue = (guint16) (priv->background.blue * 65535); + g_value_set_boxed (value, &color); } break; @@ -729,15 +760,23 @@ gtk_cell_renderer_text_get_property (GObject *object, case PROP_FOREGROUND_GDK: { GdkColor color; - - color.red = priv->foreground.red; - color.green = priv->foreground.green; - color.blue = priv->foreground.blue; - + + color.red = (guint16) (priv->foreground.red * 65535); + color.green = (guint16) (priv->foreground.green * 65535); + color.blue = (guint16) (priv->foreground.blue * 65535); + g_value_set_boxed (value, &color); } break; + case PROP_BACKGROUND_RGBA: + g_value_set_boxed (value, &priv->background); + break; + + case PROP_FOREGROUND_RGBA: + g_value_set_boxed (value, &priv->foreground); + break; + case PROP_FONT: g_value_take_string (value, pango_font_description_to_string (priv->font)); break; @@ -887,21 +926,19 @@ gtk_cell_renderer_text_get_property (GObject *object, static void set_bg_color (GtkCellRendererText *celltext, - GdkColor *color) + GdkRGBA *rgba) { GtkCellRendererTextPrivate *priv = celltext->priv; - if (color) + if (rgba) { if (!priv->background_set) { priv->background_set = TRUE; g_object_notify (G_OBJECT (celltext), "background-set"); } - - priv->background.red = color->red; - priv->background.green = color->green; - priv->background.blue = color->blue; + + priv->background = *rgba; } else { @@ -916,21 +953,19 @@ set_bg_color (GtkCellRendererText *celltext, static void set_fg_color (GtkCellRendererText *celltext, - GdkColor *color) + GdkRGBA *rgba) { GtkCellRendererTextPrivate *priv = celltext->priv; - if (color) + if (rgba) { if (!priv->foreground_set) { priv->foreground_set = TRUE; g_object_notify (G_OBJECT (celltext), "foreground-set"); } - - priv->foreground.red = color->red; - priv->foreground.green = color->green; - priv->foreground.blue = color->blue; + + priv->foreground = *rgba; } else { @@ -1140,12 +1175,12 @@ gtk_cell_renderer_text_set_property (GObject *object, case PROP_BACKGROUND: { - GdkColor color; + GdkRGBA rgba; if (!g_value_get_string (value)) set_bg_color (celltext, NULL); /* reset to background_set to FALSE */ - else if (gdk_color_parse (g_value_get_string (value), &color)) - set_bg_color (celltext, &color); + else if (gdk_rgba_parse (g_value_get_string (value), &rgba)) + set_bg_color (celltext, &rgba); else g_warning ("Don't know color `%s'", g_value_get_string (value)); @@ -1155,12 +1190,12 @@ gtk_cell_renderer_text_set_property (GObject *object, case PROP_FOREGROUND: { - GdkColor color; + GdkRGBA rgba; if (!g_value_get_string (value)) set_fg_color (celltext, NULL); /* reset to foreground_set to FALSE */ - else if (gdk_color_parse (g_value_get_string (value), &color)) - set_fg_color (celltext, &color); + else if (gdk_rgba_parse (g_value_get_string (value), &rgba)) + set_fg_color (celltext, &rgba); else g_warning ("Don't know color `%s'", g_value_get_string (value)); @@ -1169,11 +1204,39 @@ gtk_cell_renderer_text_set_property (GObject *object, break; case PROP_BACKGROUND_GDK: + { + GdkColor *color; + GdkRGBA rgba; + + color = g_value_get_boxed (value); + rgba.red = color->red / 65535.; + rgba.green = color->green / 65535.; + rgba.blue = color->blue / 65535.; + + set_bg_color (celltext, &rgba); + } + break; + + case PROP_FOREGROUND_GDK: + { + GdkColor *color; + GdkRGBA rgba; + + color = g_value_get_boxed (value); + rgba.red = color->red / 65535.; + rgba.green = color->green / 65535.; + rgba.blue = color->blue / 65535.; + + set_fg_color (celltext, &rgba); + } + break; + + case PROP_BACKGROUND_RGBA: /* This notifies the GObject itself. */ set_bg_color (celltext, g_value_get_boxed (value)); break; - case PROP_FOREGROUND_GDK: + case PROP_FOREGROUND_RGBA: /* This notifies the GObject itself. */ set_fg_color (celltext, g_value_get_boxed (value)); break; @@ -1465,8 +1528,10 @@ get_layout (GtkCellRendererText *celltext, { PangoColor color; - color = priv->foreground; - + color.red = (guint16) (priv->foreground.red * 65535); + color.green = (guint16) (priv->foreground.green * 65535); + color.blue = (guint16) (priv->foreground.blue * 65535); + add_attr (attr_list, pango_attr_foreground_new (color.red, color.green, color.blue)); } @@ -1738,10 +1803,7 @@ gtk_cell_renderer_text_render (GtkCellRenderer *cell, (flags & GTK_CELL_RENDERER_SELECTED) == 0) { gdk_cairo_rectangle (cr, background_area); - cairo_set_source_rgb (cr, - priv->background.red / 65535., - priv->background.green / 65535., - priv->background.blue / 65535.); + gdk_cairo_set_source_rgba (cr, &priv->background); cairo_fill (cr); } |