ok - examples of how to hook some embryo calls in - help appreciated with the

nice big LIST! :)


SVN revision: 9565
This commit is contained in:
Carsten Haitzler 2004-04-02 03:55:38 +00:00
parent 6670c61e33
commit 231a8f8cd0
4 changed files with 163 additions and 38 deletions

View File

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

View File

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

View File

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

View File

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