1
#include "edje_private.h"
3
static Eina_Bool _edje_var_timer_cb(void *data);
4
static Eina_Bool _edje_var_anim_cb(void *data);
6
static Ecore_Animator *_edje_animator = NULL;
7
static Eina_List *_edje_anim_list = NULL;
10
_edje_var_timer_cb(void *data)
17
if (!et) return ECORE_CALLBACK_CANCEL;
19
// _edje_embryo_script_reset(ed);
20
embryo_program_vm_push(ed->collection->script);
21
_edje_embryo_globals_init(ed);
22
embryo_parameter_cell_push(ed->collection->script, (Embryo_Cell)et->val);
23
ed->var_pool->timers = eina_inlist_remove(ed->var_pool->timers,
31
pdata = embryo_program_data_get(ed->collection->script);
32
embryo_program_data_set(ed->collection->script, ed);
33
embryo_program_max_cycle_run_set(ed->collection->script, 5000000);
34
ret = embryo_program_run(ed->collection->script, fn);
35
if (ret == EMBRYO_PROGRAM_FAIL)
37
ERR("ERROR with embryo script (timer callback). "
43
embryo_error_string_get(embryo_program_error_get(ed->collection->script)));
45
else if (ret == EMBRYO_PROGRAM_TOOLONG)
47
ERR("ERROR with embryo script (timer callback). "
50
"ERROR: 'Script exceeded maximum allowed cycle count of %i'",
53
embryo_program_max_cycle_run_get(ed->collection->script));
55
embryo_program_data_set(ed->collection->script, pdata);
56
embryo_program_vm_pop(ed->collection->script);
59
return ECORE_CALLBACK_CANCEL;
63
_edje_var_anim_cb(void *data EINA_UNUSED)
65
Eina_List *l, *tl = NULL;
69
t = ecore_loop_time_get();
70
EINA_LIST_FOREACH(_edje_anim_list, l, tmp)
71
tl = eina_list_append(tl, tmp);
76
Edje_Var_Animator *ea;
78
ed = eina_list_data_get(tl);
81
_edje_util_freeze(ed);
82
tl = eina_list_remove(tl, ed);
83
if (!ed->var_pool) continue;
85
EINA_LIST_FOREACH(ed->var_pool->animators, l, tmp)
86
tl2 = eina_list_append(tl2, tmp);
87
ed->var_pool->walking_list++;
90
ea = eina_list_data_get(tl2);
91
if ((ed->var_pool) && (!ea->delete_me))
93
if ((!ed->paused) && (!ed->delete_me))
99
v = (t - ea->start) / ea->len;
100
if (v > 1.0) v = 1.0;
101
// _edje_embryo_script_reset(ed);
102
embryo_program_vm_push(ed->collection->script);
103
_edje_embryo_globals_init(ed);
104
embryo_parameter_cell_push(ed->collection->script, (Embryo_Cell)ea->val);
105
embryo_parameter_cell_push(ed->collection->script, EMBRYO_FLOAT_TO_CELL(v));
110
pdata = embryo_program_data_get(ed->collection->script);
111
embryo_program_data_set(ed->collection->script, ed);
112
embryo_program_max_cycle_run_set(ed->collection->script, 5000000);
113
ret = embryo_program_run(ed->collection->script, fn);
114
if (ret == EMBRYO_PROGRAM_FAIL)
116
ERR("ERROR with embryo script (anim callback). "
117
"OBJECT NAME: '%s', "
118
"OBJECT FILE: '%s', "
120
ed->collection->part,
122
embryo_error_string_get(embryo_program_error_get(ed->collection->script)));
124
else if (ret == EMBRYO_PROGRAM_TOOLONG)
126
ERR("ERROR with embryo script (anim callback). "
127
"OBJECT NAME: '%s', "
128
"OBJECT FILE: '%s', "
129
"ERROR: 'Script exceeded maximum allowed cycle count of %i'",
130
ed->collection->part,
132
embryo_program_max_cycle_run_get(ed->collection->script));
134
embryo_program_data_set(ed->collection->script, pdata);
135
embryo_program_vm_pop(ed->collection->script);
138
if (EQ(v, FROM_INT(1))) ea->delete_me = 1;
141
tl2 = eina_list_remove(tl2, ea);
148
ed->var_pool->walking_list--;
149
EINA_LIST_FOREACH(ed->var_pool->animators, l, ea)
153
l = eina_list_next(l);
154
ed->var_pool->animators = eina_list_remove(ed->var_pool->animators, ea);
158
l = eina_list_next(l);
160
if (!ed->var_pool->animators)
161
_edje_anim_list = eina_list_remove(_edje_anim_list, ed);
166
if (!_edje_anim_list)
170
ecore_animator_del(_edje_animator);
171
_edje_animator = NULL;
174
return !!_edje_animator;
180
return calloc(1, sizeof(Edje_Var));
184
_edje_var_free(Edje_Var *var)
186
if (var->type == EDJE_VAR_STRING)
197
_edje_var_init(Edje *ed)
200
if (!ed->collection) return;
201
if (!ed->collection->script) return;
202
if (ed->var_pool) return;
203
ed->var_pool = calloc(1, sizeof(Edje_Var_Pool));
204
if (!ed->var_pool) return;
205
embryo_program_vm_push(ed->collection->script);
206
ed->var_pool->size = embryo_program_variable_count_get(ed->collection->script);
207
embryo_program_vm_pop(ed->collection->script);
208
if (ed->var_pool->size > 0)
209
ed->var_pool->vars = calloc(1, sizeof(Edje_Var) * ed->var_pool->size);
213
_edje_var_shutdown(Edje *ed)
217
if (!ed->var_pool) return;
218
if (ed->var_pool->vars)
222
for (i = 0; i < ed->var_pool->size; i++)
224
if (ed->var_pool->vars[i].type == EDJE_VAR_STRING)
226
if (ed->var_pool->vars[i].data.s.v)
228
free(ed->var_pool->vars[i].data.s.v);
229
ed->var_pool->vars[i].data.s.v = NULL;
232
else if (ed->var_pool->vars[i].type == EDJE_VAR_LIST)
234
while (ed->var_pool->vars[i].data.l.v)
236
_edje_var_free(eina_list_data_get(ed->var_pool->vars[i].data.l.v));
237
ed->var_pool->vars[i].data.l.v = eina_list_remove_list(ed->var_pool->vars[i].data.l.v, ed->var_pool->vars[i].data.l.v);
241
free(ed->var_pool->vars);
243
EINA_INLIST_FREE(ed->var_pool->timers, et)
245
ed->var_pool->timers = eina_inlist_remove(ed->var_pool->timers,
246
EINA_INLIST_GET(et));
247
ecore_timer_del(et->timer);
250
if (ed->var_pool->animators)
252
_edje_anim_list = eina_list_remove(_edje_anim_list, ed);
253
if (!_edje_anim_list)
257
ecore_animator_del(_edje_animator);
258
_edje_animator = NULL;
262
while (ed->var_pool->animators)
264
Edje_Var_Animator *ea;
266
ea = eina_list_data_get(ed->var_pool->animators);
267
ed->var_pool->animators = eina_list_remove(ed->var_pool->animators, ea);
275
_edje_var_string_id_get(Edje *ed, const char *string)
277
Embryo_Cell cell, *cptr;
280
if (!ed->collection) return 0;
281
if (!ed->collection->script) return 0;
282
if (!string) return 0;
283
cell = embryo_program_variable_find(ed->collection->script, (char *)string);
284
if (cell == EMBRYO_CELL_NONE) return 0;
285
cptr = embryo_data_address_get(ed->collection->script, cell);
291
_edje_var_var_int_get(Edje *ed EINA_UNUSED, Edje_Var *var)
294
if (var->type == EDJE_VAR_STRING)
300
f = atof(var->data.s.v);
302
var->data.s.v = NULL;
303
var->data.i.v = (int)f;
305
var->type = EDJE_VAR_INT;
307
else if (var->type == EDJE_VAR_FLOAT)
309
int tmp = (int)(var->data.f.v);
311
var->type = EDJE_VAR_INT;
313
else if (var->type == EDJE_VAR_NONE)
315
var->type = EDJE_VAR_INT;
317
else if (var->type == EDJE_VAR_LIST)
321
else if (var->type == EDJE_VAR_HASH)
325
return var->data.i.v;
329
_edje_var_var_int_set(Edje *ed EINA_UNUSED, Edje_Var *var, int v)
332
if (var->type == EDJE_VAR_STRING)
337
var->data.s.v = NULL;
339
var->type = EDJE_VAR_INT;
341
else if (var->type == EDJE_VAR_FLOAT)
343
var->type = EDJE_VAR_INT;
345
else if (var->type == EDJE_VAR_NONE)
347
var->type = EDJE_VAR_INT;
349
else if (var->type == EDJE_VAR_LIST)
353
else if (var->type == EDJE_VAR_HASH)
361
_edje_var_var_float_get(Edje *ed EINA_UNUSED, Edje_Var *var)
364
if (var->type == EDJE_VAR_STRING)
370
f = atof(var->data.s.v);
372
var->data.s.v = NULL;
375
var->type = EDJE_VAR_FLOAT;
377
else if (var->type == EDJE_VAR_INT)
379
double tmp = (double)(var->data.i.v);
381
var->type = EDJE_VAR_FLOAT;
383
else if (var->type == EDJE_VAR_NONE)
385
var->type = EDJE_VAR_FLOAT;
387
else if (var->type == EDJE_VAR_LIST)
391
else if (var->type == EDJE_VAR_HASH)
395
return var->data.f.v;
399
_edje_var_var_float_set(Edje *ed EINA_UNUSED, Edje_Var *var, double v)
402
if (var->type == EDJE_VAR_STRING)
407
var->data.s.v = NULL;
409
var->type = EDJE_VAR_FLOAT;
411
else if (var->type == EDJE_VAR_INT)
414
var->type = EDJE_VAR_FLOAT;
416
else if (var->type == EDJE_VAR_NONE)
418
var->type = EDJE_VAR_FLOAT;
420
else if (var->type == EDJE_VAR_LIST)
424
else if (var->type == EDJE_VAR_HASH)
432
_edje_var_var_str_get(Edje *ed EINA_UNUSED, Edje_Var *var)
435
if (var->type == EDJE_VAR_INT)
439
snprintf(buf, sizeof(buf), "%i", var->data.i.v);
440
var->data.s.v = strdup(buf);
441
var->type = EDJE_VAR_STRING;
443
else if (var->type == EDJE_VAR_FLOAT)
447
snprintf(buf, sizeof(buf), "%f", var->data.f.v);
448
var->data.s.v = strdup(buf);
449
var->type = EDJE_VAR_STRING;
451
else if (var->type == EDJE_VAR_NONE)
453
var->data.s.v = strdup("");
454
var->type = EDJE_VAR_STRING;
456
else if (var->type == EDJE_VAR_LIST)
460
else if (var->type == EDJE_VAR_HASH)
464
return var->data.s.v;
468
_edje_var_var_str_set(Edje *ed EINA_UNUSED, Edje_Var *var, const char *str)
471
if (var->type == EDJE_VAR_STRING)
476
var->data.s.v = NULL;
479
else if (var->type == EDJE_VAR_INT)
481
var->type = EDJE_VAR_STRING;
483
else if (var->type == EDJE_VAR_FLOAT)
485
var->type = EDJE_VAR_STRING;
487
else if (var->type == EDJE_VAR_NONE)
489
var->type = EDJE_VAR_STRING;
491
else if (var->type == EDJE_VAR_LIST)
495
else if (var->type == EDJE_VAR_HASH)
499
var->data.s.v = strdup(str);
503
_edje_var_int_get(Edje *ed, int id)
506
if (!ed->var_pool) return 0;
507
id -= EDJE_VAR_MAGIC_BASE;
508
if ((id < 0) || (id >= ed->var_pool->size)) return 0;
509
return _edje_var_var_int_get(ed, &(ed->var_pool->vars[id]));
513
_edje_var_int_set(Edje *ed, int id, int v)
516
if (!ed->var_pool) return;
517
id -= EDJE_VAR_MAGIC_BASE;
518
if ((id < 0) || (id >= ed->var_pool->size)) return;
519
_edje_var_var_int_set(ed, &(ed->var_pool->vars[id]), v);
523
_edje_var_float_get(Edje *ed, int id)
526
if (!ed->var_pool) return 0;
527
id -= EDJE_VAR_MAGIC_BASE;
528
if ((id < 0) || (id >= ed->var_pool->size)) return 0;
529
return _edje_var_var_float_get(ed, &(ed->var_pool->vars[id]));
533
_edje_var_float_set(Edje *ed, int id, double v)
536
if (!ed->var_pool) return;
537
id -= EDJE_VAR_MAGIC_BASE;
538
if ((id < 0) || (id >= ed->var_pool->size)) return;
539
_edje_var_var_float_set(ed, &(ed->var_pool->vars[id]), v);
543
_edje_var_str_get(Edje *ed, int id)
545
if (!ed) return NULL;
546
if (!ed->var_pool) return NULL;
547
id -= EDJE_VAR_MAGIC_BASE;
548
if ((id < 0) || (id >= ed->var_pool->size)) return NULL;
549
return _edje_var_var_str_get(ed, &(ed->var_pool->vars[id]));
553
_edje_var_str_set(Edje *ed, int id, const char *str)
556
if (!ed->var_pool) return;
558
id -= EDJE_VAR_MAGIC_BASE;
559
if ((id < 0) || (id >= ed->var_pool->size)) return;
560
_edje_var_var_str_set(ed, &(ed->var_pool->vars[id]), str);
566
_edje_var_list_var_append(Edje *ed, int id, Edje_Var *var)
569
if (!ed->var_pool) return;
570
id -= EDJE_VAR_MAGIC_BASE;
571
if ((id < 0) || (id >= ed->var_pool->size)) return;
572
if (ed->var_pool->vars[id].type != EDJE_VAR_LIST) return;
573
ed->var_pool->vars[id].data.l.v = eina_list_append(ed->var_pool->vars[id].data.l.v, var);
577
_edje_var_list_var_prepend(Edje *ed, int id, Edje_Var *var)
580
if (!ed->var_pool) return;
581
id -= EDJE_VAR_MAGIC_BASE;
582
if ((id < 0) || (id >= ed->var_pool->size)) return;
583
if (ed->var_pool->vars[id].type != EDJE_VAR_LIST) return;
584
ed->var_pool->vars[id].data.l.v = eina_list_prepend(ed->var_pool->vars[id].data.l.v, var);
588
_edje_var_list_var_append_relative(Edje *ed, int id, Edje_Var *var, Edje_Var *relative)
591
if (!ed->var_pool) return;
592
id -= EDJE_VAR_MAGIC_BASE;
593
if ((id < 0) || (id >= ed->var_pool->size)) return;
594
if (ed->var_pool->vars[id].type != EDJE_VAR_LIST) return;
595
ed->var_pool->vars[id].data.l.v = eina_list_append_relative(ed->var_pool->vars[id].data.l.v, var, relative);
599
_edje_var_list_var_prepend_relative(Edje *ed, int id, Edje_Var *var, Edje_Var *relative)
602
if (!ed->var_pool) return;
603
id -= EDJE_VAR_MAGIC_BASE;
604
if ((id < 0) || (id >= ed->var_pool->size)) return;
605
if (ed->var_pool->vars[id].type != EDJE_VAR_LIST) return;
606
ed->var_pool->vars[id].data.l.v = eina_list_prepend_relative(ed->var_pool->vars[id].data.l.v, var, relative);
610
_edje_var_list_nth(Edje *ed, int id, int n)
612
if (!ed) return NULL;
613
if (!ed->var_pool) return NULL;
614
id -= EDJE_VAR_MAGIC_BASE;
615
if ((id < 0) || (id >= ed->var_pool->size)) return NULL;
616
if (ed->var_pool->vars[id].type != EDJE_VAR_LIST) return NULL;
617
return eina_list_nth(ed->var_pool->vars[id].data.l.v, n);
621
_edje_var_list_count_get(Edje *ed, int id)
624
if (!ed->var_pool) return 0;
625
id -= EDJE_VAR_MAGIC_BASE;
626
if ((id < 0) || (id >= ed->var_pool->size)) return 0;
627
if (ed->var_pool->vars[id].type == EDJE_VAR_NONE)
628
ed->var_pool->vars[id].type = EDJE_VAR_LIST;
629
else if (ed->var_pool->vars[id].type != EDJE_VAR_LIST)
631
return eina_list_count(ed->var_pool->vars[id].data.l.v);
635
_edje_var_list_remove_nth(Edje *ed, int id, int n)
638
if (!ed->var_pool) return;
639
id -= EDJE_VAR_MAGIC_BASE;
640
if ((id < 0) || (id >= ed->var_pool->size)) return;
641
if (ed->var_pool->vars[id].type == EDJE_VAR_NONE)
642
ed->var_pool->vars[id].type = EDJE_VAR_LIST;
643
else if (ed->var_pool->vars[id].type != EDJE_VAR_LIST)
648
nth = eina_list_nth_list(ed->var_pool->vars[id].data.l.v, n);
651
_edje_var_free(eina_list_data_get(nth));
652
ed->var_pool->vars[id].data.l.v = eina_list_remove_list(ed->var_pool->vars[id].data.l.v, nth);
658
_edje_var_list_nth_int_get(Edje *ed, int id, int n)
661
if (!ed->var_pool) return 0;
662
id -= EDJE_VAR_MAGIC_BASE;
663
if ((id < 0) || (id >= ed->var_pool->size)) return 0;
664
if (ed->var_pool->vars[id].type == EDJE_VAR_NONE)
665
ed->var_pool->vars[id].type = EDJE_VAR_LIST;
666
else if (ed->var_pool->vars[id].type != EDJE_VAR_LIST)
671
id += EDJE_VAR_MAGIC_BASE;
672
var = _edje_var_list_nth(ed, id, n);
674
return _edje_var_var_int_get(ed, var);
679
_edje_var_list_nth_int_set(Edje *ed, int id, int n, int v)
682
if (!ed->var_pool) return;
683
id -= EDJE_VAR_MAGIC_BASE;
684
if ((id < 0) || (id >= ed->var_pool->size)) return;
685
if (ed->var_pool->vars[id].type == EDJE_VAR_NONE)
686
ed->var_pool->vars[id].type = EDJE_VAR_LIST;
687
else if (ed->var_pool->vars[id].type != EDJE_VAR_LIST)
692
id += EDJE_VAR_MAGIC_BASE;
693
var = _edje_var_list_nth(ed, id, n);
695
_edje_var_var_int_set(ed, var, v);
700
_edje_var_list_int_append(Edje *ed, int id, int v)
703
if (!ed->var_pool) return;
704
id -= EDJE_VAR_MAGIC_BASE;
705
if ((id < 0) || (id >= ed->var_pool->size)) return;
706
if (ed->var_pool->vars[id].type == EDJE_VAR_NONE)
707
ed->var_pool->vars[id].type = EDJE_VAR_LIST;
708
else if (ed->var_pool->vars[id].type != EDJE_VAR_LIST)
713
var = _edje_var_new();
715
id += EDJE_VAR_MAGIC_BASE;
716
_edje_var_var_int_set(ed, var, v);
717
_edje_var_list_var_append(ed, id, var);
722
_edje_var_list_int_prepend(Edje *ed, int id, int v)
725
if (!ed->var_pool) return;
726
id -= EDJE_VAR_MAGIC_BASE;
727
if ((id < 0) || (id >= ed->var_pool->size)) return;
728
if (ed->var_pool->vars[id].type == EDJE_VAR_NONE)
729
ed->var_pool->vars[id].type = EDJE_VAR_LIST;
730
else if (ed->var_pool->vars[id].type != EDJE_VAR_LIST)
735
var = _edje_var_new();
737
id += EDJE_VAR_MAGIC_BASE;
738
_edje_var_var_int_set(ed, var, v);
739
_edje_var_list_var_prepend(ed, id, var);
744
_edje_var_list_int_insert(Edje *ed, int id, int n, int v)
747
if (!ed->var_pool) return;
748
id -= EDJE_VAR_MAGIC_BASE;
749
if ((id < 0) || (id >= ed->var_pool->size)) return;
750
if (ed->var_pool->vars[id].type == EDJE_VAR_NONE)
751
ed->var_pool->vars[id].type = EDJE_VAR_LIST;
752
else if (ed->var_pool->vars[id].type != EDJE_VAR_LIST)
755
Edje_Var *var, *var_rel;
757
var = _edje_var_new();
759
id += EDJE_VAR_MAGIC_BASE;
760
_edje_var_var_int_set(ed, var, v);
761
var_rel = _edje_var_list_nth(ed, id, n);
763
_edje_var_list_var_append(ed, id, var);
765
_edje_var_list_var_prepend_relative(ed, id, var, var_rel);
770
_edje_var_list_nth_float_get(Edje *ed, int id, int n)
773
if (!ed->var_pool) return 0;
774
id -= EDJE_VAR_MAGIC_BASE;
775
if ((id < 0) || (id >= ed->var_pool->size)) return 0;
776
if (ed->var_pool->vars[id].type == EDJE_VAR_NONE)
777
ed->var_pool->vars[id].type = EDJE_VAR_LIST;
778
else if (ed->var_pool->vars[id].type != EDJE_VAR_LIST)
783
id += EDJE_VAR_MAGIC_BASE;
784
var = _edje_var_list_nth(ed, id, n);
786
return _edje_var_var_float_get(ed, var);
791
_edje_var_list_nth_float_set(Edje *ed, int id, int n, double v)
794
if (!ed->var_pool) return;
795
id -= EDJE_VAR_MAGIC_BASE;
796
if ((id < 0) || (id >= ed->var_pool->size)) return;
797
if (ed->var_pool->vars[id].type == EDJE_VAR_NONE)
798
ed->var_pool->vars[id].type = EDJE_VAR_LIST;
799
else if (ed->var_pool->vars[id].type != EDJE_VAR_LIST)
804
id += EDJE_VAR_MAGIC_BASE;
805
var = _edje_var_list_nth(ed, id, n);
807
_edje_var_var_float_set(ed, var, v);
812
_edje_var_list_float_append(Edje *ed, int id, double v)
815
if (!ed->var_pool) return;
816
id -= EDJE_VAR_MAGIC_BASE;
817
if ((id < 0) || (id >= ed->var_pool->size)) return;
818
if (ed->var_pool->vars[id].type == EDJE_VAR_NONE)
819
ed->var_pool->vars[id].type = EDJE_VAR_LIST;
820
else if (ed->var_pool->vars[id].type != EDJE_VAR_LIST)
825
var = _edje_var_new();
827
id += EDJE_VAR_MAGIC_BASE;
828
_edje_var_var_float_set(ed, var, v);
829
_edje_var_list_var_append(ed, id, var);
834
_edje_var_list_float_prepend(Edje *ed, int id, double v)
837
if (!ed->var_pool) return;
838
id -= EDJE_VAR_MAGIC_BASE;
839
if ((id < 0) || (id >= ed->var_pool->size)) return;
840
if (ed->var_pool->vars[id].type == EDJE_VAR_NONE)
841
ed->var_pool->vars[id].type = EDJE_VAR_LIST;
842
else if (ed->var_pool->vars[id].type != EDJE_VAR_LIST)
847
var = _edje_var_new();
849
id += EDJE_VAR_MAGIC_BASE;
850
_edje_var_var_float_set(ed, var, v);
851
_edje_var_list_var_prepend(ed, id, var);
856
_edje_var_list_float_insert(Edje *ed, int id, int n, double v)
859
if (!ed->var_pool) return;
860
id -= EDJE_VAR_MAGIC_BASE;
861
if ((id < 0) || (id >= ed->var_pool->size)) return;
862
if (ed->var_pool->vars[id].type == EDJE_VAR_NONE)
863
ed->var_pool->vars[id].type = EDJE_VAR_LIST;
864
else if (ed->var_pool->vars[id].type != EDJE_VAR_LIST)
867
Edje_Var *var, *var_rel;
869
var = _edje_var_new();
871
id += EDJE_VAR_MAGIC_BASE;
872
_edje_var_var_float_set(ed, var, v);
873
var_rel = _edje_var_list_nth(ed, id, n);
875
_edje_var_list_var_append(ed, id, var);
877
_edje_var_list_var_prepend_relative(ed, id, var, var_rel);
882
_edje_var_list_nth_str_get(Edje *ed, int id, int n)
884
if (!ed) return NULL;
885
if (!ed->var_pool) return NULL;
886
id -= EDJE_VAR_MAGIC_BASE;
887
if ((id < 0) || (id >= ed->var_pool->size)) return NULL;
888
if (ed->var_pool->vars[id].type == EDJE_VAR_NONE)
889
ed->var_pool->vars[id].type = EDJE_VAR_LIST;
890
else if (ed->var_pool->vars[id].type != EDJE_VAR_LIST)
895
id += EDJE_VAR_MAGIC_BASE;
896
var = _edje_var_list_nth(ed, id, n);
897
if (!var) return NULL;
898
return _edje_var_var_str_get(ed, var);
903
_edje_var_list_nth_str_set(Edje *ed, int id, int n, const char *v)
906
if (!ed->var_pool) return;
907
id -= EDJE_VAR_MAGIC_BASE;
908
if ((id < 0) || (id >= ed->var_pool->size)) return;
909
if (ed->var_pool->vars[id].type == EDJE_VAR_NONE)
910
ed->var_pool->vars[id].type = EDJE_VAR_LIST;
911
else if (ed->var_pool->vars[id].type != EDJE_VAR_LIST)
916
id += EDJE_VAR_MAGIC_BASE;
917
var = _edje_var_list_nth(ed, id, n);
919
_edje_var_var_str_set(ed, var, v);
924
_edje_var_list_str_append(Edje *ed, int id, const char *v)
927
if (!ed->var_pool) return;
928
id -= EDJE_VAR_MAGIC_BASE;
929
if ((id < 0) || (id >= ed->var_pool->size)) return;
930
if (ed->var_pool->vars[id].type == EDJE_VAR_NONE)
931
ed->var_pool->vars[id].type = EDJE_VAR_LIST;
932
else if (ed->var_pool->vars[id].type != EDJE_VAR_LIST)
937
var = _edje_var_new();
939
id += EDJE_VAR_MAGIC_BASE;
940
_edje_var_var_str_set(ed, var, v);
941
_edje_var_list_var_append(ed, id, var);
946
_edje_var_list_str_prepend(Edje *ed, int id, const char *v)
949
if (!ed->var_pool) return;
950
id -= EDJE_VAR_MAGIC_BASE;
951
if ((id < 0) || (id >= ed->var_pool->size)) return;
952
if (ed->var_pool->vars[id].type == EDJE_VAR_NONE)
953
ed->var_pool->vars[id].type = EDJE_VAR_LIST;
954
else if (ed->var_pool->vars[id].type != EDJE_VAR_LIST)
959
var = _edje_var_new();
961
id += EDJE_VAR_MAGIC_BASE;
962
_edje_var_var_str_set(ed, var, v);
963
_edje_var_list_var_prepend(ed, id, var);
968
_edje_var_list_str_insert(Edje *ed, int id, int n, const char *v)
971
if (!ed->var_pool) return;
972
id -= EDJE_VAR_MAGIC_BASE;
973
if ((id < 0) || (id >= ed->var_pool->size)) return;
974
if (ed->var_pool->vars[id].type == EDJE_VAR_NONE)
975
ed->var_pool->vars[id].type = EDJE_VAR_LIST;
976
else if (ed->var_pool->vars[id].type != EDJE_VAR_LIST)
979
Edje_Var *var, *var_rel;
981
var = _edje_var_new();
983
id += EDJE_VAR_MAGIC_BASE;
984
_edje_var_var_str_set(ed, var, v);
985
var_rel = _edje_var_list_nth(ed, id, n);
987
_edje_var_list_var_append(ed, id, var);
989
_edje_var_list_var_prepend_relative(ed, id, var, var_rel);
994
_edje_var_timer_add(Edje *ed, double in, const char *fname, int val)
999
if (!ed->var_pool) return 0;
1000
fn = embryo_program_function_find(ed->collection->script, (char *)fname);
1001
if (fn == EMBRYO_FUNCTION_NONE) return 0;
1002
et = calloc(1, sizeof(Edje_Var_Timer));
1004
et->id = ++ed->var_pool->id_count;
1008
et->timer = ecore_timer_add(in, _edje_var_timer_cb, et);
1014
ed->var_pool->timers = eina_inlist_prepend(ed->var_pool->timers,
1015
EINA_INLIST_GET(et));
1019
static Edje_Var_Timer *
1020
_edje_var_timer_find(Edje *ed, int id)
1024
if (!ed->var_pool) return NULL;
1026
EINA_INLIST_FOREACH(ed->var_pool->timers, et)
1027
if (et->id == id) return et;
1033
_edje_var_timer_del(Edje *ed, int id)
1037
et = _edje_var_timer_find(ed, id);
1040
ed->var_pool->timers = eina_inlist_remove(ed->var_pool->timers,
1041
EINA_INLIST_GET(et));
1042
ecore_timer_del(et->timer);
1047
_edje_var_timer_reset(Edje *ed, int id)
1051
et = _edje_var_timer_find(ed, id);
1053
ecore_timer_reset(et->timer);
1057
_edje_var_anim_add(Edje *ed, double len, const char *fname, int val)
1059
Edje_Var_Animator *ea;
1062
if (!ed->var_pool) return 0;
1063
if (len <= 0.0) return 0;
1064
fn = embryo_program_function_find(ed->collection->script, (char *)fname);
1065
if (fn == EMBRYO_FUNCTION_NONE) return 0;
1066
ea = calloc(1, sizeof(Edje_Var_Animator));
1068
ea->start = ecore_loop_time_get();
1070
ea->id = ++ed->var_pool->id_count;
1074
if (!ed->var_pool->animators)
1075
_edje_anim_list = eina_list_append(_edje_anim_list, ed);
1076
ed->var_pool->animators = eina_list_prepend(ed->var_pool->animators, ea);
1077
if (!_edje_animator)
1078
_edje_animator = ecore_animator_add(_edje_var_anim_cb, NULL);
1082
static Edje_Var_Animator *
1083
_edje_var_anim_find(Edje *ed, int id)
1086
Edje_Var_Animator *ea;
1088
if (!ed->var_pool) return NULL;
1090
EINA_LIST_FOREACH(ed->var_pool->animators, l, ea)
1091
if (ea->id == id) return ea;
1097
_edje_var_anim_del(Edje *ed, int id)
1099
Edje_Var_Animator *ea;
1101
ea = _edje_var_anim_find(ed, id);
1104
if (ed->var_pool->walking_list)
1110
ed->var_pool->animators = eina_list_remove(ed->var_pool->animators, ea);
1113
if (ed->var_pool->animators) return;
1115
_edje_anim_list = eina_list_remove(_edje_anim_list, ed);
1116
if (!_edje_anim_list)
1120
ecore_animator_del(_edje_animator);
1121
_edje_animator = NULL;