diff --git a/legacy/edje/data/src/e_logo.edc b/legacy/edje/data/src/e_logo.edc index 7538c6efc3..4f8d87d686 100644 --- a/legacy/edje/data/src/e_logo.edc +++ b/legacy/edje/data/src/e_logo.edc @@ -349,6 +349,13 @@ collections { target, "logo_anim"; after, "logo_animate"; // at end... loop } + program { + name, "logo_animate_stop"; + signal, "mouse,down,1"; + source, "logo_anim"; + action, ACTION_STOP; + target, "logo_animate"; + } } } } diff --git a/legacy/edje/src/bin/edje_cc_handlers.c b/legacy/edje/src/bin/edje_cc_handlers.c index 42d903d4c5..ea15c86c72 100644 --- a/legacy/edje/src/bin/edje_cc_handlers.c +++ b/legacy/edje/src/bin/edje_cc_handlers.c @@ -1005,8 +1005,11 @@ st_collections_group_programs_program_action(void) "STATE_SET", EDJE_ACTION_TYPE_STATE_SET, "ACTION_STOP", EDJE_ACTION_TYPE_ACTION_STOP, NULL); - ep->state = parse_str(1); - ep->value = parse_float_range(2, 0.0, 1.0); + if (ep->action == EDJE_ACTION_TYPE_STATE_SET) + { + ep->state = parse_str(1); + ep->value = parse_float_range(2, 0.0, 1.0); + } } static void diff --git a/legacy/edje/src/bin/edje_main.c b/legacy/edje/src/bin/edje_main.c index 0f58ac45d1..eef1b6294c 100644 --- a/legacy/edje/src/bin/edje_main.c +++ b/legacy/edje/src/bin/edje_main.c @@ -131,7 +131,10 @@ test_reize(double w, double h) int main(int argc, char **argv) -{ +{ + char *file; + char *coll; + if (main_start(argc, argv) < 1) return -1; edje_init(); @@ -139,8 +142,18 @@ main(int argc, char **argv) bg_setup(); - /* FIXME: hard-coded. need to make this proper options later */ - test_setup("./data/e_logo.eet", "test"); + if (argc < 2) + { + printf("Usage: %s file_to_show.eet [collection_to_show]\n", argv[0]); + printf(" The default collection name to show is \"test\"\n"); + exit(-1); + } + file = "./data/e_logo.eet"; + coll = "test"; + file = argv[1]; + if (argc >= 3) coll = argv[2]; + /* FIXME: list collections */ + test_setup(argv[1], coll); ecore_main_loop_begin(); diff --git a/legacy/edje/src/lib/edje_main.c b/legacy/edje/src/lib/edje_main.c index 0f1d8ddc4a..53637f3b6d 100644 --- a/legacy/edje/src/lib/edje_main.c +++ b/legacy/edje/src/lib/edje_main.c @@ -608,59 +608,83 @@ _edje_program_run(Edje *ed, Edje_Program *pr) Evas_List *l; _edje_emit(ed, "anim,start", pr->name); - if (pr->tween.time > 0.0) + if (pr->action == EDJE_ACTION_TYPE_STATE_SET) { - Edje_Running_Program *runp; - - runp = calloc(1, sizeof(Edje_Running_Program)); - for (l = pr->targets; l; l = l->next) + if (pr->tween.time > 0.0) { - Edje_Real_Part *rp; - Edje_Program_Target *pt; + Edje_Running_Program *runp; - pt = l->data; - rp = evas_list_nth(ed->parts, pt->id); - if (rp) + runp = calloc(1, sizeof(Edje_Running_Program)); + for (l = pr->targets; l; l = l->next) { - if (rp->program) - _edje_program_end(ed, rp->program); - _edje_part_description_apply(ed, rp, - rp->param1.description->state.name, - rp->param1.description->state.value, - pr->state, - pr->value); - _edje_part_pos_set(ed, rp, pr->tween.mode, 0.0); - rp->program = runp; + Edje_Real_Part *rp; + Edje_Program_Target *pt; + + pt = l->data; + rp = evas_list_nth(ed->parts, pt->id); + if (rp) + { + if (rp->program) + _edje_program_end(ed, rp->program); + _edje_part_description_apply(ed, rp, + rp->param1.description->state.name, + rp->param1.description->state.value, + pr->state, + pr->value); + _edje_part_pos_set(ed, rp, pr->tween.mode, 0.0); + rp->program = runp; + } + } + + if (!ed->actions) + _edje_animators = evas_list_append(_edje_animators, ed); + ed->actions = evas_list_append(ed->actions, runp); + runp->start_time = ecore_time_get(); + runp->edje = ed; + runp->program = pr; + if (!_edje_timer) + _edje_timer = ecore_timer_add(_edje_frametime, _edje_timer_cb, NULL); + _edje_anim_count++; + } + else + { + for (l = pr->targets; l; l = l->next) + { + Edje_Real_Part *rp; + Edje_Program_Target *pt; + + pt = l->data; + rp = evas_list_nth(ed->parts, pt->id); + if (rp) + { + _edje_part_description_apply(ed, rp, + pr->state, + pr->value, + NULL, + 0.0); + _edje_part_pos_set(ed, rp, pr->tween.mode, 0.0); + } } } - - if (!ed->actions) - _edje_animators = evas_list_append(_edje_animators, ed); - ed->actions = evas_list_append(ed->actions, runp); - runp->start_time = ecore_time_get(); - runp->edje = ed; - runp->program = pr; - if (!_edje_timer) - _edje_timer = ecore_timer_add(_edje_frametime, _edje_timer_cb, NULL); - _edje_anim_count++; } - else + else if (pr->action == EDJE_ACTION_TYPE_ACTION_STOP) { for (l = pr->targets; l; l = l->next) { - Edje_Real_Part *rp; Edje_Program_Target *pt; + Evas_List *ll; pt = l->data; - rp = evas_list_nth(ed->parts, pt->id); - if (rp) + for (ll = ed->actions; ll; ll = ll->next) { - _edje_part_description_apply(ed, rp, - pr->state, - pr->value, - NULL, - 0.0); - _edje_part_pos_set(ed, rp, pr->tween.mode, 0.0); + Edje_Running_Program *runp; + + runp = ll->data; + if (pt->id == runp->program->id) + { + _edje_program_end(ed, runp); + break; + } } } }