diff options
author | Benjamin Otte <otte@redhat.com> | 2011-12-28 22:59:55 +0100 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2012-01-09 18:37:50 +0100 |
commit | ba5e7012b1c4cec7f3cfcee662273d4b960e497d (patch) | |
tree | 1b7b5829f2b5711a7c1dd657fcc530c2122a8e6a /gtk/gtkcsslookup.c | |
parent | 38a9b28a0edfdf8fd6749815bfc3c8edf457e3ec (diff) | |
download | gtk+-ba5e7012b1c4cec7f3cfcee662273d4b960e497d.tar.gz |
css: Redo StyleProvider interface
We now use the GtkStleProviderPrivate interface, which hopefully is
faster and more conformant to CSS. Long term, it definitely should be
both.
I would have liked to split this up into multiple commits, but couldn't
find a way.
Diffstat (limited to 'gtk/gtkcsslookup.c')
-rw-r--r-- | gtk/gtkcsslookup.c | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/gtk/gtkcsslookup.c b/gtk/gtkcsslookup.c new file mode 100644 index 0000000000..a1e4247283 --- /dev/null +++ b/gtk/gtkcsslookup.c @@ -0,0 +1,107 @@ +/* GTK - The GIMP Toolkit + * Copyright (C) 2011 Benjamin Otte <otte@gnome.org> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include "gtkcsslookupprivate.h" + +#include "gtkstylepropertyprivate.h" +#include "gtkstylepropertiesprivate.h" + +struct _GtkCssLookup { + GtkBitmask *missing; + const GValue *values[1]; +}; + +GtkCssLookup * +_gtk_css_lookup_new (void) +{ + GtkCssLookup *lookup; + guint n = _gtk_style_property_get_count (); + + lookup = g_malloc0 (sizeof (GtkCssLookup) + sizeof (const GValue *) * n); + lookup->missing = _gtk_bitmask_new (); + _gtk_bitmask_invert_range (lookup->missing, 0, n); + + return lookup; +} + +void +_gtk_css_lookup_free (GtkCssLookup *lookup) +{ + g_return_if_fail (lookup != NULL); + + _gtk_bitmask_free (lookup->missing); + g_free (lookup); +} + +const GtkBitmask * +_gtk_css_lookup_get_missing (const GtkCssLookup *lookup) +{ + g_return_val_if_fail (lookup != NULL, NULL); + + return lookup->missing; +} + +gboolean +_gtk_css_lookup_is_missing (const GtkCssLookup *lookup, + guint id) +{ + g_return_val_if_fail (lookup != NULL, FALSE); + + return lookup->values[id] == NULL; +} + +void +_gtk_css_lookup_set (GtkCssLookup *lookup, + guint id, + const GValue *value) +{ + g_return_if_fail (lookup != NULL); + g_return_if_fail (_gtk_bitmask_get (lookup->missing, id)); + g_return_if_fail (value != NULL); + + _gtk_bitmask_set (lookup->missing, id, FALSE); + lookup->values[id] = value; +} + +GtkStyleProperties * +_gtk_css_lookup_resolve (GtkCssLookup *lookup) +{ + GtkStyleProperties *props; + guint i, n; + + g_return_val_if_fail (lookup != NULL, NULL); + + n = _gtk_style_property_get_count (); + props = gtk_style_properties_new (); + + for (i = 0; i < n; i++) + { + if (lookup->values[i] == NULL) + continue; + + _gtk_style_properties_set_property_by_property (props, + _gtk_style_property_get (i), + 0, + lookup->values[i]); + } + + return props; +} |