animator: Improve the key value copy
Use the same code used elsewhere in Clutter when dealing with values that can be copied or transformed.
This commit is contained in:
parent
1ca0c2a6d1
commit
74301da8e7
@ -2115,23 +2115,38 @@ gboolean
|
|||||||
clutter_animator_key_get_value (const ClutterAnimatorKey *key,
|
clutter_animator_key_get_value (const ClutterAnimatorKey *key,
|
||||||
GValue *value)
|
GValue *value)
|
||||||
{
|
{
|
||||||
GType gtype;
|
|
||||||
|
|
||||||
g_return_val_if_fail (key != NULL, FALSE);
|
g_return_val_if_fail (key != NULL, FALSE);
|
||||||
|
g_return_val_if_fail (value != NULL, FALSE);
|
||||||
|
g_return_val_if_fail (G_VALUE_TYPE (value) != G_TYPE_INVALID, FALSE);
|
||||||
|
|
||||||
gtype = G_VALUE_TYPE (&key->value);
|
if (!g_type_is_a (G_VALUE_TYPE (&key->value), G_VALUE_TYPE (value)))
|
||||||
|
|
||||||
if (g_value_type_compatible (gtype, G_VALUE_TYPE (value)))
|
|
||||||
{
|
{
|
||||||
g_value_copy (&key->value, value);
|
if (g_value_type_compatible (G_VALUE_TYPE (&key->value),
|
||||||
return TRUE;
|
G_VALUE_TYPE (value)))
|
||||||
}
|
{
|
||||||
|
g_value_copy (&key->value, value);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
if (g_value_type_transformable (gtype, G_VALUE_TYPE (value)))
|
if (g_value_type_transformable (G_VALUE_TYPE (&key->value),
|
||||||
{
|
G_VALUE_TYPE (value)))
|
||||||
if (g_value_transform (&key->value, value))
|
{
|
||||||
return TRUE;
|
if (g_value_transform (&key->value, value))
|
||||||
}
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
return FALSE;
|
g_warning ("%s: Unable to convert from %s to %s for the "
|
||||||
|
"property '%s' of object %s in the animator key",
|
||||||
|
G_STRLOC,
|
||||||
|
g_type_name (G_VALUE_TYPE (&key->value)),
|
||||||
|
g_type_name (G_VALUE_TYPE (value)),
|
||||||
|
key->property_name,
|
||||||
|
G_OBJECT_TYPE_NAME (key->object));
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
g_value_copy (&key->value, value);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user