X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkcssshorthandproperty.c;h=c6ca6146890cae4c12db2c4dab906d319805657a;hb=c8403f697edef57f33c66d3d8deb1488db86d949;hp=dbe8216cc09f23d9e12d060bd7a1f45f521dc811;hpb=e603992ac7fb7c96ac878bc36a40c82bcaba6aeb;p=~andy%2Fgtk diff --git a/gtk/gtkcssshorthandproperty.c b/gtk/gtkcssshorthandproperty.c index dbe8216cc..c6ca61468 100644 --- a/gtk/gtkcssshorthandproperty.c +++ b/gtk/gtkcssshorthandproperty.c @@ -12,8 +12,7 @@ * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * License along with this library. If not, see . * * Authors: Benjamin Otte */ @@ -22,10 +21,11 @@ #include "gtkcssshorthandpropertyprivate.h" +#include "gtkcssarrayvalueprivate.h" +#include "gtkcssinheritvalueprivate.h" +#include "gtkcssinitialvalueprivate.h" #include "gtkcssstylefuncsprivate.h" -#include "gtkcsstypesprivate.h" #include "gtkintl.h" -#include "gtkprivatetypebuiltins.h" enum { PROP_0, @@ -69,46 +69,31 @@ _gtk_css_shorthand_property_assign (GtkStyleProperty *property, const GValue *value) { GtkCssShorthandProperty *shorthand = GTK_CSS_SHORTHAND_PROPERTY (property); - GParameter *parameters; - guint i, n_parameters; - parameters = shorthand->assign (shorthand, value, &n_parameters); - - for (i = 0; i < n_parameters; i++) - { - _gtk_style_property_assign (_gtk_style_property_lookup (parameters[i].name), - props, - state, - ¶meters[i].value); - g_value_unset (¶meters[i].value); - } - g_free (parameters); + shorthand->assign (shorthand, props, state, value); } static void _gtk_css_shorthand_property_query (GtkStyleProperty *property, - GtkStyleProperties *props, - GtkStateFlags state, - GValue *value) + GValue *value, + GtkStyleQueryFunc query_func, + gpointer query_data) { GtkCssShorthandProperty *shorthand = GTK_CSS_SHORTHAND_PROPERTY (property); - shorthand->query (shorthand, value, props, state); + return shorthand->query (shorthand, value, query_func, query_data); } -static gboolean +static GtkCssValue * gtk_css_shorthand_property_parse_value (GtkStyleProperty *property, - GValue *value, - GtkCssParser *parser, - GFile *base) + GtkCssParser *parser) { GtkCssShorthandProperty *shorthand = GTK_CSS_SHORTHAND_PROPERTY (property); - GValueArray *array; + GtkCssValue **data; + GtkCssValue *result; guint i; - array = g_value_array_new (shorthand->subproperties->len); - for (i = 0; i < shorthand->subproperties->len; i++) - g_value_array_append (array, NULL); + data = g_new0 (GtkCssValue *, shorthand->subproperties->len); if (_gtk_css_parser_try (parser, "initial", TRUE)) { @@ -117,9 +102,7 @@ gtk_css_shorthand_property_parse_value (GtkStyleProperty *property, */ for (i = 0; i < shorthand->subproperties->len; i++) { - GValue *val = g_value_array_get_nth (array, i); - g_value_init (val, GTK_TYPE_CSS_SPECIAL_VALUE); - g_value_set_enum (val, GTK_CSS_INITIAL); + data[i] = _gtk_css_initial_value_new (); } } else if (_gtk_css_parser_try (parser, "inherit", TRUE)) @@ -132,15 +115,18 @@ gtk_css_shorthand_property_parse_value (GtkStyleProperty *property, */ for (i = 0; i < shorthand->subproperties->len; i++) { - GValue *val = g_value_array_get_nth (array, i); - g_value_init (val, GTK_TYPE_CSS_SPECIAL_VALUE); - g_value_set_enum (val, GTK_CSS_INHERIT); + data[i] = _gtk_css_inherit_value_new (); } } - else if (!shorthand->parse (shorthand, array->values, parser, base)) + else if (!shorthand->parse (shorthand, data, parser)) { - g_value_array_free (array); - return FALSE; + for (i = 0; i < shorthand->subproperties->len; i++) + { + if (data[i] != NULL) + _gtk_css_value_unref (data[i]); + } + g_free (data); + return NULL; } /* All values that aren't set by the parse func are set to their @@ -148,16 +134,14 @@ gtk_css_shorthand_property_parse_value (GtkStyleProperty *property, * XXX: Is the default always initial or can it be inherit? */ for (i = 0; i < shorthand->subproperties->len; i++) { - GValue *val = g_value_array_get_nth (array, i); - if (G_IS_VALUE (val)) - continue; - g_value_init (val, GTK_TYPE_CSS_SPECIAL_VALUE); - g_value_set_enum (val, GTK_CSS_INITIAL); + if (data[i] == NULL) + data[i] = _gtk_css_initial_value_new (); } - g_value_init (value, G_TYPE_VALUE_ARRAY); - g_value_set_boxed (value, array); - return TRUE; + result = _gtk_css_array_value_new_from_array (data, shorthand->subproperties->len); + g_free (data); + + return result; } static void