X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtktexttag.c;h=8674e92c9f0cd74a2be7f9a049c56bfc5dd3e026;hb=4c130ac90497ba580a8411759de41180ca267876;hp=dbfb5aea36d5c6a39cfd37f7267d2a5551ba37a0;hpb=d399a4acabf9904118ea4481d057bde39bf0ab0e;p=~andy%2Fgtk diff --git a/gtk/gtktexttag.c b/gtk/gtktexttag.c index dbfb5aea3..8674e92c9 100644 --- a/gtk/gtktexttag.c +++ b/gtk/gtktexttag.c @@ -61,6 +61,11 @@ * * gtk_text_buffer_create_tag() is the best way to create tags. * See gtk3-demo for numerous examples. + * + * For each property of #GtkTextTag, there is a "set" property, e.g. + * "font-set" corresponds to "font". These "set" properties reflect + * whether a property has been set or not. + * They are maintained by GTK+ and you should not set them independently. */ #include "config.h" @@ -68,7 +73,6 @@ #include #include -#include "gtkmainprivate.h" #include "gtktexttag.h" #include "gtktexttypes.h" #include "gtktexttagtable.h" @@ -201,20 +205,33 @@ gtk_text_tag_class_init (GtkTextTagClass *klass) NULL, GTK_PARAM_WRITABLE)); + /** + * GtkTextTag:background-gdk: + * + * Background color as a #GdkColor. + * + * Deprecated: 3.4: Use #GtkTextTag:background-rgba instead. + */ g_object_class_install_property (object_class, PROP_BACKGROUND_GDK, g_param_spec_boxed ("background-gdk", P_("Background color"), - P_("Background color as a (possibly unallocated) GdkColor"), + P_("Background color as a GdkColor"), GDK_TYPE_COLOR, - GTK_PARAM_READWRITE)); - + GTK_PARAM_READWRITE | G_PARAM_DEPRECATED)); + /** + * GtkTextTag:background-rgba: + * + * Background color as a #GdkRGBA. + * + * Since: 3.2 + */ g_object_class_install_property (object_class, PROP_BACKGROUND_RGBA, g_param_spec_boxed ("background-rgba", - P_("Background rgba"), - P_("Background rgba as a (possibly unallocated) GdkRGBA"), + P_("Background RGBA"), + P_("Background color as a GdkRGBA"), GDK_TYPE_RGBA, GTK_PARAM_READWRITE)); @@ -234,19 +251,33 @@ gtk_text_tag_class_init (GtkTextTagClass *klass) NULL, GTK_PARAM_WRITABLE)); + /** + * GtkTextTag:foreground-gdk: + * + * Foreground color as a #GdkColor. + * + * Deprecated: 3.4: Use #GtkTextTag:foreground-rgba instead. + */ g_object_class_install_property (object_class, PROP_FOREGROUND_GDK, g_param_spec_boxed ("foreground-gdk", P_("Foreground color"), - P_("Foreground color as a (possibly unallocated) GdkColor"), + P_("Foreground color as a GdkColor"), GDK_TYPE_COLOR, - GTK_PARAM_READWRITE)); + GTK_PARAM_READWRITE | G_PARAM_DEPRECATED)); + /** + * GtkTextTag:foreground-rgba: + * + * Foreground color as a #GdkRGBA. + * + * Since: 3.2 + */ g_object_class_install_property (object_class, PROP_FOREGROUND_RGBA, g_param_spec_boxed ("foreground-rgba", - P_("Foreground rgba"), - P_("Foreground rgba as a (possibly unallocated) GdkRGBA"), + P_("Foreground RGBA"), + P_("Foreground color as a GdkRGBA"), GDK_TYPE_RGBA, GTK_PARAM_READWRITE)); @@ -538,32 +569,32 @@ gtk_text_tag_class_init (GtkTextTagClass *klass) /** * GtkTextTag:paragraph-background-gdk: * - * The paragraph background color as a as a (possibly unallocated) - * #GdkColor. + * The paragraph background color as a as a #GdkColor. * * Since: 2.8 + * + * Deprecated: 3.4: Use #GtkTextTag:paragraph-background-rgba instead. */ g_object_class_install_property (object_class, PROP_PARAGRAPH_BACKGROUND_GDK, g_param_spec_boxed ("paragraph-background-gdk", P_("Paragraph background color"), - P_("Paragraph background color as a (possibly unallocated) GdkColor"), + P_("Paragraph background color as a GdkColor"), GDK_TYPE_COLOR, - GTK_PARAM_READWRITE)); + GTK_PARAM_READWRITE | G_PARAM_DEPRECATED)); /** * GtkTextTag:paragraph-background-rgba: * - * The paragraph background color as a as a (possibly unallocated) - * #GdkRGBA. + * The paragraph background color as a as a #GdkRGBA. * * Since: 3.2 */ g_object_class_install_property (object_class, PROP_PARAGRAPH_BACKGROUND_RGBA, g_param_spec_boxed ("paragraph-background-rgba", - P_("Paragraph background rgba"), - P_("Paragraph background rgba as a (possibly unallocated) GdkRGBA"), + P_("Paragraph background RGBA"), + P_("Paragraph background RGBA as a GdkRGBA"), GDK_TYPE_RGBA, GTK_PARAM_READWRITE)); @@ -775,6 +806,25 @@ gtk_text_tag_finalize (GObject *object) G_OBJECT_CLASS (gtk_text_tag_parent_class)->finalize (object); } +static void +copy_rgba_to_gdk_color (GdkRGBA *src, + GdkColor *dest) +{ + dest->red = CLAMP (src->red, 0.0, 1.0) * 65535.0; + dest->green = CLAMP (src->green, 0.0, 1.0) * 65535.0; + dest->blue = CLAMP (src->blue, 0.0, 1.0) * 65535.0; +} + +static void +copy_gdk_color_to_rgba (GdkColor *src, + GdkRGBA *dest) +{ + dest->red = src->red / 65535.; + dest->green = src->green / 65535.; + dest->blue = src->blue / 65535.; + dest->alpha = 1; +} + static void set_bg_rgba (GtkTextTag *tag, GdkRGBA *rgba) { @@ -794,6 +844,8 @@ set_bg_rgba (GtkTextTag *tag, GdkRGBA *rgba) } priv->values->appearance.rgba[0] = gdk_rgba_copy (rgba); + + copy_rgba_to_gdk_color (rgba, &priv->values->appearance.bg_color); } else { @@ -824,6 +876,8 @@ set_fg_rgba (GtkTextTag *tag, GdkRGBA *rgba) } priv->values->appearance.rgba[1] = gdk_rgba_copy (rgba); + + copy_rgba_to_gdk_color (rgba, &priv->values->appearance.fg_color); } else { @@ -843,10 +897,16 @@ set_pg_bg_rgba (GtkTextTag *tag, GdkRGBA *rgba) if (priv->values->pg_bg_rgba) gdk_rgba_free (priv->values->pg_bg_rgba); + if (priv->values->pg_bg_color) + gdk_color_free (priv->values->pg_bg_color); + priv->values->pg_bg_rgba = NULL; + priv->values->pg_bg_color = NULL; if (rgba) { + GdkColor color = { 0, }; + if (!priv->pg_bg_color_set) { priv->pg_bg_color_set = TRUE; @@ -854,6 +914,9 @@ set_pg_bg_rgba (GtkTextTag *tag, GdkRGBA *rgba) } priv->values->pg_bg_rgba = gdk_rgba_copy (rgba); + + copy_rgba_to_gdk_color (rgba, &color); + priv->values->pg_bg_color = gdk_color_copy (&color); } else { @@ -871,13 +934,9 @@ set_bg_color (GtkTextTag *tag, GdkColor *color) { if (color) { - gchar *str; GdkRGBA rgba; - str = gdk_color_to_string (color); - gdk_rgba_parse (&rgba, str); - g_free (str); - + copy_gdk_color_to_rgba (color, &rgba); set_bg_rgba (tag, &rgba); } else @@ -889,13 +948,9 @@ set_fg_color (GtkTextTag *tag, GdkColor *color) { if (color) { - gchar *str; GdkRGBA rgba; - str = gdk_color_to_string (color); - gdk_rgba_parse (&rgba, str); - g_free (str); - + copy_gdk_color_to_rgba (color, &rgba); set_fg_rgba (tag, &rgba); } else @@ -907,13 +962,9 @@ set_pg_bg_color (GtkTextTag *tag, GdkColor *color) { if (color) { - gchar *str; GdkRGBA rgba; - str = gdk_color_to_string (color); - gdk_rgba_parse (&rgba, str); - g_free (str); - + copy_gdk_color_to_rgba (color, &rgba); set_pg_bg_rgba (tag, &rgba); } else @@ -1555,7 +1606,6 @@ gtk_text_tag_get_property (GObject *object, { GtkTextTag *tag = GTK_TEXT_TAG (object); GtkTextTagPrivate *priv = tag->priv; - GdkColor color = { 0, }; switch (prop_id) { @@ -1564,25 +1614,21 @@ gtk_text_tag_get_property (GObject *object, break; case PROP_BACKGROUND_GDK: - if (priv->values->appearance.rgba[0]) - { - color.red = CLAMP (priv->values->appearance.rgba[0]->red, 0.0, 1.0) * 65535.0; - color.green = CLAMP (priv->values->appearance.rgba[0]->green, 0.0, 1.0) * 65535.0; - color.blue = CLAMP (priv->values->appearance.rgba[0]->blue, 0.0, 1.0) * 65535.0; - } - g_value_set_boxed (value, &color); + g_value_set_boxed (value, &priv->values->appearance.bg_color); + break; + + case PROP_BACKGROUND_RGBA: + g_value_set_boxed (value, priv->values->appearance.rgba[0]); break; case PROP_FOREGROUND_GDK: - if (priv->values->appearance.rgba[1]) - { - color.red = CLAMP (priv->values->appearance.rgba[1]->red, 0.0, 1.0) * 65535.0; - color.green = CLAMP (priv->values->appearance.rgba[1]->green, 0.0, 1.0) * 65535.0; - color.blue = CLAMP (priv->values->appearance.rgba[1]->blue, 0.0, 1.0) * 65535.0; - } g_value_set_boxed (value, &priv->values->appearance.fg_color); break; + case PROP_FOREGROUND_RGBA: + g_value_set_boxed (value, priv->values->appearance.rgba[1]); + break; + case PROP_FONT: { gchar *str; @@ -1713,10 +1759,13 @@ gtk_text_tag_get_property (GObject *object, break; case PROP_PARAGRAPH_BACKGROUND_GDK: - /* XXX Transform the GdkRGBA here */ g_value_set_boxed (value, priv->values->pg_bg_color); break; + case PROP_PARAGRAPH_BACKGROUND_RGBA: + g_value_set_boxed (value, priv->values->pg_bg_rgba); + break; + case PROP_ACCUMULATIVE_MARGIN: g_value_set_boolean (value, priv->accumulative_margin); break; @@ -1819,6 +1868,7 @@ gtk_text_tag_get_property (GObject *object, case PROP_FOREGROUND: case PROP_PARAGRAPH_BACKGROUND: g_warning ("'foreground', 'background' and 'paragraph_background' properties are not readable, use 'foreground_gdk', 'background_gdk' and 'paragraph_background_gdk'"); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break;