mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2025-01-02 08:50:28 +00:00
cssvalue: Add _gtk_css_value_equal()
For now, we return FALSE for all default css values, so this is not very useful. I also think of this as an optimization equal, not a guaranteed equal, because we don't even have a notion of what "equal" means. For example, for background-repeat, "repeat, repeat" and "repeat" are functionally equivalent. But the cssvalue has no idea that it's used for background-repeat. As a more complicated example, "repeat, no-repeat" and "repeat" are equal to what one sees as long as there's only one image listed background-image-source. But once you start transition'ing to an image with 2 sources, it's different...
This commit is contained in:
parent
3e601691d9
commit
ffe50c3b67
@ -40,6 +40,25 @@ gtk_css_value_array_free (GtkCssValue *value)
|
||||
g_slice_free1 (sizeof (GtkCssValue) + sizeof (GtkCssValue *) * (value->n_values - 1), value);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gtk_css_value_array_equal (const GtkCssValue *value1,
|
||||
const GtkCssValue *value2)
|
||||
{
|
||||
guint i;
|
||||
|
||||
if (value1->n_values != value2->n_values)
|
||||
return FALSE;
|
||||
|
||||
for (i = 0; i < value1->n_values; i++)
|
||||
{
|
||||
if (!_gtk_css_value_equal (value1->values[i],
|
||||
value2->values[i]))
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_css_value_array_print (const GtkCssValue *value,
|
||||
GString *string)
|
||||
@ -62,6 +81,7 @@ gtk_css_value_array_print (const GtkCssValue *value,
|
||||
|
||||
static const GtkCssValueClass GTK_CSS_VALUE_ARRAY = {
|
||||
gtk_css_value_array_free,
|
||||
gtk_css_value_array_equal,
|
||||
gtk_css_value_array_print
|
||||
};
|
||||
|
||||
|
@ -30,6 +30,13 @@ gtk_css_value_inherit_free (GtkCssValue *value)
|
||||
g_assert_not_reached ();
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gtk_css_value_inherit_equal (const GtkCssValue *value1,
|
||||
const GtkCssValue *value2)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_css_value_inherit_print (const GtkCssValue *value,
|
||||
GString *string)
|
||||
@ -39,6 +46,7 @@ gtk_css_value_inherit_print (const GtkCssValue *value,
|
||||
|
||||
static const GtkCssValueClass GTK_CSS_VALUE_INHERIT = {
|
||||
gtk_css_value_inherit_free,
|
||||
gtk_css_value_inherit_equal,
|
||||
gtk_css_value_inherit_print
|
||||
};
|
||||
|
||||
|
@ -30,6 +30,13 @@ gtk_css_value_initial_free (GtkCssValue *value)
|
||||
g_assert_not_reached ();
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gtk_css_value_initial_equal (const GtkCssValue *value1,
|
||||
const GtkCssValue *value2)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_css_value_initial_print (const GtkCssValue *value,
|
||||
GString *string)
|
||||
@ -39,6 +46,7 @@ gtk_css_value_initial_print (const GtkCssValue *value,
|
||||
|
||||
static const GtkCssValueClass GTK_CSS_VALUE_INITIAL = {
|
||||
gtk_css_value_initial_free,
|
||||
gtk_css_value_initial_equal,
|
||||
gtk_css_value_initial_print
|
||||
};
|
||||
|
||||
|
@ -311,7 +311,7 @@ gtk_css_style_property_real_equal (GtkCssStyleProperty *property,
|
||||
GtkCssValue *value1,
|
||||
GtkCssValue *value2)
|
||||
{
|
||||
return FALSE;
|
||||
return _gtk_css_value_equal (value1, value2);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -79,6 +79,13 @@ gtk_css_value_default_free (GtkCssValue *value)
|
||||
g_slice_free (GtkCssValue, value);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gtk_css_value_default_equal (const GtkCssValue *value1,
|
||||
const GtkCssValue *value2)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_css_value_default_print (const GtkCssValue *value,
|
||||
GString *string)
|
||||
@ -92,6 +99,7 @@ gtk_css_value_default_print (const GtkCssValue *value,
|
||||
|
||||
static const GtkCssValueClass GTK_CSS_VALUE_DEFAULT = {
|
||||
gtk_css_value_default_free,
|
||||
gtk_css_value_default_equal,
|
||||
gtk_css_value_default_print
|
||||
};
|
||||
|
||||
@ -438,6 +446,19 @@ _gtk_css_value_unref (GtkCssValue *value)
|
||||
value->class->free (value);
|
||||
}
|
||||
|
||||
gboolean
|
||||
_gtk_css_value_equal (const GtkCssValue *value1,
|
||||
const GtkCssValue *value2)
|
||||
{
|
||||
g_return_val_if_fail (value1 != NULL, FALSE);
|
||||
g_return_val_if_fail (value2 != NULL, FALSE);
|
||||
|
||||
if (value1->class != value2->class)
|
||||
return FALSE;
|
||||
|
||||
return value1->class->equal (value1, value2);
|
||||
}
|
||||
|
||||
void
|
||||
_gtk_css_value_print (const GtkCssValue *value,
|
||||
GString *string)
|
||||
|
@ -48,6 +48,8 @@ typedef struct _GtkCssValueClass GtkCssValueClass;
|
||||
struct _GtkCssValueClass {
|
||||
void (* free) (GtkCssValue *value);
|
||||
|
||||
gboolean (* equal) (const GtkCssValue *value1,
|
||||
const GtkCssValue *value2);
|
||||
void (* print) (const GtkCssValue *value,
|
||||
GString *string);
|
||||
};
|
||||
@ -61,6 +63,9 @@ GtkCssValue *_gtk_css_value_alloc (const GtkCssValueClass
|
||||
GtkCssValue *_gtk_css_value_ref (GtkCssValue *value);
|
||||
void _gtk_css_value_unref (GtkCssValue *value);
|
||||
|
||||
gboolean _gtk_css_value_equal (const GtkCssValue *value1,
|
||||
const GtkCssValue *value2);
|
||||
|
||||
void _gtk_css_value_print (const GtkCssValue *value,
|
||||
GString *string);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user