stop action supported. parser/compiler is accurate there in not needing more

params. stop is immediate - always. edje test program now uses arguments to
determine what to look at


SVN revision: 7049
This commit is contained in:
Carsten Haitzler 2003-06-20 10:44:36 +00:00
parent 53f0296ad6
commit 943d63f6f2
4 changed files with 91 additions and 44 deletions

View File

@ -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";
}
}
}
}

View File

@ -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

View File

@ -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();

View File

@ -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;
}
}
}
}