diff options
Diffstat (limited to 'clutter/clutter-interval.c')
-rw-r--r-- | clutter/clutter-interval.c | 50 |
1 files changed, 49 insertions, 1 deletions
diff --git a/clutter/clutter-interval.c b/clutter/clutter-interval.c index 601ad0f7e..861a5fe1b 100644 --- a/clutter/clutter-interval.c +++ b/clutter/clutter-interval.c @@ -61,6 +61,8 @@ #include "clutter-interval.h" #include "clutter-private.h" #include "clutter-units.h" +#include "clutter-scriptable.h" +#include "clutter-script-private.h" #include "deprecated/clutter-fixed.h" @@ -93,7 +95,14 @@ struct _ClutterIntervalPrivate GValue *values; }; -G_DEFINE_TYPE_WITH_PRIVATE (ClutterInterval, clutter_interval, G_TYPE_INITIALLY_UNOWNED) +static void clutter_scriptable_iface_init (ClutterScriptableIface *iface); + +G_DEFINE_TYPE_WITH_CODE (ClutterInterval, + clutter_interval, + G_TYPE_INITIALLY_UNOWNED, + G_ADD_PRIVATE (ClutterInterval) + G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_SCRIPTABLE, + clutter_scriptable_iface_init)); static gboolean clutter_interval_real_validate (ClutterInterval *interval, @@ -479,6 +488,45 @@ clutter_interval_get_property (GObject *gobject, } } +static gboolean +clutter_interval_parse_custom_node (ClutterScriptable *scriptable, + ClutterScript *script, + GValue *value, + const gchar *name, + JsonNode *node) +{ + ClutterIntervalPrivate *priv = CLUTTER_INTERVAL (scriptable)->priv; + + if ((strcmp (name, "initial") == 0) || (strcmp (name, "final") == 0)) + { + g_value_init (value, priv->value_type); + return _clutter_script_parse_node (script, value, name, node, NULL); + } + + return FALSE; +} + +static void +clutter_interval_set_custom_property (ClutterScriptable *scriptable, + ClutterScript *script, + const gchar *name, + const GValue *value) +{ + ClutterInterval *self = CLUTTER_INTERVAL (scriptable); + + if (strcmp (name, "initial") == 0) + clutter_interval_set_initial_value (self, value); + else if (strcmp (name, "final") == 0) + clutter_interval_set_final_value (self, value); +} + +static void +clutter_scriptable_iface_init (ClutterScriptableIface *iface) +{ + iface->parse_custom_node = clutter_interval_parse_custom_node; + iface->set_custom_property = clutter_interval_set_custom_property; +} + static void clutter_interval_class_init (ClutterIntervalClass *klass) { |