1 /* GTK - The GIMP Toolkit
2 * Copyright (C) 2011 Red Hat, Inc.
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
20 #include "gtkcssvalueprivate.h"
26 G_DEFINE_BOXED_TYPE (GtkCssValue, _gtk_css_value, _gtk_css_value_ref, _gtk_css_value_unref)
29 _gtk_css_value_alloc (const GtkCssValueClass *klass,
34 value = g_slice_alloc0 (size);
43 _gtk_css_value_ref (GtkCssValue *value)
45 g_return_val_if_fail (value != NULL, NULL);
47 g_atomic_int_add (&value->ref_count, 1);
53 _gtk_css_value_unref (GtkCssValue *value)
58 if (!g_atomic_int_dec_and_test (&value->ref_count))
61 value->class->free (value);
65 * _gtk_css_value_compute:
66 * @value: the value to compute from
67 * @property_id: the ID of the property to compute
68 * @context: the context to use for resolving
69 * @dependencies: (out) (allow-none): Set to the dependencies of the
70 * computed values that indicate when this value needs to be
73 * Converts the specified @value into the computed value for the CSS
74 * property given by @property_id using the information in @context.
75 * This step is explained in detail in
76 * <ulink url="http://www.w3.org/TR/css3-cascade/#computed>
77 * the CSS documentation</ulink>.
79 * Returns: the computed value
82 _gtk_css_value_compute (GtkCssValue *value,
84 GtkStyleContext *context,
85 GtkCssDependencies *dependencies)
87 GtkCssDependencies fallback;
89 g_return_val_if_fail (value != NULL, NULL);
90 g_return_val_if_fail (GTK_IS_STYLE_CONTEXT (context), NULL);
92 if (dependencies == NULL)
93 dependencies = &fallback;
96 return value->class->compute (value, property_id, context, dependencies);
100 _gtk_css_value_equal (const GtkCssValue *value1,
101 const GtkCssValue *value2)
103 g_return_val_if_fail (value1 != NULL, FALSE);
104 g_return_val_if_fail (value2 != NULL, FALSE);
106 if (value1->class != value2->class)
109 return value1->class->equal (value1, value2);
113 _gtk_css_value_equal0 (const GtkCssValue *value1,
114 const GtkCssValue *value2)
116 if (value1 == NULL && value2 == NULL)
119 if (value1 == NULL || value2 == NULL)
122 return _gtk_css_value_equal (value1, value2);
126 _gtk_css_value_transition (GtkCssValue *start,
130 g_return_val_if_fail (start != NULL, FALSE);
131 g_return_val_if_fail (end != NULL, FALSE);
133 if (start->class != end->class)
136 return start->class->transition (start, end, progress);
140 _gtk_css_value_to_string (const GtkCssValue *value)
144 g_return_val_if_fail (value != NULL, NULL);
146 string = g_string_new (NULL);
147 _gtk_css_value_print (value, string);
148 return g_string_free (string, FALSE);
152 * _gtk_css_value_print:
153 * @value: the value to print
154 * @string: the string to print to
156 * Prints @value to the given @string in CSS format. The @value must be a
157 * valid specified value as parsed using the parse functions or as assigned
158 * via _gtk_style_property_assign().
161 _gtk_css_value_print (const GtkCssValue *value,
164 g_return_if_fail (value != NULL);
165 g_return_if_fail (string != NULL);
167 value->class->print (value, string);