diff --git a/ChangeLog b/ChangeLog index 74de879f1..e840ec216 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2007-10-09 Emmanuele Bassi + + * clutter/clutter-script.c (clutter_script_get_object): Construct + the requested object if it hasn't been already. This allows + referencing objects within the same snippet. + + * tests/test-script.c: Declare a timeline and use it inside + multiple behaviours; apply multiple behaviours to various + actors, then retrieve the timeline to start it when the test + runs. + 2007-10-09 Emmanuele Bassi * clutter/clutter-script-private.h: diff --git a/clutter/clutter-script.c b/clutter/clutter-script.c index 5fc7ece1d..43b41ca2b 100644 --- a/clutter/clutter-script.c +++ b/clutter/clutter-script.c @@ -196,12 +196,14 @@ resolve_alpha_func (const gchar *name) { c = name[i]; /* skip if uppercase, first or previous is uppercase */ - if ((c == g_ascii_toupper (c) && + if ((c == '-') || + (c == g_ascii_toupper (c) && i > 0 && name[i-1] != g_ascii_toupper (name[i-1])) || (i > 2 && name[i] == g_ascii_toupper (name[i]) && name[i-1] == g_ascii_toupper (name[i-1]) && name[i-2] == g_ascii_toupper (name[i-2]))) g_string_append_c (symbol_name, '_'); + g_string_append_c (symbol_name, g_ascii_tolower (c)); } g_string_append (symbol_name, "_func"); @@ -210,7 +212,7 @@ resolve_alpha_func (const gchar *name) if (!g_module_symbol (module, symbol, (gpointer)&func)) func = NULL; - + g_free (symbol); return func; @@ -1145,7 +1147,7 @@ clutter_script_get_object (ClutterScript *script, if (!oinfo) return NULL; - return oinfo->object; + return clutter_script_construct_object (script, oinfo); } static GList * diff --git a/tests/test-script.c b/tests/test-script.c index 832d24797..29dcd931c 100644 --- a/tests/test-script.c +++ b/tests/test-script.c @@ -6,17 +6,36 @@ #include static const gchar *test_behaviour = -"{" -" \"id\" : \"rotate-behaviour\"," -" \"type\" : \"ClutterBehaviourRotate\"," -" \"angle-begin\" : 0.0," -" \"angle-end\" : 360.0," -" \"axis\" : \"z-axis\"," -" \"alpha\" : {" -" \"timeline\" : { \"num-frames\" : 300, \"fps\" : 60, \"loop\" : true }," -" \"function\" : \"sine\"" +"[" +" {" +" \"id\" : \"main-timeline\"," +" \"type\" : \"ClutterTimeline\"," +" \"num-frames\" : 300," +" \"fps\" : 60," +" \"loop\" : true" +" }," +" {" +" \"id\" : \"rotate-behaviour\"," +" \"type\" : \"ClutterBehaviourRotate\"," +" \"angle-begin\" : 0.0," +" \"angle-end\" : 360.0," +" \"axis\" : \"z-axis\"," +" \"alpha\" : {" +" \"timeline\" : \"main-timeline\"," +" \"function\" : \"sine\"" +" }" +" }," +" {" +" \"id\" : \"fade-behaviour\"," +" \"type\" : \"ClutterBehaviourOpacity\"," +" \"opacity-start\" : 255," +" \"opacity-end\" : 0," +" \"alpha\" : {" +" \"timeline\" : \"main-timeline\"," +" \"function\" : \"ramp\"" +" }" " }" -"}"; +"]"; static const gchar *test_ui = "{" @@ -46,6 +65,7 @@ static const gchar *test_ui = " \"width\" : 100," " \"height\" : 100," " \"visible\" : true," +" \"behaviours\" : [ \"fade-behaviour\" ]" " }," " {" " \"id\" : \"blue-button\"," @@ -65,7 +85,7 @@ static const gchar *test_ui = " \"y\" : 50," " \"opacity\" : 100," " \"visible\" : true," -" \"behaviours\" : [ \"rotate-behaviour\" ]" +" \"behaviours\" : [ \"rotate-behaviour\", \"fade-behaviour\" ]" " }" " ]" " }" @@ -74,10 +94,8 @@ static const gchar *test_ui = int main (int argc, char *argv[]) { - ClutterActor *stage; - ClutterActor *texture; - ClutterBehaviour *rotate; ClutterScript *script; + GObject *stage, *timeline; GError *error = NULL; clutter_init (&argc, &argv); @@ -105,11 +123,11 @@ main (int argc, char *argv[]) return EXIT_FAILURE; } - stage = CLUTTER_ACTOR (clutter_script_get_object (script, "main-stage")); - clutter_actor_show (stage); + stage = clutter_script_get_object (script, "main-stage"); + clutter_actor_show (CLUTTER_ACTOR (stage)); - rotate = CLUTTER_BEHAVIOUR (clutter_script_get_object (script, "rotate-behaviour")); - clutter_timeline_start (clutter_alpha_get_timeline (clutter_behaviour_get_alpha (rotate))); + timeline = clutter_script_get_object (script, "main-timeline"); + clutter_timeline_start (CLUTTER_TIMELINE (timeline)); clutter_main ();