summaryrefslogtreecommitdiff
path: root/gtk/gtkcssstyleproperty.c
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2012-12-06 21:14:02 +0100
committerAlexander Larsson <alexl@redhat.com>2012-12-06 21:14:02 +0100
commit6dfee46cdb6c720d19489f39d802e1d46c598a51 (patch)
treed0e1c5788e05ef9918cde929a9e87735b4ded285 /gtk/gtkcssstyleproperty.c
parente6de45964dc1937781f8428c8f9d7a1457f7fba0 (diff)
downloadgtk+-6dfee46cdb6c720d19489f39d802e1d46c598a51.tar.gz
css: Add _gtk_css_style_property_affects_font
This checks if a style_update affects the font.
Diffstat (limited to 'gtk/gtkcssstyleproperty.c')
-rw-r--r--gtk/gtkcssstyleproperty.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/gtk/gtkcssstyleproperty.c b/gtk/gtkcssstyleproperty.c
index bd7d5a06cb..c3016abf08 100644
--- a/gtk/gtkcssstyleproperty.c
+++ b/gtk/gtkcssstyleproperty.c
@@ -39,6 +39,7 @@ enum {
PROP_0,
PROP_ANIMATED,
PROP_AFFECTS_SIZE,
+ PROP_AFFECTS_FONT,
PROP_ID,
PROP_INHERIT,
PROP_INITIAL
@@ -47,6 +48,7 @@ enum {
G_DEFINE_TYPE (GtkCssStyleProperty, _gtk_css_style_property, GTK_TYPE_STYLE_PROPERTY)
static GtkBitmask *_properties_affecting_size = NULL;
+static GtkBitmask *_properties_affecting_font = NULL;
static void
gtk_css_style_property_constructed (GObject *object)
@@ -60,6 +62,9 @@ gtk_css_style_property_constructed (GObject *object)
if (property->affects_size)
_properties_affecting_size = _gtk_bitmask_set (_properties_affecting_size, property->id, TRUE);
+ if (property->affects_font)
+ _properties_affecting_font = _gtk_bitmask_set (_properties_affecting_font, property->id, TRUE);
+
G_OBJECT_CLASS (_gtk_css_style_property_parent_class)->constructed (object);
}
@@ -79,6 +84,9 @@ gtk_css_style_property_set_property (GObject *object,
case PROP_AFFECTS_SIZE:
property->affects_size = g_value_get_boolean (value);
break;
+ case PROP_AFFECTS_FONT:
+ property->affects_font = g_value_get_boolean (value);
+ break;
case PROP_INHERIT:
property->inherit = g_value_get_boolean (value);
break;
@@ -108,6 +116,9 @@ gtk_css_style_property_get_property (GObject *object,
case PROP_AFFECTS_SIZE:
g_value_set_boolean (value, property->affects_size);
break;
+ case PROP_AFFECTS_FONT:
+ g_value_set_boolean (value, property->affects_font);
+ break;
case PROP_ID:
g_value_set_boolean (value, property->id);
break;
@@ -271,6 +282,13 @@ _gtk_css_style_property_class_init (GtkCssStylePropertyClass *klass)
TRUE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property (object_class,
+ PROP_AFFECTS_FONT,
+ g_param_spec_boolean ("affects-font",
+ P_("Affects font"),
+ P_("Set if the value affects the font"),
+ FALSE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (object_class,
PROP_ID,
g_param_spec_uint ("id",
P_("ID"),
@@ -299,6 +317,7 @@ _gtk_css_style_property_class_init (GtkCssStylePropertyClass *klass)
klass->style_properties = g_ptr_array_new ();
_properties_affecting_size = _gtk_bitmask_new ();
+ _properties_affecting_font = _gtk_bitmask_new ();
}
static GtkCssValue *
@@ -419,6 +438,25 @@ _gtk_css_style_property_affects_size (GtkCssStyleProperty *property)
return property->affects_size;
}
+
+/**
+ * _gtk_css_style_property_affects_font:
+ * @property: the property
+ *
+ * Queries if the given @property affects the default font. This is
+ * used for optimizations inside GTK, where clearing pango
+ * layouts can be avoided if the font doesn't change.
+ *
+ * Returns: %TRUE if the property affects the font.
+ **/
+gboolean
+_gtk_css_style_property_affects_font (GtkCssStyleProperty *property)
+{
+ g_return_val_if_fail (GTK_IS_CSS_STYLE_PROPERTY (property), FALSE);
+
+ return property->affects_font;
+}
+
/**
* _gtk_css_style_property_get_id:
* @property: the property
@@ -459,3 +497,9 @@ _gtk_css_style_property_changes_affect_size (const GtkBitmask *changes)
{
return _gtk_bitmask_intersects (changes, _properties_affecting_size);
}
+
+gboolean
+_gtk_css_style_property_changes_affect_font (const GtkBitmask *changes)
+{
+ return _gtk_bitmask_intersects (changes, _properties_affecting_font);
+}