From 231a8f8cd03e2a92b1b1696cec0a9d5142afa085 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Fri, 2 Apr 2004 03:55:38 +0000 Subject: [PATCH] ok - examples of how to hook some embryo calls in - help appreciated with the nice big LIST! :) SVN revision: 9565 --- legacy/edje/data/e_logo.sh | 2 +- legacy/edje/data/include/edje.inc | 51 ++++++++++- legacy/edje/data/src/e_logo.edc | 4 + legacy/edje/src/lib/edje_embryo.c | 144 +++++++++++++++++++++++------- 4 files changed, 163 insertions(+), 38 deletions(-) diff --git a/legacy/edje/data/e_logo.sh b/legacy/edje/data/e_logo.sh index 782d4d8fc3..d8f2f121c7 100755 --- a/legacy/edje/data/e_logo.sh +++ b/legacy/edje/data/e_logo.sh @@ -1,2 +1,2 @@ #!/bin/sh -exec edje_cc -fd ./test/fonts -id ./images src/e_logo.edc e_logo.eet +exec edje_cc -v -fd ./test/fonts -id ./images src/e_logo.edc e_logo.eet diff --git a/legacy/edje/data/include/edje.inc b/legacy/edje/data/include/edje.inc index c55372f90c..a8c0bc1570 100644 --- a/legacy/edje/data/include/edje.inc +++ b/legacy/edje/data/include/edje.inc @@ -1,4 +1,31 @@ -/* edje exported calls */ +/* Edje exported calls */ + +/************************************************/ +/* Basic data storage/retrieval (it's explicit) */ +/************************************************/ +/* Example: + * + * In the "global" script section of a group: + * + * script { + * public global_value1; + * public global_value2; + * public global_value3; + * } + * + * In the program script sections, OR in any global functions/routines: + * ( several examples of setting/getting values) + * + * set_int(global_value1, 7); + * set_float(global_value2, 42.0); + * set_str(global_value3, "I am a smelly fish!"); + * new value1 = get_int(global_value1); + * new Float:value2 = get_float(global_value2); + * new value3[100]; get_str(global_value3, value3, 100); + * set_int(global_value1, value1); + * set_float(global_value2, value2); + * set_str(global_value3, value3); + */ native get_int (id); native set_int (id, val); native Float:get_float (id); @@ -6,7 +33,23 @@ native set_float (id, Float:val); native get_strlen(id); native get_str (id, dst[], maxlen); native set_str (id, str[]); - -native tst(); -native emit(sig[], src[]); +/***********************************************************/ +/* Edje utility calls for dealign with edjes/programs etc. */ +/***********************************************************/ +/* Example: + * + * emit("this_thing", "clicked"); + * emit("state", "playing"); + * + * set_state(PART:"logo", "glowing", 0.0); + * set_state(PART:"button", "default", 0.0); + * + * set_tween_state(PART:"button", 0.5, "default", 0.0, "clicked", 0.0); + * + * run_program(PROGRAM:"program_name"); + */ +native emit (sig[], src[]); +native set_state (part_id, state[], Float:state_val); +native set_tween_state(part_id, Float:tween, state1[], Float:state1_val, state2[], Float:state2_val); +native run_program (program_id); diff --git a/legacy/edje/data/src/e_logo.edc b/legacy/edje/data/src/e_logo.edc index 7a49822533..c2d576608e 100644 --- a/legacy/edje/data/src/e_logo.edc +++ b/legacy/edje/data/src/e_logo.edc @@ -502,6 +502,10 @@ collections { get_str(global_str, s, 256); snprintf(buf, 256, "3. s = %s :)", s); emit("DEBUG...", buf); + + set_state(PART:"logo", "clicked", 0.0); + set_tween_state(PART:"logo", randf(), "default", 0.0, "clicked", 0.0); + run_program(PROGRAM:"logo_click_d2"); } } program { diff --git a/legacy/edje/src/lib/edje_embryo.c b/legacy/edje/src/lib/edje_embryo.c index 02c2526c88..13c8ca9223 100644 --- a/legacy/edje/src/lib/edje_embryo.c +++ b/legacy/edje/src/lib/edje_embryo.c @@ -183,10 +183,15 @@ _edje_embryo_fn_set_str(Embryo_Program *ep, Embryo_Cell *params) /* EDJE... * - * set_state(part_id, state[], Float:state_val) - * set_tween_state(part_id, state1[], Float:state1_val, state2[], Float:state2_val) + * implemented so far as examples: + * * emit(sig[], src[]) + * set_state(part_id, state[], Float:state_val) + * set_tween_state(part_id, Float:tween, state1[], Float:state1_val, state2[], Float:state2_val) * run_program(program_id) + * + * still need to implement this: + * * stop_program(program_id) * stop_programs_on(part_id) * Direction:get_drag_dir(part_id) @@ -223,6 +228,106 @@ _edje_embryo_fn_set_str(Embryo_Program *ep, Embryo_Cell *params) * get_clip(part_id) */ +/* emit(sig[], src[]) */ +static Embryo_Cell +_edje_embryo_fn_emit(Embryo_Program *ep, Embryo_Cell *params) +{ + Edje *ed; + char *sig = NULL, *src = NULL; + + CHKPARAM(2); + ed = embryo_program_data_get(ep); + GETSTR(sig, params[1]); + GETSTR(src, params[2]); + if ((!sig) || (!src)) return 0; + _edje_emit(ed, sig, src); + return 0; +} + +/* set_state(part_id, state[], Float:state_val) */ +static Embryo_Cell +_edje_embryo_fn_set_state(Embryo_Program *ep, Embryo_Cell *params) +{ + Edje *ed; + char *state = NULL; + int part_id = 0; + float f = 0.0; + double value = 0.0; + Edje_Real_Part *rp; + + CHKPARAM(3); + ed = embryo_program_data_get(ep); + GETSTR(state, params[2]); + if ((!state)) return 0; + part_id = params[1]; + if (part_id < 0) return 0; + f = EMBRYO_CELL_TO_FLOAT(params[3]); + value = (double)f; + rp = ed->table_parts[part_id % ed->table_parts_size]; + if (rp) + { + if (rp->program) _edje_program_end(ed, rp->program); + _edje_part_description_apply(ed, rp, state, value, NULL, 0.0); + _edje_part_pos_set(ed, rp, EDJE_TWEEN_MODE_LINEAR, 0.0); + } + return 0; +} + +/* set_tween_state(part_id, Float:tween, state1[], Float:state1_val, state2[], Float:state2_val) */ +static Embryo_Cell +_edje_embryo_fn_set_tween_state(Embryo_Program *ep, Embryo_Cell *params) +{ + Edje *ed; + char *state1 = NULL, *state2 = NULL; + int part_id = 0; + float f = 0.0; + double tween = 0.0, value1 = 0.0, value2 = 0.0; + Edje_Real_Part *rp; + + CHKPARAM(6); + ed = embryo_program_data_get(ep); + GETSTR(state1, params[3]); + GETSTR(state2, params[5]); + if ((!state1) || (!state2)) return 0; + part_id = params[1]; + if (part_id < 0) return 0; + f = EMBRYO_CELL_TO_FLOAT(params[2]); + tween = (double)f; + f = EMBRYO_CELL_TO_FLOAT(params[4]); + value1 = (double)f; + f = EMBRYO_CELL_TO_FLOAT(params[6]); + value2 = (double)f; + rp = ed->table_parts[part_id % ed->table_parts_size]; + if (rp) + { + if (rp->program) _edje_program_end(ed, rp->program); + _edje_part_description_apply(ed, rp, state1, value1, state2, value2); + _edje_part_pos_set(ed, rp, EDJE_TWEEN_MODE_LINEAR, tween); + } + return 0; +} + +/* run_program(program_id) */ +static Embryo_Cell +_edje_embryo_fn_run_program(Embryo_Program *ep, Embryo_Cell *params) +{ + Edje *ed; + char *state1 = NULL, *state2 = NULL; + int program_id = 0; + Edje_Program *pr; + + CHKPARAM(1); + ed = embryo_program_data_get(ep); + program_id = params[1]; + if (program_id < 0) return 0; + pr = ed->table_programs[program_id % ed->table_programs_size]; + if (pr) + { + _edje_program_run(ed, pr, 0, "", ""); + } + return 0; +} + /* MODIFY STATE VALUES * * set_state_val(part_id, state[], Float:state_val, Param:param, ...) @@ -262,36 +367,6 @@ _edje_embryo_fn_set_str(Embryo_Program *ep, Embryo_Cell *params) * */ -/**** All the api exported to edje scripts ****/ -/* tst() */ -static Embryo_Cell -_edje_embryo_fn_tst(Embryo_Program *ep, Embryo_Cell *params) -{ - Edje *ed; - - /* params[0] = number of bytes of params passed */ - ed = embryo_program_data_get(ep); - printf("EDJE DEBUG: Embryo code detected for \"%s\":\"%s\"\n", - ed->path, ed->part); - return 7; -} - -/* emit(sig[], src[]) */ -static Embryo_Cell -_edje_embryo_fn_emit(Embryo_Program *ep, Embryo_Cell *params) -{ - Edje *ed; - char *sig, *src; - - CHKPARAM(2); - ed = embryo_program_data_get(ep); - GETSTR(sig, params[1]); - GETSTR(src, params[2]); - if ((!sig) || (!src)) return 0; - _edje_emit(ed, sig, src); - return 0; -} - void _edje_embryo_script_init(Edje *ed) { @@ -311,8 +386,11 @@ _edje_embryo_script_init(Edje *ed) embryo_program_native_call_add(ep, "get_strlen", _edje_embryo_fn_get_strlen); embryo_program_native_call_add(ep, "set_str", _edje_embryo_fn_set_str); - embryo_program_native_call_add(ep, "tst", _edje_embryo_fn_tst); embryo_program_native_call_add(ep, "emit", _edje_embryo_fn_emit); + embryo_program_native_call_add(ep, "set_state", _edje_embryo_fn_set_state); + embryo_program_native_call_add(ep, "set_tween_state", _edje_embryo_fn_set_tween_state); + embryo_program_native_call_add(ep, "run_program", _edje_embryo_fn_run_program); + embryo_program_vm_push(ep); /* neew a new vm to run in */ _edje_embryo_globals_init(ed); }