ok - examples of how to hook some embryo calls in - help appreciated with the
authorCarsten Haitzler <raster@rasterman.com>
Fri, 2 Apr 2004 03:55:38 +0000 (03:55 +0000)
committerCarsten Haitzler <raster@rasterman.com>
Fri, 2 Apr 2004 03:55:38 +0000 (03:55 +0000)
nice big LIST! :)

SVN revision: 9565

legacy/edje/data/e_logo.sh
legacy/edje/data/include/edje.inc
legacy/edje/data/src/e_logo.edc
legacy/edje/src/lib/edje_embryo.c

index 782d4d8fc32f440d248fb79980ebe6cb7627ec50..d8f2f121c7d8166b5bac2fc92f773a7af2f8fc11 100755 (executable)
@@ -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 
index c55372f90ca99915bdfce0ffe7823cd0fa446309..a8c0bc157002467b904c04c0a5bf5cfcb09cd270 100644 (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);
index 7a4982253365790dd8587e76fa8c0abc360fc0ce..c2d576608e94e5fc5ebddecc7c9921ba57e197ac 100644 (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 {
index 02c2526c8864f4ff1590d3a65543ad5cc3562abb..13c8ca9223d9b3479a99aa76c76fc5597c3a70b0 100644 (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);
 }