1 #include "edje_private.h"
4 /////////////////////////////////////////////////////////////////////////////
5 // the below is deprecated and here for reference only until removed. look
6 // at edje_lua2.c for the active workign code
7 /////////////////////////////////////////////////////////////////////////////
12 #define EDJE_LUA_GET 1
13 #define EDJE_LUA_SET 2
16 typedef struct _Edje_Lua_Alloc Edje_Lua_Alloc;
18 typedef struct _Edje_Lua_Ref Edje_Lua_Ref;
20 typedef struct _Edje_Lua_Reg Edje_Lua_Reg;
22 typedef struct _Edje_Lua_Timer Edje_Lua_Timer;
24 typedef struct _Edje_Lua_Animator Edje_Lua_Animator;
26 typedef struct _Edje_Lua_Poller Edje_Lua_Poller;
28 typedef struct _Edje_Lua_Transform Edje_Lua_Transform;
30 typedef struct _Edje_Lua_Transition Edje_Lua_Transition;
32 typedef struct _Edje_Lua_Evas_Object Edje_Lua_Evas_Object;
34 typedef struct _Edje_Lua_Edje_Part_Object Edje_Lua_Edje_Part_Object;
36 typedef struct _Edje_Lua_Edje_Part_Description Edje_Lua_Edje_Part_Description;
38 struct _Edje_Lua_Alloc
40 size_t max, cur; /* maximal and current memory used by Lua */
51 const luaL_Reg *mt, *get, *set, *fn;
54 struct _Edje_Lua_Timer
61 struct _Edje_Lua_Animator
68 struct _Edje_Lua_Poller
75 struct _Edje_Lua_Transform
81 struct _Edje_Lua_Transition
91 struct _Edje_Lua_Evas_Object
96 Eina_Bool mouse_events;
100 struct _Edje_Lua_Edje_Part_Object
109 struct _Edje_Lua_Edje_Part_Description
115 Edje_Part_Description *pd;
118 jmp_buf _edje_lua_panic_jmp;
121 _edje_lua_custom_panic(__UNUSED__ lua_State *L)
124 longjmp(_edje_lua_panic_jmp, 1);
125 return 1; /* longjmp() never returns, but this keep gcc happy */
129 __edje_lua_error(const char *file, const char *fnc, int line, lua_State *L, int err_code)
136 err_type = "runtime";
142 err_type = "memory allocation";
145 err_type = "error handler";
148 err_type = "unknown";
152 (_edje_default_log_dom, EINA_LOG_LEVEL_ERR, file, fnc, line,
153 "Lua %s error: %s", err_type, lua_tostring(L, -1));
154 // don't exit. this is BAD. lua script bugs will cause thngs like e to
155 // exit mysteriously ending your x session. bad!
160 _edje_lua_new_thread(Edje *ed, lua_State *L)
164 ed->lua_ref = luaL_ref(L, LUA_REGISTRYINDEX);
165 /* inherit new environment from global environment */
166 lua_createtable(L, 1, 0);
167 lua_pushvalue(L, LUA_GLOBALSINDEX);
168 lua_setfield(L, -2, "__index");
169 lua_setmetatable(L, -2);
173 /* create new thread */
174 lua_State *thread = lua_newthread(L);
175 //printf ("new thread %d->%d\n", L, thread);
176 /* create new environment for new thread */
178 /* inherit new environment from global environment */
179 lua_createtable(L, 1, 0);
180 lua_pushvalue(L, LUA_GLOBALSINDEX);
181 lua_setfield(L, -2, "__index");
182 lua_setmetatable(L, -2);
189 _edje_lua_free_thread(Edje *ed, lua_State *L)
192 luaL_unref(L, LUA_REGISTRYINDEX, ed->lua_ref);
193 lua_gc(L, LUA_GCCOLLECT, 0);
198 while (lua_next(L, -2))
200 // key at -2, value at -1
202 lua_pushvalue(L, -1);
207 lua_gc(L, LUA_GCCOLLECT, 0);
212 * only for debug, returns number of objects in registry
215 _edje_lua_reg_count (lua_State *L)
218 lua_pushvalue(L, LUA_REGISTRYINDEX);
220 while (lua_next(L, -2))
222 // key at -2, value at -1
230 static Edje_Lua_Ref *
231 _edje_lua_new_ref(lua_State *L, int index)
233 lua_pushvalue(L, index);
234 Edje_Lua_Ref *ref = malloc(sizeof(Edje_Lua_Ref));
235 ref->id = luaL_ref(L, LUA_REGISTRYINDEX);
241 _edje_lua_get_ref(lua_State *L, Edje_Lua_Ref *ref)
243 lua_rawgeti(L, LUA_REGISTRYINDEX, ref->id);
247 _edje_lua_free_ref(lua_State *L, Edje_Lua_Ref *ref)
249 //printf ("_edje_lua_free_ref %d %d %d\n", L, lua_objlen(L, LUA_REGISTRYINDEX), _edje_lua_reg_count(L));
250 luaL_unref(L, LUA_REGISTRYINDEX, ref->id);
252 lua_gc(L, LUA_GCCOLLECT, 0);
256 _edje_lua_new_reg(lua_State *L, int index, void *ptr)
258 //printf ("_edje_lua_new_reg %d %d %d\n", L, ptr, _edje_lua_reg_count(L));
259 lua_pushvalue(L, index);
260 lua_pushlightuserdata(L, ptr);
262 lua_rawset(L, LUA_REGISTRYINDEX); /* freed in _edje_lua_free_reg */
266 _edje_lua_get_reg(lua_State *L, void *ptr)
268 //printf ("_edje_lua_get_reg %d %d\n", L, ptr);
269 lua_pushlightuserdata(L, ptr);
270 lua_rawget(L, LUA_REGISTRYINDEX);
274 _edje_lua_free_reg(lua_State *L, void *ptr)
276 //printf ("_edje_lua_free_reg %d %d %d\n", L, ptr, _edje_lua_reg_count(L));
277 lua_pushlightuserdata(L, ptr);
279 lua_rawset(L, LUA_REGISTRYINDEX); /* created in _edje_lua_new_reg */
280 lua_gc(L, LUA_GCCOLLECT, 0);
284 _edje_lua_rawsetfield(lua_State *L, int index, const char *key)
286 lua_pushstring(L, key);
289 lua_rawset(L, index - 1);
291 lua_rawset(L, index);
295 _edje_lua_rawgetfield(lua_State *L, int index, const char *key)
297 lua_pushstring(L, key);
299 lua_rawget(L, index - 1);
301 lua_rawget(L, index);
305 _edje_lua_new_const(lua_State *L, const char *id, int val)
307 lua_pushnumber(L, val);
308 lua_setglobal(L, id);
312 _edje_lua_new_metatable(lua_State *L, const Edje_Lua_Reg ** class)
315 lua_pushlightuserdata(L, class);
316 lua_pushvalue(L, -2);
317 lua_rawset(L, LUA_REGISTRYINDEX); /* freed in _edje_lua_free_metatable */
318 lua_pushvalue(L, -1);
319 lua_pushlightuserdata(L, class);
320 lua_rawset(L, LUA_REGISTRYINDEX); /* freed in _edje_lua_free_metatable */
324 _edje_lua_get_metatable(lua_State *L, const Edje_Lua_Reg ** class)
326 lua_pushlightuserdata(L, class);
327 lua_rawget(L, LUA_REGISTRYINDEX);
331 _edje_lua_free_metatable(lua_State *L, const Edje_Lua_Reg ** class)
333 lua_pushlightuserdata(L, class);
334 lua_rawget(L, LUA_REGISTRYINDEX);
336 lua_rawset(L, LUA_REGISTRYINDEX); /* created in _edje_lua_new_metatable */
337 lua_pushlightuserdata(L, class);
339 lua_rawset(L, LUA_REGISTRYINDEX); /* created in _edje_lua_new_metatable */
340 lua_gc(L, LUA_GCCOLLECT, 0);
344 _edje_lua_checkudata(lua_State *L, int pos, const Edje_Lua_Reg * module)
346 luaL_checktype(L, pos, LUA_TUSERDATA);
347 lua_getmetatable(L, pos);
348 lua_rawget(L, LUA_REGISTRYINDEX);
349 Edje_Lua_Reg **class = lua_touserdata(L, -1);
350 lua_pop(L, 1); // class
353 while (class[ptr] && !flag)
354 if (class[ptr++] == module)
358 lua_pushstring(L, "class type mismatch");
361 return lua_touserdata(L, pos);
365 _edje_lua_new_class(lua_State *L, const Edje_Lua_Reg ** class)
368 _edje_lua_new_metatable(L, class);
369 while (class && (class[n] != NULL))
371 luaL_register(L, NULL, class[n]->mt);
372 lua_pushstring(L, "hands off, it's none of your business!");
373 _edje_lua_rawsetfield(L, -2, "__metatable");
378 luaL_register(L, NULL, class[n]->set);
379 lua_rawseti (L, -2, EDJE_LUA_SET);
382 luaL_register(L, NULL, class[n]->get);
383 lua_rawseti (L, -2, EDJE_LUA_GET);
386 luaL_register(L, NULL, class[n]->fn);
387 lua_rawseti (L, -2, EDJE_LUA_FN);
391 lua_rawgeti(L, -1, EDJE_LUA_SET);
392 luaL_register(L, NULL, class[n]->set);
395 lua_rawgeti(L, -1, EDJE_LUA_GET);
396 luaL_register(L, NULL, class[n]->get);
399 lua_rawgeti(L, -1, EDJE_LUA_FN);
400 luaL_register(L, NULL, class[n]->fn);
408 _edje_lua_set_class(lua_State *L, int index, const Edje_Lua_Reg ** class)
412 lua_setfenv(L, index - 1);
414 lua_setfenv(L, index);
416 _edje_lua_get_metatable(L, class);
418 lua_setmetatable(L, index - 1);
420 lua_setmetatable(L, index);
424 _edje_lua_look_fn(lua_State *L)
426 lua_rawgeti(L, -1, EDJE_LUA_FN);
427 lua_pushvalue(L, 2); // key
428 lua_rawget(L, -2); // .fn[key]
429 if (lua_iscfunction(L, -1))
433 lua_pop(L, 2); // .fn[key], .fn
439 _edje_lua_look_get(lua_State *L)
441 lua_rawgeti(L, -1, EDJE_LUA_GET);
442 lua_pushvalue(L, 2); // key
443 lua_rawget(L, -2); // .get[key]
444 if (lua_iscfunction(L, -1))
450 if ((err_code = lua_pcall(L, 1, 1, 0)))
451 _edje_lua_error(L, err_code);
456 lua_pop(L, 2); // .get[key], .get
462 _edje_lua_look_set(lua_State *L)
464 lua_rawgeti(L, -1, EDJE_LUA_SET);
465 lua_pushvalue(L, 2); // key
466 lua_rawget(L, -2); // .set[key]
467 if (lua_iscfunction(L, -1))
471 lua_pushvalue(L, 1); // obj
472 lua_pushvalue(L, 3); // value
474 if ((err_code = lua_pcall(L, 2, 0, 0))) // .set[key](obj,key,value)
475 _edje_lua_error(L, err_code);
480 lua_pop(L, 2); // .set[key], .set
489 const luaL_Reg lNil[] = {
490 {NULL, NULL} // sentinel
493 const luaL_Reg lClass_mt[];
495 const luaL_Reg lClass_fn[];
497 const Edje_Lua_Reg mClass = {
505 _edje_lua_class_mt_index(lua_State *L)
507 _edje_lua_checkudata(L, 1, &mClass);
508 lua_getmetatable(L, 1);
509 if (!_edje_lua_look_fn(L)) // look in lClass_fn
510 if (!_edje_lua_look_get(L)) // look in lClass_get
511 { // look in obj ref hash
513 lua_pushvalue(L, 2); // key
520 _edje_lua_class_mt_newindex(lua_State *L)
522 _edje_lua_checkudata(L, 1, &mClass);
523 lua_getmetatable(L, 1);
524 if (!_edje_lua_look_set(L)) // look in lClass_set
525 { // look in obj ref hash
535 _edje_lua_class_mt_gc(lua_State *L)
537 _edje_lua_checkudata(L, 1, &mClass);
538 //printf("_edje_lua_class_mt_gc\n");
539 /* FIXME has to be commented to not raise an error, solve differently
540 lua_getfield(L, 1, "del");
541 if (!lua_isnil(L, -1))
546 if (err_code = lua_pcall(L, 1, 0, 0))
547 _edje_lua_error(L, err_code);
555 _edje_lua_class_fn_set(lua_State *L)
557 _edje_lua_checkudata(L, 1, &mClass);
559 * for k,v in pairs(table) do
564 while (lua_next(L, 2))
566 // key at -2, value at -1
567 lua_pushvalue(L, -2);
575 _edje_lua_class_fn_get(lua_State *L)
577 _edje_lua_checkudata(L, 1, &mClass);
580 * mtG = getmetatable(obj)['.get']
581 * for k,v in pairs(mtG) do
585 lua_newtable(L); // res
586 lua_getmetatable(L, 1); // mt
587 lua_getfield(L, -1, ".get");
588 lua_remove(L, -2); // mt
591 while (lua_next(L, -2))
593 // key at -2, value at -1
594 lua_pop(L, 1); // value = cfunction
595 lua_pushvalue(L, -1); // key
596 lua_pushvalue(L, -1); // key
597 lua_gettable(L, 1); // obj[key]
598 lua_settable(L, 2); // res[key]
600 lua_pop(L, 1); // .get
605 _edje_lua_class_itr_call(lua_State *L, int id)
609 _edje_lua_checkudata(L, 1, &mClass);
610 lua_getmetatable(L, 1); // mt
611 lua_rawgeti(L, -1, id);
612 lua_remove(L, -2); // mt
613 lua_getglobal(L, "pairs");
616 if ((err_code = lua_pcall(L, 1, 3, 0)))
617 _edje_lua_error(L, err_code);
622 _edje_lua_class_fn_gpairs(lua_State *L)
624 _edje_lua_checkudata(L, 1, &mClass);
625 return _edje_lua_class_itr_call(L, EDJE_LUA_GET);
629 _edje_lua_class_fn_spairs(lua_State *L)
631 _edje_lua_checkudata(L, 1, &mClass);
632 return _edje_lua_class_itr_call(L, EDJE_LUA_SET);
636 _edje_lua_class_fn_fpairs(lua_State *L)
638 _edje_lua_checkudata(L, 1, &mClass);
639 return _edje_lua_class_itr_call(L, EDJE_LUA_FN);
643 _edje_lua_class_fn_pairs(lua_State *L)
647 _edje_lua_checkudata(L, 1, &mClass);
649 lua_getglobal(L, "pairs");
652 if ((err_code = lua_pcall(L, 1, 3, 0)))
653 _edje_lua_error(L, err_code);
658 _edje_lua_class_fn_ipairs(lua_State *L)
662 _edje_lua_checkudata(L, 1, &mClass);
664 lua_getglobal(L, "ipairs");
667 if ((err_code = lua_pcall(L, 1, 3, 0)))
668 _edje_lua_error(L, err_code);
672 const luaL_Reg lClass_mt[] = {
673 {"__index", _edje_lua_class_mt_index},
674 {"__newindex", _edje_lua_class_mt_newindex},
675 {"__gc", _edje_lua_class_mt_gc},
676 {NULL, NULL} // sentinel
679 const luaL_Reg lClass_fn[] = {
680 {"get", _edje_lua_class_fn_get},
681 {"set", _edje_lua_class_fn_set},
682 {"gpairs", _edje_lua_class_fn_gpairs},
683 {"spairs", _edje_lua_class_fn_spairs},
684 {"fpairs", _edje_lua_class_fn_fpairs},
685 {"pairs", _edje_lua_class_fn_pairs},
686 {"ipairs", _edje_lua_class_fn_ipairs},
687 {NULL, NULL} // sentinel
691 const luaL_Reg lTimer_get[];
693 const luaL_Reg lTimer_set[];
695 const luaL_Reg lTimer_fn[];
697 const Edje_Lua_Reg mTimer = {
704 const Edje_Lua_Reg *cTimer[] = {
711 _edje_lua_timer_cb(void *data)
713 Edje_Lua_Timer *obj = data;
714 lua_State *L = obj->L;
718 _edje_lua_get_ref(L, obj->cb); // callback function
719 _edje_lua_get_reg(L, obj);
721 if ((err_code = lua_pcall(L, 1, 1, 0)))
723 _edje_lua_error(L, err_code);
724 return ECORE_CALLBACK_CANCEL;
727 res = luaL_optint(L, -1, ECORE_CALLBACK_CANCEL);
728 lua_pop(L, 1); // -- res
731 if (_edje_lua_panic_here())
734 lua_pop(L, 1); // -- res
736 if (res == ECORE_CALLBACK_CANCEL)
739 _edje_lua_get_reg(L, obj);
740 lua_pushvalue(L, -1);
741 lua_pushstring(L, "del");
744 if ((err_code = lua_pcall(L, 1, 0, 0)))
745 _edje_lua_error(L, err_code);
751 _edje_lua_timer_get_pending(lua_State *L)
753 Edje_Lua_Timer *obj = _edje_lua_checkudata(L, 1, &mTimer);
755 lua_pushnumber(L, ecore_timer_pending_get(obj->et));
762 _edje_lua_timer_get_precision(lua_State *L)
764 Edje_Lua_Timer *obj = _edje_lua_checkudata(L, 1, &mTimer);
767 lua_pushnumber(L, ecore_timer_precision_get());
775 _edje_lua_timer_get_interval(lua_State *L)
777 Edje_Lua_Timer *obj = _edje_lua_checkudata(L, 1, &mTimer);
780 lua_pushnumber(L, ecore_timer_interval_get(obj->et));
787 const luaL_Reg lTimer_get[] = {
788 {"pending", _edje_lua_timer_get_pending},
789 {"precision", _edje_lua_timer_get_precision},
790 {"interval", _edje_lua_timer_get_interval},
791 {NULL, NULL} // sentinel
795 _edje_lua_timer_set_interval(lua_State *L)
797 Edje_Lua_Timer *obj = _edje_lua_checkudata(L, 1, &mTimer);
799 ecore_timer_interval_set(obj->et, luaL_checknumber(L, 2));
803 const luaL_Reg lTimer_set[] = {
804 {"interval", _edje_lua_timer_set_interval},
805 {NULL, NULL} // sentinel
809 _edje_lua_timer_fn_del(lua_State *L)
811 Edje_Lua_Timer *obj = _edje_lua_checkudata(L, 1, &mTimer);
814 ecore_timer_del(obj->et);
819 _edje_lua_free_ref(L, obj->cb); // created in _edje_lua_group_fn_timer
822 _edje_lua_free_reg(L, obj); // created in _edje_lua_group_fn_timer
827 _edje_lua_timer_fn_freeze(lua_State *L)
829 Edje_Lua_Timer *obj = _edje_lua_checkudata(L, 1, &mTimer);
831 ecore_timer_freeze(obj->et);
836 _edje_lua_timer_fn_thaw(lua_State *L)
838 Edje_Lua_Timer *obj = _edje_lua_checkudata(L, 1, &mTimer);
840 ecore_timer_thaw(obj->et);
845 _edje_lua_timer_fn_delay(lua_State *L)
847 Edje_Lua_Timer *obj = _edje_lua_checkudata(L, 1, &mTimer);
849 ecore_timer_delay(obj->et, luaL_checknumber(L, 2));
853 const luaL_Reg lTimer_fn[] = {
854 {"del", _edje_lua_timer_fn_del},
855 {"freeze", _edje_lua_timer_fn_freeze},
856 {"thaw", _edje_lua_timer_fn_thaw},
857 {"delay", _edje_lua_timer_fn_delay},
858 {NULL, NULL} // sentinel
861 const luaL_Reg lAnimator_get[];
863 const luaL_Reg lAnimator_fn[];
865 const Edje_Lua_Reg mAnimator = {
872 const Edje_Lua_Reg *cAnimator[] = {
879 _edje_lua_animator_cb(void *data)
883 Edje_Lua_Animator *obj = data;
884 lua_State *L = obj->L;
886 _edje_lua_get_ref(L, obj->cb);
887 _edje_lua_get_reg(L, obj);
889 if ((err = lua_pcall(L, 1, 1, 0)))
891 _edje_lua_error(L, err);
892 return ECORE_CALLBACK_CANCEL;
895 res = luaL_checkint(L, -1);
896 lua_pop(L, 1); // Pop res off the stack
897 if (res == ECORE_CALLBACK_CANCEL)
899 /* delete animator */
900 _edje_lua_get_reg(L, obj);
901 lua_pushvalue(L, -1);
902 lua_pushstring(L, "del");
905 if ((err = lua_pcall(L, 1, 0, 0)))
906 _edje_lua_error(L, err);
913 _edje_lua_animator_get_frametime(lua_State *L)
915 Edje_Lua_Animator *obj = _edje_lua_checkudata(L, 1, &mAnimator);
918 lua_pushnumber(L, ecore_animator_frametime_get());
925 const luaL_Reg lAnimator_get[] = {
926 {"frametime", _edje_lua_animator_get_frametime},
931 _edje_lua_animator_fn_del(lua_State *L)
933 Edje_Lua_Animator *obj = _edje_lua_checkudata(L, 1, &mAnimator);
936 ecore_animator_del(obj->ea);
941 _edje_lua_free_ref(L, obj->cb); // created in _edje_lua_group_fn_animator
944 _edje_lua_free_reg(L, obj); // created in _edje_lua_group_fn_animator
948 const luaL_Reg lAnimator_fn[] = {
949 {"del", _edje_lua_animator_fn_del},
950 {NULL, NULL} // sentinel
953 const luaL_Reg lPoller_get[];
955 const luaL_Reg lPoller_fn[];
957 const Edje_Lua_Reg mPoller = {
964 const Edje_Lua_Reg *cPoller[] = {
971 _edje_lua_poller_cb(void *data)
975 Edje_Lua_Poller *obj = data;
976 lua_State *L = obj->L;
978 _edje_lua_get_ref(L, obj->cb);
979 _edje_lua_get_reg(L, obj);
981 if ((err = lua_pcall(L, 1, 1, 0)))
983 _edje_lua_error(L, err);
984 return ECORE_CALLBACK_CANCEL;
987 res = luaL_checkint(L, -1);
988 lua_pop(L, 1); // Pop res off the stack
989 if (res == ECORE_CALLBACK_CANCEL)
992 _edje_lua_get_reg(L, obj);
993 lua_pushvalue(L, -1);
994 lua_pushstring(L, "del");
997 if ((err = lua_pcall(L, 1, 0, 0)))
998 _edje_lua_error(L, err);
1005 _edje_lua_poller_get_interval(lua_State *L)
1007 Edje_Lua_Poller *obj = _edje_lua_checkudata(L, 1, &mPoller);
1010 lua_pushnumber(L, ecore_poller_poll_interval_get(ECORE_POLLER_CORE));
1017 const luaL_Reg lPoller_get[] = {
1018 {"interval", _edje_lua_poller_get_interval},
1023 _edje_lua_poller_fn_del(lua_State *L)
1025 Edje_Lua_Poller *obj = _edje_lua_checkudata(L, 1, &mPoller);
1028 ecore_poller_del(obj->ep);
1034 _edje_lua_free_ref(L, obj->cb); // created in _edje_lua_group_fn_poller
1037 _edje_lua_free_reg(L, obj); // created in _edje_lua_group_fn_poller
1042 const luaL_Reg lPoller_fn[] = {
1043 {"del", _edje_lua_poller_fn_del},
1048 * Lua Edje Transform bindings
1051 const luaL_Reg lTransform_get[];
1053 const luaL_Reg lTransform_set[];
1055 const luaL_Reg lTransform_fn[];
1057 const Edje_Lua_Reg mTransform = {
1064 const Edje_Lua_Reg *cTransform[] = {
1071 _edje_lua_transform_get_matrix(lua_State *L)
1073 Edje_Lua_Transform *obj = _edje_lua_checkudata(L, 1, &mTransform);
1074 lua_createtable(L, 3, 0);
1075 lua_createtable(L, 3, 0);
1076 lua_pushnumber(L, obj->et.mxx); lua_rawseti(L, -2, 1);
1077 lua_pushnumber(L, obj->et.mxy); lua_rawseti(L, -2, 2);
1078 lua_pushnumber(L, obj->et.mxz); lua_rawseti(L, -2, 3);
1079 lua_rawseti(L, -2, 1);
1080 lua_createtable(L, 3, 0);
1081 lua_pushnumber(L, obj->et.myx); lua_rawseti(L, -2, 1);
1082 lua_pushnumber(L, obj->et.myy); lua_rawseti(L, -2, 2);
1083 lua_pushnumber(L, obj->et.myz); lua_rawseti(L, -2, 3);
1084 lua_rawseti(L, -2, 2);
1085 lua_createtable(L, 3, 0);
1086 lua_pushnumber(L, obj->et.mzx); lua_rawseti(L, -2, 1);
1087 lua_pushnumber(L, obj->et.mzy); lua_rawseti(L, -2, 2);
1088 lua_pushnumber(L, obj->et.mzz); lua_rawseti(L, -2, 3);
1089 lua_rawseti(L, -2, 3);
1093 const luaL_Reg lTransform_get[] = {
1094 {"matrix", _edje_lua_transform_get_matrix},
1095 {NULL, NULL} // sentinel
1099 _edje_lua_transform_set_matrix(lua_State *L)
1101 Edje_Lua_Transform *obj = _edje_lua_checkudata(L, 1, &mTransform);
1102 luaL_checktype(L, 2, LUA_TTABLE);
1103 lua_rawgeti(L, 2, 1);
1104 luaL_checktype(L, -1, LUA_TTABLE);
1105 lua_rawgeti(L, -1, 1); obj->et.mxx = luaL_checknumber(L, -1); lua_pop(L, 1);
1106 lua_rawgeti(L, -1, 2); obj->et.mxy = luaL_checknumber(L, -1); lua_pop(L, 1);
1107 lua_rawgeti(L, -1, 3); obj->et.mxz = luaL_checknumber(L, -1); lua_pop(L, 1);
1109 lua_rawgeti(L, 2, 2);
1110 luaL_checktype(L, -1, LUA_TTABLE);
1111 lua_rawgeti(L, -1, 1); obj->et.myx = luaL_checknumber(L, -1); lua_pop(L, 1);
1112 lua_rawgeti(L, -1, 2); obj->et.myy = luaL_checknumber(L, -1); lua_pop(L, 1);
1113 lua_rawgeti(L, -1, 3); obj->et.myz = luaL_checknumber(L, -1); lua_pop(L, 1);
1115 lua_rawgeti(L, 2, 3);
1116 luaL_checktype(L, -1, LUA_TTABLE);
1117 lua_rawgeti(L, -1, 1); obj->et.mzx = luaL_checknumber(L, -1); lua_pop(L, 1);
1118 lua_rawgeti(L, -1, 2); obj->et.mzy = luaL_checknumber(L, -1); lua_pop(L, 1);
1119 lua_rawgeti(L, -1, 3); obj->et.mzz = luaL_checknumber(L, -1); lua_pop(L, 1);
1124 const luaL_Reg lTransform_set[] = {
1125 {"matrix", _edje_lua_transform_set_matrix},
1126 {NULL, NULL} // sentinel
1130 _edje_lua_transform_fn_identity(lua_State *L)
1132 Edje_Lua_Transform *obj = _edje_lua_checkudata(L, 1, &mTransform);
1133 evas_transform_identity_set(&(obj->et));
1138 _edje_lua_transform_fn_rotate(lua_State *L)
1140 Edje_Lua_Transform *obj = _edje_lua_checkudata(L, 1, &mTransform);
1141 evas_transform_rotate(luaL_checknumber(L, 2), &(obj->et));
1146 _edje_lua_transform_fn_translate(lua_State *L)
1148 Edje_Lua_Transform *obj = _edje_lua_checkudata(L, 1, &mTransform);
1149 evas_transform_translate(luaL_checknumber(L, 2), luaL_checknumber(L, 3), &(obj->et));
1154 _edje_lua_transform_fn_scale(lua_State *L)
1156 Edje_Lua_Transform *obj = _edje_lua_checkudata(L, 1, &mTransform);
1157 evas_transform_scale(luaL_checknumber(L, 2), luaL_checknumber(L, 3), &(obj->et));
1162 _edje_lua_transform_fn_shear(lua_State *L)
1164 Edje_Lua_Transform *obj = _edje_lua_checkudata(L, 1, &mTransform);
1165 evas_transform_shear(luaL_checknumber(L, 2), luaL_checknumber(L, 3), &(obj->et));
1170 _edje_lua_transform_fn_compose(lua_State *L)
1172 Edje_Lua_Transform *obj = _edje_lua_checkudata(L, 1, &mTransform);
1173 Edje_Lua_Transform *tar = _edje_lua_checkudata(L, 2, &mTransform);
1174 evas_transform_compose(&(tar->et), &(obj->et));
1178 const luaL_Reg lTransform_fn[] = {
1179 {"identity", _edje_lua_transform_fn_identity},
1180 {"rotate", _edje_lua_transform_fn_rotate},
1181 {"translate", _edje_lua_transform_fn_translate},
1182 {"scale", _edje_lua_transform_fn_scale},
1183 {"shear", _edje_lua_transform_fn_shear},
1184 {"compose", _edje_lua_transform_fn_compose},
1185 {NULL, NULL} // sentinel
1189 * Lua Edje Transition bindings
1192 const luaL_Reg lTransition_get[];
1194 const luaL_Reg lTransition_set[];
1196 const luaL_Reg lTransition_fn[];
1198 const Edje_Lua_Reg mTransition = {
1205 const Edje_Lua_Reg *cTransition[] = {
1211 const luaL_Reg lTransition_get[] = {
1212 {NULL, NULL} // sentinel
1215 const luaL_Reg lTransition_set[] = {
1216 {NULL, NULL} // sentinel
1219 const luaL_Reg lTransition_fn[] = {
1220 {NULL, NULL} // sentinel
1223 const luaL_Reg lObject_get[];
1225 const luaL_Reg lObject_set[];
1227 const luaL_Reg lObject_fn[];
1229 const Edje_Lua_Reg mObject = {
1237 _edje_lua_object_del_cb(void *data, __UNUSED__ Evas * e, Evas_Object * obj, __UNUSED__ void *event_info)
1239 //printf("_edje_lua_object_delete_cb\n");
1240 lua_State *L = data;
1241 _edje_lua_get_reg(L, obj);
1242 Edje_Lua_Evas_Object *udata = _edje_lua_checkudata(L, -1, &mObject);
1244 _edje_lua_free_reg(L, udata); // created in EDJE_LUA_SCRIPT_FN_ADD
1245 _edje_lua_free_reg(L, obj); // created in EDJE_LUA_SCRIPT_FN_ADD
1248 EINA_LIST_FREE(udata->cb, ref)
1249 _edje_lua_free_ref(L, ref);
1253 _edje_lua_object_fn_del(lua_State *L)
1255 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1259 evas_object_del(obj->eo);
1267 _edje_lua_object_fn_show(lua_State *L)
1269 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1270 evas_object_show(obj->eo);
1275 _edje_lua_object_fn_hide(lua_State *L)
1277 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1278 evas_object_hide(obj->eo);
1283 _edje_lua_object_fn_move(lua_State *L)
1285 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1286 //printf ("%i %i %i %i\n", obj->ed->x, obj->ed->y, luaL_checkint (L, 2), luaL_checkint (L, 3));
1287 evas_object_move(obj->eo,
1288 obj->ed->x + luaL_checkint(L, 2),
1289 obj->ed->y + luaL_checkint(L, 3));
1294 _edje_lua_object_fn_resize(lua_State *L)
1296 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1297 evas_object_resize(obj->eo, luaL_checkint(L, 2), luaL_checkint(L, 3));
1302 _edje_lua_object_fn_raise(lua_State *L)
1304 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1305 evas_object_raise(obj->eo);
1310 _edje_lua_object_fn_lower(lua_State *L)
1312 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1313 evas_object_lower(obj->eo);
1318 _edje_lua_object_fn_stack_above(lua_State *L)
1320 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1321 Edje_Lua_Evas_Object *tar = _edje_lua_checkudata(L, 2, &mObject);
1322 evas_object_stack_above(obj->eo, tar->eo);
1327 _edje_lua_object_fn_stack_below(lua_State *L)
1329 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1330 Edje_Lua_Evas_Object *tar = _edje_lua_checkudata(L, 2, &mObject);
1331 evas_object_stack_below(obj->eo, tar->eo);
1336 _edje_lua_object_fn_clip_unset(lua_State *L)
1338 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1339 evas_object_clip_unset(obj->eo);
1343 const luaL_Reg lObject_fn[] = {
1344 {"del", _edje_lua_object_fn_del},
1345 {"show", _edje_lua_object_fn_show},
1346 {"hide", _edje_lua_object_fn_hide},
1347 {"move", _edje_lua_object_fn_move},
1348 {"resize", _edje_lua_object_fn_resize},
1349 {"raise", _edje_lua_object_fn_raise},
1350 {"lower", _edje_lua_object_fn_lower},
1351 {"stack_above", _edje_lua_object_fn_stack_above},
1352 {"stack_below", _edje_lua_object_fn_stack_below},
1353 {"clip_unset", _edje_lua_object_fn_clip_unset},
1354 {NULL, NULL} // sentinel
1358 _edje_lua_object_get_name(lua_State *L)
1360 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1361 lua_pushstring(L, evas_object_name_get(obj->eo));
1366 _edje_lua_object_get_geometry(lua_State *L)
1368 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1370 evas_object_geometry_get(obj->eo, &x, &y, &w, &h);
1371 lua_createtable(L, 4, 0);
1372 lua_pushnumber(L, x);
1373 lua_rawseti(L, -2, 1);
1374 lua_pushnumber(L, y);
1375 lua_rawseti(L, -2, 2);
1376 lua_pushnumber(L, w);
1377 lua_rawseti(L, -2, 3);
1378 lua_pushnumber(L, h);
1379 lua_rawseti(L, -2, 4);
1384 _edje_lua_object_get_type(lua_State *L)
1386 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1387 lua_pushstring(L, evas_object_type_get(obj->eo));
1392 _edje_lua_object_get_layer(lua_State *L)
1394 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1395 lua_pushnumber(L, evas_object_layer_get(obj->eo));
1400 _edje_lua_object_get_above(lua_State *L)
1402 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1403 Evas_Object *above = evas_object_above_get(obj->eo);
1404 _edje_lua_get_reg(L, above);
1405 // TODO create object if it does not already exist?
1410 _edje_lua_object_get_below(lua_State *L)
1412 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1413 Evas_Object *below = evas_object_below_get(obj->eo);
1414 _edje_lua_get_reg(L, below);
1415 // TODO create object if it does not already exist?
1420 _edje_lua_object_get_size_hint_min(lua_State *L)
1422 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1424 evas_object_size_hint_min_get(obj->eo, &w, &h);
1425 lua_createtable(L, 2, 0);
1426 lua_pushnumber(L, w);
1427 lua_rawseti(L, -2, 1);
1428 lua_pushnumber(L, h);
1429 lua_rawseti(L, -2, 2);
1434 _edje_lua_object_get_size_hint_max(lua_State *L)
1436 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1438 evas_object_size_hint_max_get(obj->eo, &w, &h);
1439 lua_createtable(L, 2, 0);
1440 lua_pushnumber(L, w);
1441 lua_rawseti(L, -2, 1);
1442 lua_pushnumber(L, h);
1443 lua_rawseti(L, -2, 2);
1448 _edje_lua_object_get_size_hint_request(lua_State *L)
1450 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1452 evas_object_size_hint_request_get(obj->eo, &w, &h);
1453 lua_createtable(L, 2, 0);
1454 lua_pushnumber(L, w);
1455 lua_rawseti(L, -2, 1);
1456 lua_pushnumber(L, h);
1457 lua_rawseti(L, -2, 2);
1462 _edje_lua_object_get_size_hint_aspect(lua_State *L)
1464 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1465 Evas_Aspect_Control a;
1467 evas_object_size_hint_aspect_get(obj->eo, &a, &w, &h);
1468 lua_createtable(L, 3, 0);
1469 lua_pushnumber(L, a);
1470 lua_rawseti(L, -2, 1);
1471 lua_pushnumber(L, w);
1472 lua_rawseti(L, -2, 2);
1473 lua_pushnumber(L, h);
1474 lua_rawseti(L, -2, 3);
1479 _edje_lua_object_get_size_hint_align(lua_State *L)
1481 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1483 evas_object_size_hint_align_get(obj->eo, &w, &h);
1484 lua_createtable(L, 2, 0);
1485 lua_pushnumber(L, w);
1486 lua_rawseti(L, -2, 1);
1487 lua_pushnumber(L, h);
1488 lua_rawseti(L, -2, 2);
1493 _edje_lua_object_get_size_hint_weight(lua_State *L)
1495 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1497 evas_object_size_hint_weight_get(obj->eo, &w, &h);
1498 lua_createtable(L, 2, 0);
1499 lua_pushnumber(L, w);
1500 lua_rawseti(L, -2, 1);
1501 lua_pushnumber(L, h);
1502 lua_rawseti(L, -2, 2);
1507 _edje_lua_object_get_size_hint_padding(lua_State *L)
1509 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1511 evas_object_size_hint_padding_get(obj->eo, &l, &r, &t, &b);
1512 lua_createtable(L, 4, 0);
1513 lua_pushnumber(L, l);
1514 lua_rawseti(L, -2, 1);
1515 lua_pushnumber(L, r);
1516 lua_rawseti(L, -2, 2);
1517 lua_pushnumber(L, t);
1518 lua_rawseti(L, -2, 3);
1519 lua_pushnumber(L, b);
1520 lua_rawseti(L, -2, 4);
1525 _edje_lua_object_get_visible(lua_State *L)
1527 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1528 lua_pushboolean(L, evas_object_visible_get(obj->eo));
1533 _edje_lua_object_get_render_op(lua_State *L)
1535 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1536 lua_pushnumber(L, evas_object_render_op_get(obj->eo));
1541 _edje_lua_object_get_anti_alias(lua_State *L)
1543 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1544 lua_pushboolean(L, evas_object_anti_alias_get(obj->eo));
1549 _edje_lua_object_get_scale(lua_State *L)
1551 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1552 lua_pushnumber(L, evas_object_scale_get(obj->eo));
1557 _edje_lua_object_get_color(lua_State *L)
1559 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1561 evas_object_color_get(obj->eo, &r, &g, &b, &a);
1562 lua_createtable(L, 4, 0);
1563 lua_pushnumber(L, r);
1564 lua_rawseti(L, -2, 1);
1565 lua_pushnumber(L, g);
1566 lua_rawseti(L, -2, 2);
1567 lua_pushnumber(L, b);
1568 lua_rawseti(L, -2, 3);
1569 lua_pushnumber(L, a);
1570 lua_rawseti(L, -2, 4);
1575 _edje_lua_object_get_color_interpolation(lua_State *L)
1577 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1578 lua_pushnumber(L, evas_object_color_interpolation_get(obj->eo));
1583 _edje_lua_object_get_clip(lua_State *L)
1585 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1586 Evas_Object *clip = evas_object_clip_get(obj->eo);
1587 _edje_lua_get_reg(L, clip);
1588 // TODO create object if it does not already exist?
1593 _edje_lua_object_get_clipees(lua_State *L)
1595 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1596 Eina_List *clipees = (Eina_List *) evas_object_clipees_get(obj->eo);
1600 lua_createtable(L, eina_list_count(clipees), 0);
1601 EINA_LIST_FOREACH(clipees, l, clip)
1603 _edje_lua_get_reg(L, clip);
1604 // TODO create object if it does not already exist?
1605 lua_rawseti(L, -2, i++);
1611 _edje_lua_object_get_evas(lua_State *L)
1613 //Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1615 // FIXME implement Evas class in the first place?
1620 _edje_lua_object_get_pass_events(lua_State *L)
1622 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1623 lua_pushboolean(L, evas_object_pass_events_get(obj->eo));
1628 _edje_lua_object_get_repeat_events(lua_State *L)
1630 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1631 lua_pushboolean(L, evas_object_repeat_events_get(obj->eo));
1636 _edje_lua_object_get_propagate_events(lua_State *L)
1638 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1639 lua_pushboolean(L, evas_object_propagate_events_get(obj->eo));
1644 _edje_lua_object_get_focus(lua_State *L)
1646 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1647 lua_pushboolean(L, evas_object_focus_get(obj->eo));
1652 _edje_lua_object_get_pointer_mode(lua_State *L)
1654 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1655 lua_pushnumber(L, evas_object_pointer_mode_get(obj->eo));
1660 _edje_lua_object_get_precise_is_inside(lua_State *L)
1662 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1663 lua_pushboolean(L, evas_object_precise_is_inside_get(obj->eo));
1668 _edje_lua_object_get_mouse_events(lua_State *L)
1670 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1671 lua_pushboolean(L, obj->mouse_events);
1675 const luaL_Reg lObject_get[] = {
1676 {"name", _edje_lua_object_get_name},
1677 {"geometry", _edje_lua_object_get_geometry},
1678 {"type", _edje_lua_object_get_type},
1679 {"layer", _edje_lua_object_get_layer},
1680 {"above", _edje_lua_object_get_above},
1681 {"below", _edje_lua_object_get_below},
1682 {"size_hint_min", _edje_lua_object_get_size_hint_min},
1683 {"size_hint_max", _edje_lua_object_get_size_hint_max},
1684 {"size_hint_request", _edje_lua_object_get_size_hint_request},
1685 {"size_hint_aspect", _edje_lua_object_get_size_hint_aspect},
1686 {"size_hint_align", _edje_lua_object_get_size_hint_align},
1687 {"size_hint_weight", _edje_lua_object_get_size_hint_weight},
1688 {"size_hint_padding", _edje_lua_object_get_size_hint_padding},
1689 {"visible", _edje_lua_object_get_visible},
1690 {"render_op", _edje_lua_object_get_render_op},
1691 {"anti_alias", _edje_lua_object_get_anti_alias},
1692 {"scale", _edje_lua_object_get_scale},
1693 {"color", _edje_lua_object_get_color},
1694 {"color_interpolation", _edje_lua_object_get_color_interpolation},
1695 {"clip", _edje_lua_object_get_clip},
1696 {"clipees", _edje_lua_object_get_clipees},
1697 {"evas", _edje_lua_object_get_evas},
1698 {"pass_events", _edje_lua_object_get_pass_events},
1699 {"repeat_events", _edje_lua_object_get_repeat_events},
1700 {"propagate_events", _edje_lua_object_get_propagate_events},
1701 {"focus", _edje_lua_object_get_focus},
1702 {"pointer_mode", _edje_lua_object_get_pointer_mode},
1703 {"precise_is_inside", _edje_lua_object_get_precise_is_inside},
1704 {"mouse_events", _edje_lua_object_get_mouse_events},
1705 {NULL, NULL} // sentinel
1709 _edje_lua_object_set_name(lua_State *L)
1711 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1712 evas_object_name_set(obj->eo, luaL_checkstring(L, 2));
1717 _edje_lua_object_set_layer(lua_State *L)
1719 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1720 evas_object_layer_set(obj->eo, luaL_checkint(L, 2));
1725 _edje_lua_object_set_size_hint_min(lua_State *L)
1727 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1728 luaL_checktype(L, 2, LUA_TTABLE);
1729 lua_rawgeti(L, 2, 1);
1730 lua_rawgeti(L, 2, 2);
1731 evas_object_size_hint_min_set(obj->eo,
1732 luaL_checkint(L, -2),
1733 luaL_checkint(L, -1));
1738 _edje_lua_object_set_size_hint_max(lua_State *L)
1740 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1741 luaL_checktype(L, 2, LUA_TTABLE);
1742 lua_rawgeti(L, 2, 1);
1743 lua_rawgeti(L, 2, 2);
1744 evas_object_size_hint_max_set(obj->eo,
1745 luaL_checkint(L, -2),
1746 luaL_checkint(L, -1));
1751 _edje_lua_object_set_size_hint_request(lua_State *L)
1753 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1754 luaL_checktype(L, 2, LUA_TTABLE);
1755 lua_rawgeti(L, 2, 1);
1756 lua_rawgeti(L, 2, 2);
1757 evas_object_size_hint_request_set(obj->eo,
1758 luaL_checkint(L, -2),
1759 luaL_checkint(L, -1));
1764 _edje_lua_object_set_size_hint_aspect(lua_State *L)
1766 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1767 luaL_checktype(L, 2, LUA_TTABLE);
1768 lua_rawgeti(L, 2, 1);
1769 lua_rawgeti(L, 2, 2);
1770 lua_rawgeti(L, 2, 3);
1771 evas_object_size_hint_aspect_set(obj->eo,
1772 luaL_checkint(L, -3),
1773 luaL_checkint(L, -2),
1774 luaL_checkint(L, -1));
1779 _edje_lua_object_set_size_hint_align(lua_State *L)
1781 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1782 luaL_checktype(L, 2, LUA_TTABLE);
1783 lua_rawgeti(L, 2, 1);
1784 lua_rawgeti(L, 2, 2);
1785 evas_object_size_hint_align_set(obj->eo,
1786 luaL_checknumber(L, -2),
1787 luaL_checknumber(L, -1));
1792 _edje_lua_object_set_size_hint_weight(lua_State *L)
1794 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1795 luaL_checktype(L, 2, LUA_TTABLE);
1796 lua_rawgeti(L, 2, 1);
1797 lua_rawgeti(L, 2, 2);
1798 evas_object_size_hint_weight_set(obj->eo,
1799 luaL_checknumber(L, -2),
1800 luaL_checknumber(L, -1));
1805 _edje_lua_object_set_size_hint_padding(lua_State *L)
1807 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1808 luaL_checktype(L, 2, LUA_TTABLE);
1809 lua_rawgeti(L, 2, 1);
1810 lua_rawgeti(L, 2, 2);
1811 lua_rawgeti(L, 2, 3);
1812 lua_rawgeti(L, 2, 4);
1813 evas_object_size_hint_padding_set(obj->eo,
1814 luaL_checknumber(L, -4),
1815 luaL_checknumber(L, -3),
1816 luaL_checknumber(L, -2),
1817 luaL_checknumber(L, -1));
1822 _edje_lua_object_set_render_op(lua_State *L)
1824 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1825 evas_object_render_op_set(obj->eo, luaL_checkint(L, 2));
1830 _edje_lua_object_set_anti_alias(lua_State *L)
1832 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1833 evas_object_anti_alias_set(obj->eo, lua_toboolean(L, 2));
1838 _edje_lua_object_set_scale(lua_State *L)
1840 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1841 evas_object_scale_set(obj->eo, luaL_checknumber(L, 2));
1846 _edje_lua_object_set_color(lua_State *L)
1848 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1849 luaL_checktype(L, 2, LUA_TTABLE);
1850 lua_rawgeti(L, 2, 1);
1851 lua_rawgeti(L, 2, 2);
1852 lua_rawgeti(L, 2, 3);
1853 lua_rawgeti(L, 2, 4);
1854 evas_object_color_set(obj->eo,
1855 luaL_checkint(L, -4),
1856 luaL_checkint(L, -3),
1857 luaL_checkint(L, -2),
1858 luaL_checkint(L, -1));
1863 _edje_lua_object_set_color_interpolation(lua_State *L)
1865 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1866 evas_object_color_interpolation_set(obj->eo, luaL_checkint(L, 2));
1871 _edje_lua_object_set_clip(lua_State *L)
1873 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1874 Edje_Lua_Evas_Object *clip = _edje_lua_checkudata(L, 2, &mObject);
1875 evas_object_clip_set(obj->eo, clip->eo);
1880 _edje_lua_object_set_pass_events(lua_State *L)
1882 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1883 evas_object_pass_events_set(obj->eo, lua_toboolean(L, 2));
1888 _edje_lua_object_set_repeat_events(lua_State *L)
1890 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1891 evas_object_repeat_events_set(obj->eo, lua_toboolean(L, 2));
1896 _edje_lua_object_set_propagate_events(lua_State *L)
1898 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1899 evas_object_propagate_events_set(obj->eo, lua_toboolean(L, 2));
1904 _edje_lua_object_set_focus(lua_State *L)
1906 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1907 evas_object_focus_set(obj->eo, lua_toboolean(L, 2));
1912 _edje_lua_object_set_pointer_mode(lua_State *L)
1914 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1915 evas_object_pointer_mode_set(obj->eo, luaL_checkint(L, 2));
1920 _edje_lua_object_set_precise_is_inside(lua_State *L)
1922 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
1923 evas_object_precise_is_inside_set(obj->eo, lua_toboolean(L, 2));
1927 #define OBJECT_CB_MACRO(KEY) \
1928 lua_State *L = data; \
1929 _edje_lua_get_reg(L, obj); \
1930 lua_getfield(L, -1, KEY); \
1931 if (lua_type(L, -1) != LUA_TFUNCTION) \
1939 _edje_lua_object_cb_mouse_in(void *data, __UNUSED__ Evas * e, Evas_Object * obj,
1942 OBJECT_CB_MACRO("mouse_in");
1943 Evas_Event_Mouse_In * ev = event_info;
1946 lua_pushnumber(L, ev->output.x);
1947 lua_pushnumber(L, ev->output.y);
1948 lua_pushnumber(L, ev->canvas.x);
1949 lua_pushnumber(L, ev->canvas.y);
1951 if ((err_code = lua_pcall(L, 5, 0, 0)))
1952 _edje_lua_error(L, err_code);
1956 _edje_lua_object_cb_mouse_out(void *data, __UNUSED__ Evas * e, Evas_Object * obj,
1959 OBJECT_CB_MACRO("mouse_out");
1960 Evas_Event_Mouse_In * ev = event_info;
1963 lua_pushnumber(L, ev->output.x);
1964 lua_pushnumber(L, ev->output.y);
1965 lua_pushnumber(L, ev->canvas.x);
1966 lua_pushnumber(L, ev->canvas.y);
1968 if ((err_code = lua_pcall(L, 5, 0, 0)))
1969 _edje_lua_error(L, err_code);
1973 _edje_lua_object_cb_mouse_down(void *data, __UNUSED__ Evas * e, Evas_Object * obj,
1976 OBJECT_CB_MACRO("mouse_down");
1977 Evas_Event_Mouse_Down * ev = event_info;
1980 lua_pushnumber(L, ev->button);
1981 lua_pushnumber(L, ev->output.x);
1982 lua_pushnumber(L, ev->output.y);
1983 lua_pushnumber(L, ev->canvas.x);
1984 lua_pushnumber(L, ev->canvas.y);
1986 if ((err_code = lua_pcall(L, 6, 0, 0)))
1987 _edje_lua_error(L, err_code);
1991 _edje_lua_object_cb_mouse_up(void *data, __UNUSED__ Evas * e, Evas_Object * obj,
1994 OBJECT_CB_MACRO("mouse_up");
1995 Evas_Event_Mouse_Up * ev = event_info;
1998 lua_pushnumber(L, ev->button);
1999 lua_pushnumber(L, ev->output.x);
2000 lua_pushnumber(L, ev->output.y);
2001 lua_pushnumber(L, ev->canvas.x);
2002 lua_pushnumber(L, ev->canvas.y);
2004 if ((err_code = lua_pcall(L, 6, 0, 0)))
2005 _edje_lua_error(L, err_code);
2009 _edje_lua_object_cb_mouse_move(void *data, __UNUSED__ Evas * e, Evas_Object * obj,
2012 OBJECT_CB_MACRO("mouse_move");
2013 Evas_Event_Mouse_Move * ev = event_info;
2016 lua_pushnumber(L, ev->buttons);
2017 lua_pushnumber(L, ev->cur.output.x);
2018 lua_pushnumber(L, ev->cur.output.y);
2019 lua_pushnumber(L, ev->cur.canvas.x);
2020 lua_pushnumber(L, ev->cur.canvas.y);
2022 if ((err_code = lua_pcall(L, 6, 0, 0)))
2023 _edje_lua_error(L, err_code);
2027 _edje_lua_object_cb_mouse_wheel(void *data, __UNUSED__ Evas * e, Evas_Object * obj,
2030 OBJECT_CB_MACRO("mouse_wheel");
2031 Evas_Event_Mouse_Wheel * ev = event_info;
2034 lua_pushnumber(L, ev->z);
2035 lua_pushnumber(L, ev->output.x);
2036 lua_pushnumber(L, ev->output.y);
2037 lua_pushnumber(L, ev->canvas.x);
2038 lua_pushnumber(L, ev->canvas.y);
2040 if ((err_code = lua_pcall(L, 6, 0, 0)))
2041 _edje_lua_error(L, err_code);
2045 _edje_lua_object_set_mouse_events(lua_State *L)
2047 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
2048 obj->mouse_events = lua_toboolean(L, 2);
2049 if (obj->mouse_events)
2051 // add all mouse events
2052 evas_object_event_callback_add(obj->eo, EVAS_CALLBACK_MOUSE_IN, _edje_lua_object_cb_mouse_in, L);
2053 evas_object_event_callback_add(obj->eo, EVAS_CALLBACK_MOUSE_OUT, _edje_lua_object_cb_mouse_out, L);
2054 evas_object_event_callback_add(obj->eo, EVAS_CALLBACK_MOUSE_DOWN, _edje_lua_object_cb_mouse_down, L);
2055 evas_object_event_callback_add(obj->eo, EVAS_CALLBACK_MOUSE_UP, _edje_lua_object_cb_mouse_up, L);
2056 evas_object_event_callback_add(obj->eo, EVAS_CALLBACK_MOUSE_MOVE, _edje_lua_object_cb_mouse_move, L);
2057 evas_object_event_callback_add(obj->eo, EVAS_CALLBACK_MOUSE_WHEEL, _edje_lua_object_cb_mouse_wheel, L);
2061 // delete all mouse events
2062 evas_object_event_callback_del(obj->eo, EVAS_CALLBACK_MOUSE_IN, _edje_lua_object_cb_mouse_in);
2063 evas_object_event_callback_del(obj->eo, EVAS_CALLBACK_MOUSE_OUT, _edje_lua_object_cb_mouse_out);
2064 evas_object_event_callback_del(obj->eo, EVAS_CALLBACK_MOUSE_DOWN, _edje_lua_object_cb_mouse_down);
2065 evas_object_event_callback_del(obj->eo, EVAS_CALLBACK_MOUSE_UP, _edje_lua_object_cb_mouse_up);
2066 evas_object_event_callback_del(obj->eo, EVAS_CALLBACK_MOUSE_MOVE, _edje_lua_object_cb_mouse_move);
2067 evas_object_event_callback_del(obj->eo, EVAS_CALLBACK_MOUSE_WHEEL, _edje_lua_object_cb_mouse_wheel);
2072 const luaL_Reg lObject_set[] = {
2073 {"name", _edje_lua_object_set_name},
2074 {"layer", _edje_lua_object_set_layer},
2075 {"size_hint_min", _edje_lua_object_set_size_hint_min},
2076 {"size_hint_max", _edje_lua_object_set_size_hint_max},
2077 {"size_hint_request", _edje_lua_object_set_size_hint_request},
2078 {"size_hint_aspect", _edje_lua_object_set_size_hint_aspect},
2079 {"size_hint_align", _edje_lua_object_set_size_hint_align},
2080 {"size_hint_weight", _edje_lua_object_set_size_hint_weight},
2081 {"size_hint_padding", _edje_lua_object_set_size_hint_padding},
2082 {"render_op", _edje_lua_object_set_render_op},
2083 {"anti_alias", _edje_lua_object_set_anti_alias},
2084 {"scale", _edje_lua_object_set_scale},
2085 {"color", _edje_lua_object_set_color},
2086 {"color_interpolation", _edje_lua_object_set_color_interpolation},
2087 {"clip", _edje_lua_object_set_clip},
2088 {"pass_events", _edje_lua_object_set_pass_events},
2089 {"repeat_events", _edje_lua_object_set_repeat_events},
2090 {"propagate_events", _edje_lua_object_set_propagate_events},
2091 {"focus", _edje_lua_object_set_focus},
2092 {"pointer_mode", _edje_lua_object_get_pointer_mode},
2093 {"precise_is_inside", _edje_lua_object_get_precise_is_inside},
2094 {"mouse_events", _edje_lua_object_set_mouse_events},
2095 {NULL, NULL} // sentinel
2098 const Edje_Lua_Reg *cRectangle[] = {
2104 const luaL_Reg lImage_get[];
2106 const luaL_Reg lImage_set[];
2108 const Edje_Lua_Reg mImage = {
2115 const Edje_Lua_Reg *cImage[] = {
2123 _edje_lua_image_get_size(lua_State *L)
2125 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mImage);
2127 evas_object_image_size_get(obj->eo, &w, &h);
2128 lua_createtable(L, 2, 0);
2129 lua_pushnumber(L, w);
2130 lua_rawseti(L, -2, 1);
2131 lua_pushnumber(L, h);
2132 lua_rawseti(L, -2, 2);
2136 const luaL_Reg lImage_get[] = {
2137 {"size", _edje_lua_image_get_size},
2138 {NULL, NULL} // sentinel
2142 _edje_lua_image_set_file(lua_State *L)
2144 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mImage);
2145 int id = edje_edit_image_id_get(obj->ed->obj, luaL_checkstring(L, 2));
2147 sprintf(buf, "edje/images/%i", id);
2148 evas_object_image_file_set(obj->eo, obj->ed->path, buf);
2153 _edje_lua_image_set_fill(lua_State *L)
2155 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mImage);
2156 luaL_checktype(L, 2, LUA_TTABLE);
2157 lua_rawgeti(L, 2, 1);
2158 lua_rawgeti(L, 2, 2);
2159 lua_rawgeti(L, 2, 3);
2160 lua_rawgeti(L, 2, 4);
2161 evas_object_image_fill_set(obj->eo,
2162 luaL_checkint(L, -4),
2163 luaL_checkint(L, -3),
2164 luaL_checkint(L, -2), luaL_checkint(L, -1));
2169 _edje_lua_image_set_fill_transform(lua_State *L)
2171 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mImage);
2172 Edje_Lua_Transform *tar = _edje_lua_checkudata(L, 2, &mTransform);
2173 evas_object_image_fill_transform_set(obj->eo, &(tar->et));
2178 _edje_lua_image_set_alpha(lua_State *L)
2180 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mObject);
2181 evas_object_image_alpha_set(obj->eo, lua_toboolean(L, 2));
2185 const luaL_Reg lImage_set[] = {
2186 {"file", _edje_lua_image_set_file},
2187 {"fill", _edje_lua_image_set_fill},
2188 {"fill_transform", _edje_lua_image_set_fill_transform},
2189 {"alpha", _edje_lua_image_set_alpha},
2190 {NULL, NULL} // sentinel
2193 const luaL_Reg lLine_get[];
2194 const luaL_Reg lLine_set[];
2196 const Edje_Lua_Reg mLine = {
2203 const Edje_Lua_Reg *cLine[] = {
2211 _edje_lua_line_get_xy(lua_State *L)
2213 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mLine);
2215 evas_object_line_xy_get(obj->eo, &x1, &y1, &x2, &y2);
2216 lua_createtable(L, 4, 0);
2217 lua_pushnumber(L, x1); lua_rawseti(L, -2, 1);
2218 lua_pushnumber(L, y1); lua_rawseti(L, -2, 2);
2219 lua_pushnumber(L, x2); lua_rawseti(L, -2, 3);
2220 lua_pushnumber(L, y2); lua_rawseti(L, -2, 4);
2224 const luaL_Reg lLine_get[] = {
2225 {"xy", _edje_lua_line_get_xy},
2226 {NULL, NULL} // sentinel
2230 _edje_lua_line_set_xy(lua_State *L)
2232 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mLine);
2233 luaL_checktype(L, 2, LUA_TTABLE);
2234 lua_rawgeti(L, 2, 1);
2235 lua_rawgeti(L, 2, 2);
2236 lua_rawgeti(L, 2, 3);
2237 lua_rawgeti(L, 2, 4);
2238 evas_object_line_xy_set(obj->eo,
2239 luaL_checkint(L, -4),
2240 luaL_checkint(L, -3),
2241 luaL_checkint(L, -2),
2242 luaL_checkint(L, -1));
2246 const luaL_Reg lLine_set[] = {
2247 {"xy", _edje_lua_line_set_xy},
2248 {NULL, NULL} // sentinel
2251 const luaL_Reg lPolygon_fn[];
2253 const Edje_Lua_Reg mPolygon = {
2260 const Edje_Lua_Reg *cPolygon[] = {
2268 _edje_lua_polygon_fn_point_add(lua_State *L)
2270 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mPolygon);
2271 evas_object_polygon_point_add(obj->eo,
2272 luaL_checknumber(L, 2),
2273 luaL_checknumber(L, 3));
2278 _edje_lua_polygon_fn_points_clear(lua_State *L)
2280 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mPolygon);
2281 evas_object_polygon_points_clear(obj->eo);
2285 const luaL_Reg lPolygon_fn[] = {
2286 {"point_add", _edje_lua_polygon_fn_point_add},
2287 {"points_clear", _edje_lua_polygon_fn_points_clear},
2288 {NULL, NULL} // sentinel
2291 const luaL_Reg lTable_get[];
2293 const luaL_Reg lTable_set[];
2295 const luaL_Reg lTable_fn[];
2297 const Edje_Lua_Reg mTable = {
2304 const Edje_Lua_Reg *cTable[] = {
2312 _edje_lua_table_get_homogeneous(lua_State *L)
2314 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mTable);
2315 lua_pushnumber(L, evas_object_table_homogeneous_get(obj->eo));
2320 _edje_lua_table_get_padding(lua_State *L)
2322 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mTable);
2324 evas_object_table_padding_get(obj->eo, &x, &y);
2325 lua_createtable(L, 2, 0);
2326 lua_pushnumber(L, x);
2327 lua_rawseti(L, -2, 1);
2328 lua_pushnumber(L, y);
2329 lua_rawseti(L, -2, 2);
2334 _edje_lua_table_get_align(lua_State *L)
2336 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mTable);
2338 evas_object_table_align_get(obj->eo, &x, &y);
2339 lua_createtable(L, 2, 0);
2340 lua_pushnumber(L, x);
2341 lua_rawseti(L, -2, 1);
2342 lua_pushnumber(L, y);
2343 lua_rawseti(L, -2, 2);
2348 _edje_lua_table_get_col_row_size(lua_State *L)
2350 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mTable);
2352 evas_object_table_col_row_size_get(obj->eo, &x, &y);
2353 lua_createtable(L, 2, 0);
2354 lua_pushnumber(L, x);
2355 lua_rawseti(L, -2, 1);
2356 lua_pushnumber(L, y);
2357 lua_rawseti(L, -2, 2);
2362 _edje_lua_table_get_children(lua_State *L)
2364 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mTable);
2365 Eina_List *children = (Eina_List *) evas_object_table_children_get(obj->eo);
2369 lua_createtable(L, eina_list_count(children), 0);
2370 EINA_LIST_FOREACH(children, l, child)
2372 _edje_lua_get_reg(L, child);
2373 // TODO create object if it does not already exist?
2374 lua_rawseti(L, -2, i++);
2379 const luaL_Reg lTable_get[] = {
2380 {"homogeneous", _edje_lua_table_get_homogeneous},
2381 {"padding", _edje_lua_table_get_padding},
2382 {"align", _edje_lua_table_get_align},
2383 {"col_row_size", _edje_lua_table_get_col_row_size},
2384 {"children", _edje_lua_table_get_children},
2385 {NULL, NULL} // sentinel
2389 _edje_lua_table_set_homogeneous(lua_State *L)
2391 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mTable);
2392 evas_object_table_homogeneous_set(obj->eo,
2393 luaL_checkint(L, 2));
2398 _edje_lua_table_set_padding(lua_State *L)
2400 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mTable);
2401 luaL_checktype(L, 2, LUA_TTABLE);
2402 lua_rawgeti(L, 2, 1);
2403 lua_rawgeti(L, 2, 2);
2404 evas_object_table_padding_set(obj->eo,
2405 luaL_checkint(L, -2),
2406 luaL_checkint(L, -1));
2411 _edje_lua_table_set_align(lua_State *L)
2413 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mTable);
2414 luaL_checktype(L, 2, LUA_TTABLE);
2415 lua_rawgeti(L, 2, 1);
2416 lua_rawgeti(L, 2, 2);
2417 evas_object_table_align_set(obj->eo,
2418 luaL_checknumber(L, -2),
2419 luaL_checknumber(L, -1));
2423 const luaL_Reg lTable_set[] = {
2424 {"homogeneous", _edje_lua_table_set_homogeneous},
2425 {"padding", _edje_lua_table_set_padding},
2426 {"align", _edje_lua_table_set_align},
2427 {NULL, NULL} // sentinel
2431 _edje_lua_table_fn_pack(lua_State *L)
2433 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mTable);
2434 Edje_Lua_Evas_Object *tar = _edje_lua_checkudata(L, 2, &mObject);
2436 evas_object_table_pack(obj->eo, tar->eo,
2437 luaL_checkint(L, 3),
2438 luaL_checkint(L, 4),
2439 luaL_checkint(L, 5),
2440 luaL_checkint(L, 6)));
2445 _edje_lua_table_fn_unpack(lua_State *L)
2447 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mTable);
2448 Edje_Lua_Evas_Object *tar = _edje_lua_checkudata(L, 2, &mObject);
2450 evas_object_table_unpack(obj->eo, tar->eo));
2455 _edje_lua_table_fn_clear(lua_State *L)
2457 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mTable);
2458 evas_object_table_clear(obj->eo, lua_toboolean(L, 2));
2462 const luaL_Reg lTable_fn[] = {
2463 {"pack", _edje_lua_table_fn_pack},
2464 {"unpack", _edje_lua_table_fn_unpack},
2465 {"clear", _edje_lua_table_fn_clear},
2466 {NULL, NULL} // sentinel
2469 const luaL_Reg lDescription_get[];
2471 const luaL_Reg lDescription_set[];
2473 const Edje_Lua_Reg mDescription = {
2480 const Edje_Lua_Reg *cDescription[] = {
2488 _edje_lua_description_get_alignment(lua_State *L)
2490 Edje_Lua_Edje_Part_Description *obj =
2491 _edje_lua_checkudata(L, 1, &mDescription);
2492 if (!obj->rp->custom) return 0;
2493 lua_createtable(L, 2, 0);
2494 lua_pushnumber(L, TO_DOUBLE(obj->rp->custom->description->align.x));
2495 lua_rawseti(L, -2, 1);
2496 lua_pushnumber(L, TO_DOUBLE(obj->rp->custom->description->align.y));
2497 lua_rawseti(L, -2, 1);
2502 _edje_lua_description_get_min(lua_State *L)
2504 Edje_Lua_Edje_Part_Description *obj =
2505 _edje_lua_checkudata(L, 1, &mDescription);
2506 if (!obj->rp->custom) return 0;
2507 lua_createtable(L, 2, 0);
2508 lua_pushnumber(L, obj->rp->custom->description->min.w);
2509 lua_rawseti(L, -2, 1);
2510 lua_pushnumber(L, obj->rp->custom->description->min.h);
2511 lua_rawseti(L, -2, 1);
2516 _edje_lua_description_get_max(lua_State *L)
2518 Edje_Lua_Edje_Part_Description *obj =
2519 _edje_lua_checkudata(L, 1, &mDescription);
2520 if (!obj->rp->custom) return 0;
2521 lua_createtable(L, 2, 0);
2522 lua_pushnumber(L, obj->rp->custom->description->max.w);
2523 lua_rawseti(L, -2, 1);
2524 lua_pushnumber(L, obj->rp->custom->description->max.h);
2525 lua_rawseti(L, -2, 1);
2530 _edje_lua_description_get_step(lua_State *L)
2532 Edje_Lua_Edje_Part_Description *obj =
2533 _edje_lua_checkudata(L, 1, &mDescription);
2534 if (!obj->rp->custom) return 0;
2535 lua_createtable(L, 2, 0);
2536 lua_pushnumber(L, obj->rp->custom->description->step.x);
2537 lua_rawseti(L, -2, 1);
2538 lua_pushnumber(L, obj->rp->custom->description->step.y);
2539 lua_rawseti(L, -2, 1);
2544 _edje_lua_description_get_aspect(lua_State *L)
2546 Edje_Lua_Edje_Part_Description *obj =
2547 _edje_lua_checkudata(L, 1, &mDescription);
2548 if (!obj->rp->custom) return 0;
2549 lua_createtable(L, 2, 0);
2550 lua_pushnumber(L, TO_DOUBLE(obj->rp->custom->description->aspect.min));
2551 lua_rawseti(L, -2, 1);
2552 lua_pushnumber(L, TO_DOUBLE(obj->rp->custom->description->aspect.max));
2553 lua_rawseti(L, -2, 1);
2558 _edje_lua_description_get_aspect_pref(lua_State *L)
2560 Edje_Lua_Edje_Part_Description *obj =
2561 _edje_lua_checkudata(L, 1, &mDescription);
2562 if (!obj->rp->custom) return 0;
2563 lua_pushnumber(L, obj->rp->custom->description->aspect.prefer);
2568 _edje_lua_description_get_color(lua_State *L)
2570 Edje_Lua_Edje_Part_Description *obj =
2571 _edje_lua_checkudata(L, 1, &mDescription);
2572 /* check whether this part has a "custom" state */
2573 if (!obj->rp->custom) return 0;
2574 lua_createtable(L, 4, 0);
2575 lua_pushnumber(L, obj->rp->custom->description->color.r);
2576 lua_rawseti(L, -2, 1);
2577 lua_pushnumber(L, obj->rp->custom->description->color.g);
2578 lua_rawseti(L, -2, 2);
2579 lua_pushnumber(L, obj->rp->custom->description->color.b);
2580 lua_rawseti(L, -2, 3);
2581 lua_pushnumber(L, obj->rp->custom->description->color.a);
2582 lua_rawseti(L, -2, 4);
2587 _edje_lua_description_get_color2(lua_State *L)
2589 Edje_Lua_Edje_Part_Description *obj =
2590 _edje_lua_checkudata(L, 1, &mDescription);
2591 if (!obj->rp->custom) return 0;
2592 lua_createtable(L, 4, 0);
2593 lua_pushnumber(L, obj->rp->custom->description->color2.r);
2594 lua_rawseti(L, -2, 1);
2595 lua_pushnumber(L, obj->rp->custom->description->color2.g);
2596 lua_rawseti(L, -2, 2);
2597 lua_pushnumber(L, obj->rp->custom->description->color2.b);
2598 lua_rawseti(L, -2, 3);
2599 lua_pushnumber(L, obj->rp->custom->description->color2.a);
2600 lua_rawseti(L, -2, 4);
2605 _edje_lua_description_get_color3(lua_State *L)
2607 Edje_Lua_Edje_Part_Description *obj =
2608 _edje_lua_checkudata(L, 1, &mDescription);
2609 if (!obj->rp->custom) return 0;
2610 lua_createtable(L, 4, 0);
2611 lua_pushnumber(L, obj->rp->custom->description->color3.r);
2612 lua_rawseti(L, -2, 1);
2613 lua_pushnumber(L, obj->rp->custom->description->color3.g);
2614 lua_rawseti(L, -2, 2);
2615 lua_pushnumber(L, obj->rp->custom->description->color3.b);
2616 lua_rawseti(L, -2, 3);
2617 lua_pushnumber(L, obj->rp->custom->description->color3.a);
2618 lua_rawseti(L, -2, 4);
2623 _edje_lua_description_get_color_class(lua_State *L)
2625 Edje_Lua_Edje_Part_Description *obj =
2626 _edje_lua_checkudata(L, 1, &mDescription);
2627 if (!obj->rp->custom) return 0;
2628 lua_pushstring(L, obj->rp->custom->description->color_class);
2633 _edje_lua_description_get_rel1(lua_State *L)
2635 Edje_Lua_Edje_Part_Description *obj =
2636 _edje_lua_checkudata(L, 1, &mDescription);
2637 if (!obj->rp->custom) return 0;
2638 lua_createtable(L, 2, 0);
2639 lua_pushnumber(L, TO_DOUBLE(obj->rp->custom->description->rel1.relative_x));
2640 lua_rawseti(L, -2, 1);
2641 lua_pushnumber(L, TO_DOUBLE(obj->rp->custom->description->rel1.relative_y));
2642 lua_rawseti(L, -2, 2);
2647 _edje_lua_description_get_rel1_to(lua_State *L)
2649 Edje_Lua_Edje_Part_Description *obj =
2650 _edje_lua_checkudata(L, 1, &mDescription);
2651 if (!obj->rp->custom) return 0;
2652 lua_createtable(L, 2, 0);
2653 lua_pushnumber(L, obj->rp->custom->description->rel1.id_x);
2654 lua_rawseti(L, -2, 1);
2655 lua_pushnumber(L, obj->rp->custom->description->rel1.id_y);
2656 lua_rawseti(L, -2, 2);
2661 _edje_lua_description_get_rel1_offset(lua_State *L)
2663 Edje_Lua_Edje_Part_Description *obj =
2664 _edje_lua_checkudata(L, 1, &mDescription);
2665 if (!obj->rp->custom) return 0;
2666 lua_createtable(L, 2, 0);
2667 lua_pushnumber(L, obj->rp->custom->description->rel1.offset_x);
2668 lua_rawseti(L, -2, 1);
2669 lua_pushnumber(L, obj->rp->custom->description->rel1.offset_y);
2670 lua_rawseti(L, -2, 2);
2675 _edje_lua_description_get_rel2(lua_State *L)
2677 Edje_Lua_Edje_Part_Description *obj =
2678 _edje_lua_checkudata(L, 1, &mDescription);
2679 if (!obj->rp->custom) return 0;
2680 lua_createtable(L, 2, 0);
2681 lua_pushnumber(L, TO_DOUBLE(obj->rp->custom->description->rel2.relative_x));
2682 lua_rawseti(L, -2, 1);
2683 lua_pushnumber(L, TO_DOUBLE(obj->rp->custom->description->rel2.relative_y));
2684 lua_rawseti(L, -2, 2);
2689 _edje_lua_description_get_rel2_to(lua_State *L)
2691 Edje_Lua_Edje_Part_Description *obj =
2692 _edje_lua_checkudata(L, 1, &mDescription);
2693 if (!obj->rp->custom) return 0;
2694 lua_createtable(L, 2, 0);
2695 lua_pushnumber(L, obj->rp->custom->description->rel2.id_x);
2696 lua_rawseti(L, -2, 1);
2697 lua_pushnumber(L, obj->rp->custom->description->rel2.id_y);
2698 lua_rawseti(L, -2, 2);
2703 _edje_lua_description_get_rel2_offset(lua_State *L)
2705 Edje_Lua_Edje_Part_Description *obj =
2706 _edje_lua_checkudata(L, 1, &mDescription);
2707 if (!obj->rp->custom) return 0;
2708 lua_createtable(L, 2, 0);
2709 lua_pushnumber(L, obj->rp->custom->description->rel2.offset_x);
2710 lua_rawseti(L, -2, 1);
2711 lua_pushnumber(L, obj->rp->custom->description->rel2.offset_y);
2712 lua_rawseti(L, -2, 2);
2717 _edje_lua_description_get_image(lua_State *L)
2719 Edje_Lua_Edje_Part_Description *obj =
2720 _edje_lua_checkudata(L, 1, &mDescription);
2721 if (!obj->rp->custom) return 0;
2722 if ((obj->rp->part->type != EDJE_PART_TYPE_IMAGE))
2729 _edje_lua_description_get_border(lua_State *L)
2731 Edje_Lua_Edje_Part_Description *obj =
2732 _edje_lua_checkudata(L, 1, &mDescription);
2733 if ((obj->rp->part->type != EDJE_PART_TYPE_IMAGE))
2735 if (!obj->rp->custom) return 0;
2736 lua_createtable(L, 4, 0);
2737 lua_pushnumber(L, obj->rp->custom->description->border.l);
2738 lua_rawseti(L, -2, 1);
2739 lua_pushnumber(L, obj->rp->custom->description->border.r);
2740 lua_rawseti(L, -2, 2);
2741 lua_pushnumber(L, obj->rp->custom->description->border.t);
2742 lua_rawseti(L, -2, 3);
2743 lua_pushnumber(L, obj->rp->custom->description->border.b);
2744 lua_rawseti(L, -2, 4);
2749 _edje_lua_description_get_fill_smooth(lua_State *L)
2751 Edje_Lua_Edje_Part_Description *obj =
2752 _edje_lua_checkudata(L, 1, &mDescription);
2753 if ((obj->rp->part->type != EDJE_PART_TYPE_IMAGE))
2755 if (!obj->rp->custom) return 0;
2756 lua_pushboolean(L, obj->rp->custom->description->fill.smooth);
2761 _edje_lua_description_get_fill_pos(lua_State *L)
2763 Edje_Lua_Edje_Part_Description *obj =
2764 _edje_lua_checkudata(L, 1, &mDescription);
2765 if ((obj->rp->part->type != EDJE_PART_TYPE_IMAGE))
2767 if (!obj->rp->custom) return 0;
2768 lua_createtable(L, 4, 0);
2769 lua_pushnumber(L, TO_DOUBLE(obj->rp->custom->description->fill.pos_rel_x));
2770 lua_rawseti(L, -2, 1);
2771 lua_pushnumber(L, TO_DOUBLE(obj->rp->custom->description->fill.pos_rel_y));
2772 lua_rawseti(L, -2, 2);
2773 lua_pushnumber(L, obj->rp->custom->description->fill.pos_abs_x);
2774 lua_rawseti(L, -2, 3);
2775 lua_pushnumber(L, obj->rp->custom->description->fill.pos_abs_y);
2776 lua_rawseti(L, -2, 4);
2781 _edje_lua_description_get_fill_size(lua_State *L)
2783 Edje_Lua_Edje_Part_Description *obj =
2784 _edje_lua_checkudata(L, 1, &mDescription);
2785 if ((obj->rp->part->type != EDJE_PART_TYPE_IMAGE))
2787 if (!obj->rp->custom) return 0;
2788 lua_createtable(L, 4, 0);
2789 lua_pushnumber(L, TO_DOUBLE(obj->rp->custom->description->fill.rel_x));
2790 lua_rawseti(L, -2, 1);
2791 lua_pushnumber(L, TO_DOUBLE(obj->rp->custom->description->fill.rel_y));
2792 lua_rawseti(L, -2, 2);
2793 lua_pushnumber(L, obj->rp->custom->description->fill.abs_x);
2794 lua_rawseti(L, -2, 3);
2795 lua_pushnumber(L, obj->rp->custom->description->fill.abs_y);
2796 lua_rawseti(L, -2, 4);
2801 _edje_lua_description_get_text(lua_State *L)
2803 Edje_Lua_Edje_Part_Description *obj =
2804 _edje_lua_checkudata(L, 1, &mDescription);
2805 if ((obj->rp->part->type != EDJE_PART_TYPE_TEXT)
2806 && (obj->rp->part->type != EDJE_PART_TYPE_TEXTBLOCK))
2808 if (!obj->rp->custom) return 0;
2809 lua_pushstring(L, obj->rp->custom->description->text.text);
2814 _edje_lua_description_get_text_class(lua_State *L)
2816 Edje_Lua_Edje_Part_Description *obj =
2817 _edje_lua_checkudata(L, 1, &mDescription);
2818 if ((obj->rp->part->type != EDJE_PART_TYPE_TEXT)
2819 && (obj->rp->part->type != EDJE_PART_TYPE_TEXTBLOCK))
2821 if (!obj->rp->custom) return 0;
2822 lua_pushstring(L, obj->rp->custom->description->text.text_class);
2827 _edje_lua_description_get_text_font(lua_State *L)
2829 Edje_Lua_Edje_Part_Description *obj =
2830 _edje_lua_checkudata(L, 1, &mDescription);
2831 if ((obj->rp->part->type != EDJE_PART_TYPE_TEXT))
2833 if (!obj->rp->custom) return 0;
2834 lua_pushstring(L, obj->rp->custom->description->text.text_class);
2839 _edje_lua_description_get_text_style(lua_State *L)
2841 Edje_Lua_Edje_Part_Description *obj =
2842 _edje_lua_checkudata(L, 1, &mDescription);
2843 if ((obj->rp->part->type != EDJE_PART_TYPE_TEXTBLOCK))
2845 if (!obj->rp->custom) return 0;
2846 lua_pushstring(L, obj->rp->custom->description->text.style);
2851 _edje_lua_description_get_text_size(lua_State *L)
2853 Edje_Lua_Edje_Part_Description *obj =
2854 _edje_lua_checkudata(L, 1, &mDescription);
2855 if ((obj->rp->part->type != EDJE_PART_TYPE_TEXT))
2857 if (!obj->rp->custom) return 0;
2858 lua_pushnumber(L, obj->rp->custom->description->text.size);
2863 _edje_lua_description_get_text_fit(lua_State *L)
2865 Edje_Lua_Edje_Part_Description *obj =
2866 _edje_lua_checkudata(L, 1, &mDescription);
2867 if ((obj->rp->part->type != EDJE_PART_TYPE_TEXT))
2869 if (!obj->rp->custom) return 0;
2870 lua_createtable(L, 2, 0);
2871 lua_pushboolean(L, obj->rp->custom->description->text.fit_x);
2872 lua_rawseti(L, -2, 1);
2873 lua_pushboolean(L, obj->rp->custom->description->text.fit_y);
2874 lua_rawseti(L, -2, 2);
2879 _edje_lua_description_get_text_min(lua_State *L)
2881 Edje_Lua_Edje_Part_Description *obj =
2882 _edje_lua_checkudata(L, 1, &mDescription);
2883 if ((obj->rp->part->type != EDJE_PART_TYPE_TEXT)
2884 && (obj->rp->part->type != EDJE_PART_TYPE_TEXTBLOCK))
2886 if (!obj->rp->custom) return 0;
2887 lua_createtable(L, 2, 0);
2888 lua_pushnumber(L, obj->rp->custom->description->text.min_x);
2889 lua_rawseti(L, -2, 1);
2890 lua_pushnumber(L, obj->rp->custom->description->text.min_y);
2891 lua_rawseti(L, -2, 2);
2896 _edje_lua_description_get_text_max(lua_State *L)
2898 Edje_Lua_Edje_Part_Description *obj =
2899 _edje_lua_checkudata(L, 1, &mDescription);
2900 if ((obj->rp->part->type != EDJE_PART_TYPE_TEXT)
2901 && (obj->rp->part->type != EDJE_PART_TYPE_TEXTBLOCK))
2903 if (!obj->rp->custom) return 0;
2904 lua_createtable(L, 2, 0);
2905 lua_pushnumber(L, obj->rp->custom->description->text.max_x);
2906 lua_rawseti(L, -2, 1);
2907 lua_pushnumber(L, obj->rp->custom->description->text.max_y);
2908 lua_rawseti(L, -2, 2);
2913 _edje_lua_description_get_text_align(lua_State *L)
2915 Edje_Lua_Edje_Part_Description *obj =
2916 _edje_lua_checkudata(L, 1, &mDescription);
2917 if ((obj->rp->part->type != EDJE_PART_TYPE_TEXT))
2919 if (!obj->rp->custom) return 0;
2920 lua_createtable(L, 2, 0);
2921 lua_pushnumber(L, TO_DOUBLE(obj->rp->custom->description->text.align.x));
2922 lua_rawseti(L, -2, 1);
2923 lua_pushnumber(L, TO_DOUBLE(obj->rp->custom->description->text.align.y));
2924 lua_rawseti(L, -2, 2);
2929 _edje_lua_description_get_visible(lua_State *L)
2931 Edje_Lua_Edje_Part_Description *obj =
2932 _edje_lua_checkudata(L, 1, &mDescription);
2933 if (!obj->rp->custom) return 0;
2934 lua_pushboolean(L, obj->rp->custom->description->visible);
2938 const luaL_Reg lDescription_get[] = {
2939 {"alignment", _edje_lua_description_get_alignment},
2940 {"min", _edje_lua_description_get_min},
2941 {"max", _edje_lua_description_get_max},
2942 {"step", _edje_lua_description_get_step},
2943 {"aspect", _edje_lua_description_get_aspect},
2944 {"aspect_pref", _edje_lua_description_get_aspect_pref},
2945 {"color", _edje_lua_description_get_color},
2946 {"color2", _edje_lua_description_get_color2},
2947 {"color3", _edje_lua_description_get_color3},
2948 {"color_class", _edje_lua_description_get_color_class},
2949 {"rel1", _edje_lua_description_get_rel1},
2950 {"rel1_to", _edje_lua_description_get_rel1_to},
2951 {"rel1_offset", _edje_lua_description_get_rel1_offset},
2952 {"rel2", _edje_lua_description_get_rel2},
2953 {"rel2_to", _edje_lua_description_get_rel2_to},
2954 {"rel2_offset", _edje_lua_description_get_rel2_offset},
2955 {"image", _edje_lua_description_get_image},
2956 {"border", _edje_lua_description_get_border},
2957 {"fill_smooth", _edje_lua_description_get_fill_smooth},
2958 {"fill_pos", _edje_lua_description_get_fill_pos},
2959 {"fill_size", _edje_lua_description_get_fill_size},
2960 {"text", _edje_lua_description_get_text},
2961 {"text_class", _edje_lua_description_get_text_class},
2962 {"text_font", _edje_lua_description_get_text_font},
2963 {"text_style", _edje_lua_description_get_text_style},
2964 {"text_size", _edje_lua_description_get_text_size},
2965 {"text_fit", _edje_lua_description_get_text_fit},
2966 {"text_min", _edje_lua_description_get_text_min},
2967 {"text_max", _edje_lua_description_get_text_max},
2968 {"text_align", _edje_lua_description_get_text_align},
2969 {"visible", _edje_lua_description_get_visible},
2970 {NULL, NULL} // sentinel
2974 _edje_lua_description_set_alignment(lua_State *L)
2976 Edje_Lua_Edje_Part_Description *obj =
2977 _edje_lua_checkudata(L, 1, &mDescription);
2978 if (!obj->rp->custom) return 0;
2979 luaL_checktype(L, 2, LUA_TTABLE);
2980 lua_rawgeti(L, 2, 1);
2981 lua_rawgeti(L, 2, 2);
2982 obj->rp->custom->description->align.x = FROM_DOUBLE(luaL_checknumber(L, -2));
2983 obj->rp->custom->description->align.y = FROM_DOUBLE(luaL_checknumber(L, -1));
2988 _edje_lua_description_set_min(lua_State *L)
2990 Edje_Lua_Edje_Part_Description *obj =
2991 _edje_lua_checkudata(L, 1, &mDescription);
2992 if (!obj->rp->custom) return 0;
2993 lua_rawgeti(L, 2, 1);
2994 lua_rawgeti(L, 2, 2);
2995 obj->rp->custom->description->min.w = luaL_checkint(L, -2);
2996 obj->rp->custom->description->min.h = luaL_checkint(L, -1);
3001 _edje_lua_description_set_max(lua_State *L)
3003 Edje_Lua_Edje_Part_Description *obj =
3004 _edje_lua_checkudata(L, 1, &mDescription);
3005 if (!obj->rp->custom) return 0;
3006 lua_rawgeti(L, 2, 1);
3007 lua_rawgeti(L, 2, 2);
3008 obj->rp->custom->description->max.w = luaL_checkint(L, -2);
3009 obj->rp->custom->description->max.h = luaL_checkint(L, -1);
3014 _edje_lua_description_set_step(lua_State *L)
3016 Edje_Lua_Edje_Part_Description *obj =
3017 _edje_lua_checkudata(L, 1, &mDescription);
3018 if (!obj->rp->custom) return 0;
3019 lua_rawgeti(L, 2, 1);
3020 lua_rawgeti(L, 2, 2);
3021 obj->rp->custom->description->step.x = luaL_checkint(L, -2);
3022 obj->rp->custom->description->step.y = luaL_checkint(L, -1);
3027 _edje_lua_description_set_aspect(lua_State *L)
3029 Edje_Lua_Edje_Part_Description *obj =
3030 _edje_lua_checkudata(L, 1, &mDescription);
3031 if (!obj->rp->custom) return 0;
3032 lua_rawgeti(L, 2, 1);
3033 lua_rawgeti(L, 2, 2);
3034 obj->rp->custom->description->aspect.min = FROM_DOUBLE(luaL_checknumber(L, -2));
3035 obj->rp->custom->description->aspect.max = FROM_DOUBLE(luaL_checknumber(L, -1));
3041 _edje_lua_description_set_aspect_pref(lua_State *L)
3043 Edje_Lua_Edje_Part_Description *obj =
3044 _edje_lua_checkudata(L, 1, &mDescription);
3045 if (!obj->rp->custom) return 0;
3046 obj->rp->custom->description->aspect.prefer = luaL_checknumber(L, 2);
3052 _edje_lua_description_set_color(lua_State *L)
3054 Edje_Lua_Edje_Part_Description *obj =
3055 _edje_lua_checkudata(L, 1, &mDescription);
3056 if (!obj->rp->custom) return 0;
3057 luaL_checktype(L, 2, LUA_TTABLE);
3058 lua_rawgeti(L, 2, 1);
3059 lua_rawgeti(L, 2, 2);
3060 lua_rawgeti(L, 2, 3);
3061 lua_rawgeti(L, 2, 4);
3062 obj->rp->custom->description->color.r = luaL_checkint(L, -4);
3063 obj->rp->custom->description->color.g = luaL_checkint(L, -3);
3064 obj->rp->custom->description->color.b = luaL_checkint(L, -2);
3065 obj->rp->custom->description->color.a = luaL_checkint(L, -1);
3070 _edje_lua_description_set_color2(lua_State *L)
3072 Edje_Lua_Edje_Part_Description *obj =
3073 _edje_lua_checkudata(L, 1, &mDescription);
3074 if (!obj->rp->custom) return 0;
3075 luaL_checktype(L, 2, LUA_TTABLE);
3076 lua_rawgeti(L, 2, 1);
3077 lua_rawgeti(L, 2, 2);
3078 lua_rawgeti(L, 2, 3);
3079 lua_rawgeti(L, 2, 4);
3080 obj->rp->custom->description->color2.r = luaL_checkint(L, -4);
3081 obj->rp->custom->description->color2.g = luaL_checkint(L, -3);
3082 obj->rp->custom->description->color2.b = luaL_checkint(L, -2);
3083 obj->rp->custom->description->color2.a = luaL_checkint(L, -1);
3088 _edje_lua_description_set_color3(lua_State *L)
3090 Edje_Lua_Edje_Part_Description *obj =
3091 _edje_lua_checkudata(L, 1, &mDescription);
3092 if (!obj->rp->custom) return 0;
3093 luaL_checktype(L, 2, LUA_TTABLE);
3094 lua_rawgeti(L, 2, 1);
3095 lua_rawgeti(L, 2, 2);
3096 lua_rawgeti(L, 2, 3);
3097 lua_rawgeti(L, 2, 4);
3098 obj->rp->custom->description->color3.r = luaL_checkint(L, -4);
3099 obj->rp->custom->description->color3.g = luaL_checkint(L, -3);
3100 obj->rp->custom->description->color3.b = luaL_checkint(L, -2);
3101 obj->rp->custom->description->color3.a = luaL_checkint(L, -1);
3106 _edje_lua_description_set_color_class(lua_State *L)
3108 Edje_Lua_Edje_Part_Description *obj =
3109 _edje_lua_checkudata(L, 1, &mDescription);
3110 if (!obj->rp->custom) return 0;
3111 obj->rp->custom->description->color_class = (char *)luaL_checkstring(L, 2);
3116 _edje_lua_description_set_rel1(lua_State *L)
3118 Edje_Lua_Edje_Part_Description *obj =
3119 _edje_lua_checkudata(L, 1, &mDescription);
3120 if (!obj->rp->custom) return 0;
3121 luaL_checktype(L, 2, LUA_TTABLE);
3122 lua_rawgeti(L, 2, 1);
3123 lua_rawgeti(L, 2, 2);
3124 obj->rp->custom->description->rel1.relative_x = FROM_DOUBLE(luaL_checknumber(L, -2));
3125 obj->rp->custom->description->rel1.relative_y = FROM_DOUBLE(luaL_checknumber(L, -1));
3130 _edje_lua_description_set_rel1_to(lua_State *L)
3132 Edje_Lua_Edje_Part_Description *obj =
3133 _edje_lua_checkudata(L, 1, &mDescription);
3134 if (!obj->rp->custom) return 0;
3135 luaL_checktype(L, 2, LUA_TTABLE);
3136 lua_rawgeti(L, 2, 1);
3137 lua_rawgeti(L, 2, 2);
3138 obj->rp->custom->description->rel1.id_x = luaL_checknumber(L, -2);
3139 obj->rp->custom->description->rel1.id_y = luaL_checknumber(L, -1);
3140 if (obj->rp->param1.description->rel1.id_x >= 0)
3141 obj->rp->param1.rel1_to_x = obj->ed->table_parts[obj->rp->param1.description->rel1.id_x % obj->ed->table_parts_size];
3142 if (obj->rp->param1.description->rel1.id_y >= 0)
3143 obj->rp->param1.rel1_to_y = obj->ed->table_parts[obj->rp->param1.description->rel1.id_y % obj->ed->table_parts_size];
3148 _edje_lua_description_set_rel1_offset(lua_State *L)
3150 Edje_Lua_Edje_Part_Description *obj =
3151 _edje_lua_checkudata(L, 1, &mDescription);
3152 if (!obj->rp->custom) return 0;
3153 luaL_checktype(L, 2, LUA_TTABLE);
3154 lua_rawgeti(L, 2, 1);
3155 lua_rawgeti(L, 2, 2);
3156 obj->rp->custom->description->rel1.offset_x = luaL_checkint(L, -2);
3157 obj->rp->custom->description->rel1.offset_y = luaL_checkint(L, -1);
3162 _edje_lua_description_set_rel2(lua_State *L)
3164 Edje_Lua_Edje_Part_Description *obj =
3165 _edje_lua_checkudata(L, 1, &mDescription);
3166 if (!obj->rp->custom) return 0;
3167 luaL_checktype(L, 2, LUA_TTABLE);
3168 lua_rawgeti(L, 2, 1);
3169 lua_rawgeti(L, 2, 2);
3170 obj->rp->custom->description->rel2.relative_x = FROM_DOUBLE(luaL_checknumber(L, -2));
3171 obj->rp->custom->description->rel2.relative_y = FROM_DOUBLE(luaL_checknumber(L, -1));
3176 _edje_lua_description_set_rel2_to(lua_State *L)
3178 Edje_Lua_Edje_Part_Description *obj =
3179 _edje_lua_checkudata(L, 1, &mDescription);
3180 if (!obj->rp->custom) return 0;
3181 luaL_checktype(L, 2, LUA_TTABLE);
3182 lua_rawgeti(L, 2, 1);
3183 lua_rawgeti(L, 2, 2);
3184 obj->rp->custom->description->rel2.id_x = luaL_checknumber(L, -2);
3185 obj->rp->custom->description->rel2.id_y = luaL_checknumber(L, -1);
3186 if (obj->rp->param1.description->rel2.id_x >= 0)
3187 obj->rp->param1.rel2_to_x = obj->ed->table_parts[obj->rp->param1.description->rel2.id_x % obj->ed->table_parts_size];
3188 if (obj->rp->param1.description->rel2.id_y >= 0)
3189 obj->rp->param1.rel2_to_y = obj->ed->table_parts[obj->rp->param1.description->rel2.id_y % obj->ed->table_parts_size];
3194 _edje_lua_description_set_rel2_offset(lua_State *L)
3196 Edje_Lua_Edje_Part_Description *obj =
3197 _edje_lua_checkudata(L, 1, &mDescription);
3198 if (!obj->rp->custom) return 0;
3199 luaL_checktype(L, 2, LUA_TTABLE);
3200 lua_rawgeti(L, 2, 1);
3201 lua_rawgeti(L, 2, 2);
3202 obj->rp->custom->description->rel2.offset_x = luaL_checkint(L, -2);
3203 obj->rp->custom->description->rel2.offset_y = luaL_checkint(L, -1);
3208 _edje_lua_description_set_image(lua_State *L)
3210 Edje_Lua_Edje_Part_Description *obj =
3211 _edje_lua_checkudata(L, 1, &mDescription);
3212 if (!obj->rp->custom) return 0;
3213 if ((obj->rp->part->type != EDJE_PART_TYPE_IMAGE))
3215 obj->rp->custom->description->image.id =
3216 edje_edit_image_id_get(obj->ed->obj, (char *)luaL_checkstring(L, 2));
3221 _edje_lua_description_set_border(lua_State *L)
3223 Edje_Lua_Edje_Part_Description *obj =
3224 _edje_lua_checkudata(L, 1, &mDescription);
3225 if ((obj->rp->part->type != EDJE_PART_TYPE_IMAGE))
3227 if (!obj->rp->custom) return 0;
3228 luaL_checktype(L, 2, LUA_TTABLE);
3229 lua_rawgeti(L, 2, 1);
3230 lua_rawgeti(L, 2, 2);
3231 lua_rawgeti(L, 2, 3);
3232 lua_rawgeti(L, 2, 4);
3233 obj->rp->custom->description->border.l = luaL_checkint(L, -2);
3234 obj->rp->custom->description->border.r = luaL_checkint(L, -1);
3235 obj->rp->custom->description->border.t = luaL_checkint(L, -2);
3236 obj->rp->custom->description->border.b = luaL_checkint(L, -1);
3241 _edje_lua_description_set_fill_smooth(lua_State *L)
3243 Edje_Lua_Edje_Part_Description *obj =
3244 _edje_lua_checkudata(L, 1, &mDescription);
3245 if ((obj->rp->part->type != EDJE_PART_TYPE_IMAGE))
3247 if (!obj->rp->custom) return 0;
3248 obj->rp->custom->description->fill.smooth = lua_toboolean(L, 2);
3253 _edje_lua_description_set_fill_pos(lua_State *L)
3255 Edje_Lua_Edje_Part_Description *obj =
3256 _edje_lua_checkudata(L, 1, &mDescription);
3257 if ((obj->rp->part->type != EDJE_PART_TYPE_IMAGE))
3259 if (!obj->rp->custom) return 0;
3260 luaL_checktype(L, 2, LUA_TTABLE);
3261 lua_rawgeti(L, 2, 1);
3262 lua_rawgeti(L, 2, 2);
3263 lua_rawgeti(L, 2, 3);
3264 lua_rawgeti(L, 2, 4);
3265 obj->rp->custom->description->fill.pos_rel_x = luaL_checkint(L, -2);
3266 obj->rp->custom->description->fill.pos_rel_y = luaL_checkint(L, -1);
3267 obj->rp->custom->description->fill.pos_abs_x = luaL_checkint(L, -2);
3268 obj->rp->custom->description->fill.pos_abs_y = luaL_checkint(L, -1);
3273 _edje_lua_description_set_fill_size(lua_State *L)
3275 Edje_Lua_Edje_Part_Description *obj =
3276 _edje_lua_checkudata(L, 1, &mDescription);
3277 if ((obj->rp->part->type != EDJE_PART_TYPE_IMAGE))
3279 if (!obj->rp->custom) return 0;
3280 luaL_checktype(L, 2, LUA_TTABLE);
3281 lua_rawgeti(L, 2, 1);
3282 lua_rawgeti(L, 2, 2);
3283 lua_rawgeti(L, 2, 3);
3284 lua_rawgeti(L, 2, 4);
3285 obj->rp->custom->description->fill.rel_x = luaL_checkint(L, -2);
3286 obj->rp->custom->description->fill.rel_y = luaL_checkint(L, -1);
3287 obj->rp->custom->description->fill.abs_x = luaL_checkint(L, -2);
3288 obj->rp->custom->description->fill.abs_y = luaL_checkint(L, -1);
3293 _edje_lua_description_set_text(lua_State *L)
3295 Edje_Lua_Edje_Part_Description *obj =
3296 _edje_lua_checkudata(L, 1, &mDescription);
3297 if ((obj->rp->part->type != EDJE_PART_TYPE_TEXT)
3298 && (obj->rp->part->type != EDJE_PART_TYPE_TEXTBLOCK))
3300 if (!obj->rp->custom) return 0;
3301 obj->rp->custom->description->text.text = (char *)luaL_checkstring(L, 2);
3306 _edje_lua_description_set_text_class(lua_State *L)
3308 Edje_Lua_Edje_Part_Description *obj =
3309 _edje_lua_checkudata(L, 1, &mDescription);
3310 if ((obj->rp->part->type != EDJE_PART_TYPE_TEXT)
3311 && (obj->rp->part->type != EDJE_PART_TYPE_TEXTBLOCK))
3313 if (!obj->rp->custom) return 0;
3314 obj->rp->custom->description->text.text_class =
3315 (char *)luaL_checkstring(L, 2);
3320 _edje_lua_description_set_text_font(lua_State *L)
3322 Edje_Lua_Edje_Part_Description *obj =
3323 _edje_lua_checkudata(L, 1, &mDescription);
3324 if ((obj->rp->part->type != EDJE_PART_TYPE_TEXT))
3326 if (!obj->rp->custom) return 0;
3327 obj->rp->custom->description->text.font = (char *)luaL_checkstring(L, 2);
3332 _edje_lua_description_set_text_style(lua_State *L)
3334 Edje_Lua_Edje_Part_Description *obj =
3335 _edje_lua_checkudata(L, 1, &mDescription);
3336 if ((obj->rp->part->type != EDJE_PART_TYPE_TEXTBLOCK))
3338 if (!obj->rp->custom) return 0;
3339 obj->rp->custom->description->text.style = (char *)luaL_checkstring(L, 2);
3344 _edje_lua_description_set_text_size(lua_State *L)
3346 Edje_Lua_Edje_Part_Description *obj =
3347 _edje_lua_checkudata(L, 1, &mDescription);
3348 if ((obj->rp->part->type != EDJE_PART_TYPE_TEXT))
3350 if (!obj->rp->custom) return 0;
3351 obj->rp->custom->description->text.size = luaL_checkint(L, 2);
3356 _edje_lua_description_set_text_fit(lua_State *L)
3358 Edje_Lua_Edje_Part_Description *obj =
3359 _edje_lua_checkudata(L, 1, &mDescription);
3360 if (!obj->rp->custom) return 0;
3361 luaL_checktype(L, 2, LUA_TTABLE);
3362 lua_rawgeti(L, 2, 1);
3363 lua_rawgeti(L, 2, 2);
3364 obj->rp->custom->description->text.fit_x = lua_toboolean(L, -2);
3365 obj->rp->custom->description->text.fit_y = lua_toboolean(L, -1);
3370 _edje_lua_description_set_text_min(lua_State *L)
3372 Edje_Lua_Edje_Part_Description *obj =
3373 _edje_lua_checkudata(L, 1, &mDescription);
3374 if ((obj->rp->part->type != EDJE_PART_TYPE_TEXT)
3375 && (obj->rp->part->type != EDJE_PART_TYPE_TEXTBLOCK))
3377 if (!obj->rp->custom) return 0;
3378 luaL_checktype(L, 2, LUA_TTABLE);
3379 lua_rawgeti(L, 2, 1);
3380 lua_rawgeti(L, 2, 2);
3381 obj->rp->custom->description->text.min_x = luaL_checkint(L, -2);
3382 obj->rp->custom->description->text.min_y = luaL_checkint(L, -1);
3387 _edje_lua_description_set_text_max(lua_State *L)
3389 Edje_Lua_Edje_Part_Description *obj =
3390 _edje_lua_checkudata(L, 1, &mDescription);
3391 if ((obj->rp->part->type != EDJE_PART_TYPE_TEXT)
3392 && (obj->rp->part->type != EDJE_PART_TYPE_TEXTBLOCK))
3394 if (!obj->rp->custom) return 0;
3395 luaL_checktype(L, 2, LUA_TTABLE);
3396 lua_rawgeti(L, 2, 1);
3397 lua_rawgeti(L, 2, 2);
3398 obj->rp->custom->description->text.max_x = luaL_checkint(L, -2);
3399 obj->rp->custom->description->text.max_y = luaL_checkint(L, -1);
3404 _edje_lua_description_set_text_align(lua_State *L)
3406 Edje_Lua_Edje_Part_Description *obj =
3407 _edje_lua_checkudata(L, 1, &mDescription);
3408 if ((obj->rp->part->type != EDJE_PART_TYPE_TEXT))
3410 if (!obj->rp->custom) return 0;
3411 luaL_checktype(L, 2, LUA_TTABLE);
3412 lua_rawgeti(L, 2, 1);
3413 lua_rawgeti(L, 2, 2);
3414 obj->rp->custom->description->text.align.x = FROM_DOUBLE(luaL_checknumber(L, -2));
3415 obj->rp->custom->description->text.align.y = FROM_DOUBLE(luaL_checknumber(L, -1));
3420 _edje_lua_description_set_visible(lua_State *L)
3422 Edje_Lua_Edje_Part_Description *obj =
3423 _edje_lua_checkudata(L, 1, &mDescription);
3424 if (!obj->rp->custom) return 0;
3425 obj->rp->custom->description->visible = lua_toboolean(L, 2);
3429 const luaL_Reg lDescription_set[] = {
3430 {"alignment", _edje_lua_description_set_alignment},
3431 {"min", _edje_lua_description_set_min},
3432 {"max", _edje_lua_description_set_max},
3433 {"step", _edje_lua_description_set_step},
3434 {"aspect", _edje_lua_description_set_aspect},
3435 {"aspect_pref", _edje_lua_description_set_aspect_pref},
3436 {"color", _edje_lua_description_set_color},
3437 {"color2", _edje_lua_description_set_color2},
3438 {"color3", _edje_lua_description_set_color3},
3439 {"color_class", _edje_lua_description_set_color_class},
3440 {"rel1", _edje_lua_description_set_rel1},
3441 {"rel1_to", _edje_lua_description_set_rel1_to},
3442 {"rel1_offset", _edje_lua_description_set_rel1_offset},
3443 {"rel2", _edje_lua_description_set_rel2},
3444 {"rel2_to", _edje_lua_description_set_rel2_to},
3445 {"rel2_offset", _edje_lua_description_set_rel2_offset},
3446 {"image", _edje_lua_description_set_image},
3447 {"border", _edje_lua_description_set_border},
3448 {"fill_smooth", _edje_lua_description_set_fill_smooth},
3449 {"fill_pos", _edje_lua_description_set_fill_pos},
3450 {"fill_size", _edje_lua_description_set_fill_size},
3451 {"text", _edje_lua_description_set_text},
3452 {"text_class", _edje_lua_description_set_text_class},
3453 {"text_font", _edje_lua_description_set_text_font},
3454 {"text_style", _edje_lua_description_set_text_style},
3455 {"text_size", _edje_lua_description_set_text_size},
3456 {"text_fit", _edje_lua_description_set_text_fit},
3457 {"text_min", _edje_lua_description_set_text_min},
3458 {"text_max", _edje_lua_description_set_text_max},
3459 {"text_align", _edje_lua_description_set_text_align},
3460 {"visible", _edje_lua_description_set_visible},
3461 {NULL, NULL} // sentinel
3464 const luaL_Reg lPart_get[];
3466 const luaL_Reg lPart_set[];
3468 const luaL_Reg lPart_fn[];
3470 const Edje_Lua_Reg mPart = {
3478 _edje_lua_edje_part_del_cb(void *data, __UNUSED__ Evas * e, Evas_Object * obj,
3479 __UNUSED__ void *event_info)
3481 //printf("_edje_lua_object_delete_cb\n");
3482 lua_State *L = data;
3483 _edje_lua_get_reg(L, obj);
3484 Edje_Lua_Edje_Part_Object *udata = _edje_lua_checkudata(L, -1, &mPart);
3486 _edje_lua_free_reg(L, udata); // created in _edje_lua_group_mt_index
3487 _edje_lua_free_reg(L, obj); // created in _edje_lua_group_mt_index
3490 const Edje_Lua_Reg *cPart[] = {
3498 _edje_lua_part_get_swallow(lua_State *L)
3500 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
3501 Evas_Object *swa = edje_object_part_swallow_get(obj->ed->obj, obj->key);
3502 _edje_lua_get_reg(L, swa);
3503 // TODO create object if it does not already exist?
3508 _edje_lua_part_get_type(lua_State *L)
3510 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
3511 lua_pushnumber(L, edje_edit_part_type_get(obj->ed->obj, obj->key));
3516 _edje_lua_part_get_effect(lua_State *L)
3518 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
3519 lua_pushnumber(L, edje_edit_part_effect_get(obj->ed->obj, obj->key));
3524 _edje_lua_part_get_mouse_events(lua_State *L)
3526 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
3527 lua_pushboolean(L, edje_edit_part_mouse_events_get(obj->ed->obj, obj->key));
3532 _edje_lua_part_get_repeat_events(lua_State *L)
3534 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
3535 lua_pushboolean(L, edje_edit_part_repeat_events_get(obj->ed->obj, obj->key));
3540 _edje_lua_part_get_states_list(lua_State *L)
3542 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
3543 Eina_List *slist = edje_edit_part_states_list_get(obj->ed->obj, obj->key);
3547 for (ilist = slist; ilist; ilist = eina_list_next(ilist))
3549 lua_pushstring(L, eina_list_data_get(ilist));
3550 lua_rawseti(L, -2, i++);
3552 edje_edit_string_list_free(slist);
3557 _edje_lua_part_get_state(lua_State *L)
3559 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
3562 state = edje_object_part_state_get(obj->ed->obj, obj->key, &val);
3563 lua_createtable(L, 2, 0);
3564 lua_pushstring(L, state);
3565 lua_rawseti(L, -2, 1);
3566 lua_pushnumber(L, val);
3567 lua_rawseti(L, -2, 2);
3572 _edje_lua_part_get_text(lua_State *L)
3574 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
3575 lua_pushstring(L, edje_object_part_text_get(obj->ed->obj, obj->key));
3580 _edje_lua_part_get_text_selection(lua_State *L)
3582 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
3584 edje_object_part_text_selection_get(obj->ed->obj, obj->key));
3589 _edje_lua_part_get_drag_dir(lua_State *L)
3591 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
3592 lua_pushnumber(L, edje_object_part_drag_dir_get(obj->ed->obj, obj->key));
3597 _edje_lua_part_get_drag_value(lua_State *L)
3599 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
3601 edje_object_part_drag_value_get(obj->ed->obj, obj->key, &dx, &dy);
3602 lua_createtable(L, 2, 0);
3603 lua_pushnumber(L, dx);
3604 lua_rawseti(L, -2, 1);
3605 lua_pushnumber(L, dy);
3606 lua_rawseti(L, -2, 2);
3611 _edje_lua_part_get_drag_size(lua_State *L)
3613 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
3615 edje_object_part_drag_size_get(obj->ed->obj, obj->key, &dx, &dy);
3616 lua_createtable(L, 2, 0);
3617 lua_pushnumber(L, dx);
3618 lua_rawseti(L, -2, 1);
3619 lua_pushnumber(L, dy);
3620 lua_rawseti(L, -2, 2);
3625 _edje_lua_part_get_drag_step(lua_State *L)
3627 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
3629 edje_object_part_drag_step_get(obj->ed->obj, obj->key, &dx, &dy);
3630 lua_createtable(L, 2, 0);
3631 lua_pushnumber(L, dx);
3632 lua_rawseti(L, -2, 1);
3633 lua_pushnumber(L, dy);
3634 lua_rawseti(L, -2, 2);
3639 _edje_lua_part_get_drag_page(lua_State *L)
3641 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
3643 edje_object_part_drag_page_get(obj->ed->obj, obj->key, &dx, &dy);
3644 lua_createtable(L, 2, 0);
3645 lua_pushnumber(L, dx);
3646 lua_rawseti(L, -2, 1);
3647 lua_pushnumber(L, dy);
3648 lua_rawseti(L, -2, 2);
3653 _edje_lua_part_get_text_cursor_geometry(lua_State *L)
3655 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
3656 Evas_Coord x, y, w, h;
3657 edje_object_part_text_cursor_geometry_get(obj->ed->obj, obj->key,
3659 lua_createtable(L, 4, 0);
3660 lua_pushnumber(L, x);
3661 lua_rawseti(L, -2, 1);
3662 lua_pushnumber(L, y);
3663 lua_rawseti(L, -2, 2);
3664 lua_pushnumber(L, w);
3665 lua_rawseti(L, -2, 3);
3666 lua_pushnumber(L, h);
3667 lua_rawseti(L, -2, 4);
3672 _edje_lua_part_get_geometry(lua_State *L)
3674 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
3675 Evas_Coord x, y, w, h;
3676 edje_object_part_geometry_get(obj->ed->obj, obj->key, &x, &y, &w, &h);
3677 lua_createtable(L, 4, 0);
3678 lua_pushnumber(L, x);
3679 lua_rawseti(L, -2, 1);
3680 lua_pushnumber(L, y);
3681 lua_rawseti(L, -2, 2);
3682 lua_pushnumber(L, w);
3683 lua_rawseti(L, -2, 3);
3684 lua_pushnumber(L, h);
3685 lua_rawseti(L, -2, 4);
3690 _edje_lua_part_get_table_col_row_size(lua_State *L)
3692 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
3694 edje_object_part_table_col_row_size_get(obj->ed->obj, obj->key, &cols, &rows);
3695 lua_createtable(L, 2, 0);
3696 lua_pushnumber(L, cols); lua_rawseti(L, -2, 1);
3697 lua_pushnumber(L, rows); lua_rawseti(L, -2, 2);
3701 static int _edje_lua_part_fn_custom_state(lua_State *L);
3703 const luaL_Reg lPart_get[] = {
3704 {"custom_state", _edje_lua_part_fn_custom_state},
3705 {"Swallow", _edje_lua_part_get_swallow}, //TODO it the capital S correct?
3707 {"drag_dir", _edje_lua_part_get_drag_dir},
3708 {"drag_value", _edje_lua_part_get_drag_value},
3709 {"drag_size", _edje_lua_part_get_drag_size},
3710 {"drag_step", _edje_lua_part_get_drag_step},
3711 {"drag_page", _edje_lua_part_get_drag_page},
3713 {"type", _edje_lua_part_get_type},
3714 {"effect", _edje_lua_part_get_effect},
3715 {"mouse_events", _edje_lua_part_get_mouse_events},
3716 {"repeat_events", _edje_lua_part_get_repeat_events},
3717 {"states_list", _edje_lua_part_get_states_list},
3718 {"state", _edje_lua_part_get_state},
3720 {"text", _edje_lua_part_get_text},
3721 {"text_selection", _edje_lua_part_get_text_selection},
3722 {"text_cursor_geometry", _edje_lua_part_get_text_cursor_geometry},
3724 {"geometry", _edje_lua_part_get_geometry},
3725 {"part_col_row_size", _edje_lua_part_get_table_col_row_size},
3726 {NULL, NULL} // sentinel
3730 _edje_lua_part_set_effect(lua_State *L)
3732 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
3733 edje_edit_part_effect_set(obj->ed->obj, obj->key, luaL_checkint(L, 2));
3738 _edje_lua_part_set_mouse_events(lua_State *L)
3740 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
3741 edje_edit_part_mouse_events_set(obj->ed->obj, obj->key, lua_toboolean(L, 2));
3746 _edje_lua_part_set_repeat_events(lua_State *L)
3748 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
3749 edje_edit_part_repeat_events_set(obj->ed->obj, obj->key,
3750 lua_toboolean(L, 2));
3755 _edje_lua_part_set_state(lua_State *L)
3757 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
3758 luaL_checktype(L, 2, LUA_TTABLE);
3759 lua_rawgeti(L, 2, 1);
3760 lua_rawgeti(L, 2, 2);
3761 _edje_part_description_apply(obj->ed, obj->rp,
3762 luaL_checkstring(L, -2), luaL_checknumber(L, -1),
3764 _edje_part_pos_set(obj->ed, obj->rp, EDJE_TWEEN_MODE_LINEAR, ZERO, ZERO, ZERO);
3765 _edje_recalc(obj->ed);
3770 _edje_lua_part_set_tween_state(lua_State *L)
3772 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
3773 luaL_checktype(L, 2, LUA_TTABLE);
3774 lua_rawgeti(L, 2, 1);
3775 lua_rawgeti(L, 2, 2);
3776 lua_rawgeti(L, 2, 3);
3777 lua_rawgeti(L, 2, 4);
3778 lua_rawgeti(L, 2, 5);
3779 _edje_part_description_apply(obj->ed, obj->rp,
3780 luaL_checkstring(L, -4), luaL_checknumber(L, -3),
3781 luaL_checkstring(L, -2), luaL_checknumber(L, -1));
3782 _edje_part_pos_set(obj->ed, obj->rp, EDJE_TWEEN_MODE_LINEAR,
3783 FROM_DOUBLE(luaL_checknumber(L, -5)), ZERO, ZERO);
3784 _edje_recalc(obj->ed);
3789 _edje_lua_part_set_text(lua_State *L)
3791 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
3792 edje_object_part_text_set(obj->ed->obj, obj->key, luaL_checkstring(L, 2));
3797 _edje_lua_part_set_drag_value(lua_State *L)
3799 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
3800 lua_rawgeti(L, 2, 1);
3801 lua_rawgeti(L, 2, 2);
3802 edje_object_part_drag_value_set(obj->ed->obj, obj->key,
3803 luaL_checknumber(L, -2),
3804 luaL_checknumber(L, -1));
3809 _edje_lua_part_set_drag_size(lua_State *L)
3811 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
3812 lua_rawgeti(L, 2, 1);
3813 lua_rawgeti(L, 2, 2);
3814 edje_object_part_drag_size_set(obj->ed->obj, obj->key,
3815 luaL_checknumber(L, -2),
3816 luaL_checknumber(L, -1));
3821 _edje_lua_part_set_drag_step(lua_State *L)
3823 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
3824 lua_rawgeti(L, 2, 1);
3825 lua_rawgeti(L, 2, 2);
3826 edje_object_part_drag_step_set(obj->ed->obj, obj->key,
3827 luaL_checknumber(L, -2),
3828 luaL_checknumber(L, -1));
3833 _edje_lua_part_set_drag_page(lua_State *L)
3835 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
3836 lua_rawgeti(L, 2, 1);
3837 lua_rawgeti(L, 2, 2);
3838 edje_object_part_drag_page_set(obj->ed->obj, obj->key,
3839 luaL_checknumber(L, -2),
3840 luaL_checknumber(L, -1));
3844 const luaL_Reg lPart_set[] = {
3845 {"drag_value", _edje_lua_part_set_drag_value},
3846 {"drag_size", _edje_lua_part_set_drag_size},
3847 {"drag_step", _edje_lua_part_set_drag_step},
3848 {"drag_page", _edje_lua_part_set_drag_page},
3850 {"effect", _edje_lua_part_set_effect},
3851 {"mouse_events", _edje_lua_part_set_mouse_events},
3852 {"repeat_events", _edje_lua_part_set_repeat_events},
3853 {"state", _edje_lua_part_set_state},
3854 {"tween_state", _edje_lua_part_set_tween_state},
3855 {"text", _edje_lua_part_set_text},
3856 {NULL, NULL} // sentinel
3860 _edje_lua_part_fn_swallow(lua_State *L)
3862 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
3863 Edje_Lua_Evas_Object *swa = _edje_lua_checkudata(L, 2, &mObject);
3864 edje_object_part_swallow(obj->ed->obj, obj->key, swa->eo);
3869 _edje_lua_part_fn_unswallow(lua_State *L)
3871 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
3872 edje_object_part_unswallow(obj->ed->obj, obj->eo);
3877 _edje_lua_part_fn_text_select_none(lua_State *L)
3879 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
3880 edje_object_part_text_select_none(obj->ed->obj, obj->key);
3885 _edje_lua_part_fn_text_select_all(lua_State *L)
3887 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
3888 edje_object_part_text_select_all(obj->ed->obj, obj->key);
3893 _edje_lua_part_fn_text_insert(lua_State *L)
3895 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
3896 edje_object_part_text_insert(obj->ed->obj, obj->key, luaL_checkstring(L, 2));
3901 _edje_lua_part_fn_custom_state(lua_State *L)
3905 Edje_Part_Description *parent;
3906 Edje_Part_Image_Id *iid;
3908 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
3909 /* check whether this part already has a "custom" state */
3910 if (obj->rp->custom)
3912 _edje_lua_get_reg(L, obj->rp->custom->description);
3916 name = (char *)luaL_checkstring(L, 2); // state name
3917 val = luaL_checknumber(L, 3); // state val
3918 if (!(parent = _edje_part_description_find(obj->ed, obj->rp, name, val)))
3923 /* now create the custom state */
3924 Edje_Lua_Edje_Part_Description *tar =
3925 lua_newuserdata(L, sizeof(Edje_Lua_Edje_Part_Description));
3927 _edje_lua_set_class(L, -1, cDescription);
3928 _edje_lua_new_reg(L, -1, tar); // freed in edje_load.c::_edje_file_del
3929 if (!(tar->pd = calloc(1, sizeof(Edje_Part_Description))))
3935 obj->rp->custom = eina_mempool_malloc(_edje_real_part_state_mp, sizeof (Edje_Real_Part_State));
3936 if (!obj->rp->custom)
3944 *(tar->pd) = *parent;
3945 tar->pd->state.name = (char *)eina_stringshare_add("custom");
3946 tar->pd->state.value = 0.0;
3948 * make sure all the allocated memory is getting copied,
3949 * not just referenced
3951 tar->pd->image.tween_list = NULL;
3952 EINA_LIST_FOREACH(parent->image.tween_list, l, iid)
3954 Edje_Part_Image_Id *iid_new;
3955 iid_new = calloc(1, sizeof(Edje_Part_Image_Id));
3956 iid_new->id = iid->id;
3958 tar->pd->image.tween_list =
3959 eina_list_append(tar->pd->image.tween_list, iid_new);
3961 #define DUP(x) x ? (char *)eina_stringshare_add(x) : NULL
3962 tar->pd->color_class = DUP(tar->pd->color_class);
3963 tar->pd->text.text = DUP(tar->pd->text.text);
3964 tar->pd->text.text_class = DUP(tar->pd->text.text_class);
3965 tar->pd->text.font = DUP(tar->pd->text.font);
3966 tar->pd->text.style = DUP(tar->pd->text.style);
3968 obj->rp->custom->description = tar->pd;
3969 _edje_lua_new_reg(L, -1, obj->rp->custom->description); // freed in edje_load.c::_edje_file_del
3974 _edje_lua_part_fn_table_pack(lua_State *L)
3976 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
3977 Edje_Lua_Evas_Object *tar = _edje_lua_checkudata(L, 2, &mObject);
3979 edje_object_part_table_pack(obj->ed->obj, obj->key, tar->eo,
3980 luaL_checkint(L, 3),
3981 luaL_checkint(L, 4),
3982 luaL_checkint(L, 5),
3983 luaL_checkint(L, 6)));
3988 _edje_lua_part_fn_table_unpack(lua_State *L)
3990 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
3991 Edje_Lua_Evas_Object *tar = _edje_lua_checkudata(L, 2, &mObject);
3993 edje_object_part_table_unpack(obj->ed->obj, obj->key, tar->eo));
3998 _edje_lua_part_fn_table_clear(lua_State *L)
4000 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
4002 edje_object_part_table_clear(obj->ed->obj, obj->key, lua_toboolean(L, 2)));
4007 _edje_lua_part_fn_box_append(lua_State *L)
4009 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
4010 Edje_Lua_Evas_Object *tar = _edje_lua_checkudata(L, 2, &mObject);
4012 edje_object_part_box_append(obj->ed->obj, obj->key, tar->eo));
4017 _edje_lua_part_fn_box_prepend(lua_State *L)
4019 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
4020 Edje_Lua_Evas_Object *tar = _edje_lua_checkudata(L, 2, &mObject);
4022 edje_object_part_box_prepend(obj->ed->obj, obj->key, tar->eo));
4027 _edje_lua_part_fn_box_insert_before(lua_State *L)
4029 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
4030 Edje_Lua_Evas_Object *tar = _edje_lua_checkudata(L, 2, &mObject);
4031 Edje_Lua_Evas_Object *ref = _edje_lua_checkudata(L, 3, &mObject);
4033 edje_object_part_box_insert_before(obj->ed->obj, obj->key, tar->eo, ref->eo));
4038 _edje_lua_part_fn_box_insert_at(lua_State *L)
4040 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
4041 Edje_Lua_Evas_Object *tar = _edje_lua_checkudata(L, 2, &mObject);
4043 edje_object_part_box_insert_at(obj->ed->obj, obj->key, tar->eo, luaL_checkint(L, 3)));
4048 _edje_lua_part_fn_box_remove(lua_State *L)
4050 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
4051 Edje_Lua_Evas_Object *tar = _edje_lua_checkudata(L, 2, &mObject);
4052 edje_object_part_box_remove(obj->ed->obj, obj->key, tar->eo);
4053 lua_pushvalue(L, 2);
4058 _edje_lua_part_fn_box_remove_at(lua_State *L)
4060 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
4061 _edje_lua_get_reg(L, edje_object_part_box_remove_at(obj->ed->obj, obj->key, luaL_checkint(L, 2)));
4066 _edje_lua_part_fn_box_remove_all(lua_State *L)
4068 Edje_Lua_Edje_Part_Object *obj = _edje_lua_checkudata(L, 1, &mPart);
4070 edje_object_part_box_remove_all(obj->ed->obj, obj->key, lua_toboolean(L, 2)));
4074 const luaL_Reg lPart_fn[] = {
4075 {"swallow", _edje_lua_part_fn_swallow},
4076 {"unswallow", _edje_lua_part_fn_unswallow},
4078 {"custom_state", _edje_lua_part_fn_custom_state},
4080 {"text_select_none", _edje_lua_part_fn_text_select_none},
4081 {"text_select_all", _edje_lua_part_fn_text_select_all},
4082 {"text_insert", _edje_lua_part_fn_text_insert},
4084 {"table_pack", _edje_lua_part_fn_table_pack},
4085 {"table_unpack", _edje_lua_part_fn_table_unpack},
4086 {"table_clear", _edje_lua_part_fn_table_clear},
4088 {"box_append", _edje_lua_part_fn_box_append},
4089 {"box_prepend", _edje_lua_part_fn_box_prepend},
4090 {"box_insert_before", _edje_lua_part_fn_box_insert_before},
4091 {"box_insert_at", _edje_lua_part_fn_box_insert_at},
4092 {"box_remove", _edje_lua_part_fn_box_remove},
4093 {"box_remove_at", _edje_lua_part_fn_box_remove_at},
4094 {"box_remove_all", _edje_lua_part_fn_box_remove_all},
4095 {NULL, NULL} // sentinel
4098 const luaL_Reg lGroup_mt[];
4100 const luaL_Reg lGroup_get[];
4102 const luaL_Reg lGroup_set[];
4104 const luaL_Reg lGroup_fn[];
4106 const Edje_Lua_Reg mGroup = {
4113 const Edje_Lua_Reg *cGroup[] = {
4121 _edje_lua_group_mt_index(lua_State *L)
4123 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mGroup);
4124 lua_getmetatable(L, 1);
4125 if (!_edje_lua_look_fn(L))
4127 // look in lGroup_fn
4128 if (!_edje_lua_look_get(L))
4130 // look in lGroup_get
4131 const char *key = luaL_checkstring(L, 2);
4132 Edje *ed = _edje_fetch(obj->eo);
4133 Edje_Real_Part *rp = _edje_real_part_recursive_get(ed, key);
4136 // check if lua userdata exists
4137 Evas_Object *part = (Evas_Object *) edje_object_part_object_get(obj->eo, key);
4138 _edje_lua_get_reg(L, part);
4139 if (lua_isnil(L, -1))
4143 Edje_Lua_Edje_Part_Object *tar =
4144 lua_newuserdata(L, sizeof(Edje_Lua_Edje_Part_Object));
4150 _edje_lua_set_class(L, -1, cPart);
4151 _edje_lua_new_reg(L, -1, tar); // freed in _edje_lua_edje_part_del_cb
4152 _edje_lua_new_reg(L, -1, part); // freed in _edje_lua_edje_part_del_cb
4153 evas_object_event_callback_add(tar->eo,
4155 _edje_lua_edje_part_del_cb,
4161 // look in obj environment table
4163 lua_pushvalue(L, 2); // key
4171 const luaL_Reg lGroup_mt[] = {
4172 {"__index", _edje_lua_group_mt_index},
4173 {NULL, NULL} // sentinel
4177 _edje_lua_group_get_group(lua_State *L)
4179 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mGroup);
4180 const char *file, *group;
4181 edje_object_file_get(obj->eo, &file, &group);
4182 lua_pushstring(L, group);
4187 _edje_lua_group_get_mouse(lua_State *L)
4189 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mGroup);
4191 evas_pointer_canvas_xy_get(evas_object_evas_get(obj->eo), &x, &y);
4194 lua_createtable(L, 2, 0);
4195 lua_pushnumber(L, x);
4196 lua_rawseti(L, -2, 1);
4197 lua_pushnumber(L, y);
4198 lua_rawseti(L, -2, 2);
4203 _edje_lua_group_get_mouse_buttons(lua_State *L)
4205 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mGroup);
4206 lua_pushnumber(L, evas_pointer_button_down_mask_get(obj->ed->evas));
4211 _edje_lua_group_get_size_min(lua_State *L)
4213 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mGroup);
4215 edje_object_size_min_get(obj->eo, &w, &h);
4216 lua_createtable(L, 2, 0);
4217 lua_pushnumber(L, w);
4218 lua_rawseti(L, -2, 1);
4219 lua_pushnumber(L, h);
4220 lua_rawseti(L, -2, 2);
4225 _edje_lua_group_get_size_max(lua_State *L)
4227 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mGroup);
4229 edje_object_size_max_get(obj->eo, &w, &h);
4230 lua_createtable(L, 2, 0);
4231 lua_pushnumber(L, w);
4232 lua_rawseti(L, -2, 1);
4233 lua_pushnumber(L, h);
4234 lua_rawseti(L, -2, 2);
4239 _edje_lua_group_get_scale(lua_State *L)
4241 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mGroup);
4242 lua_pushnumber(L, edje_object_scale_get(obj->eo));
4247 _edje_lua_group_get_load_error(lua_State *L)
4249 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mGroup);
4250 lua_pushnumber(L, edje_object_load_error_get(obj->eo));
4255 _edje_lua_group_get_load_error_str(lua_State *L)
4257 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mGroup);
4258 lua_pushstring(L, edje_load_error_str(edje_object_load_error_get(obj->eo)));
4263 _edje_lua_group_get_play(lua_State *L)
4265 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mGroup);
4266 lua_pushboolean(L, edje_object_play_get(obj->eo));
4271 _edje_lua_group_get_animation(lua_State *L)
4273 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mGroup);
4274 lua_pushboolean(L, edje_object_animation_get(obj->eo));
4279 _edje_lua_group_get_frametime(lua_State *L)
4281 lua_pushnumber(L, edje_frametime_get());
4285 const luaL_Reg lGroup_get[] = {
4286 {"group", _edje_lua_group_get_group},
4287 {"mouse", _edje_lua_group_get_mouse},
4288 {"mouse_buttons", _edje_lua_group_get_mouse_buttons},
4289 {"size_min", _edje_lua_group_get_size_min},
4290 {"size_max", _edje_lua_group_get_size_max},
4291 {"scale", _edje_lua_group_get_scale},
4292 {"load_error", _edje_lua_group_get_load_error},
4293 {"load_error_str", _edje_lua_group_get_load_error_str},
4294 {"play", _edje_lua_group_get_play},
4295 {"animation", _edje_lua_group_get_animation},
4296 {"frametime", _edje_lua_group_get_frametime},
4297 {NULL, NULL} // sentinel
4301 _edje_lua_group_set_group(lua_State *L)
4303 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mGroup);
4304 edje_object_file_set(obj->eo, obj->ed->file->path, luaL_checkstring(L, 2));
4309 _edje_lua_group_set_size_min(lua_State *L)
4311 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mGroup);
4313 luaL_checktype(L, 2, LUA_TTABLE);
4314 lua_rawgeti(L, 2, 1);
4315 lua_rawgeti(L, 2, 2);
4316 obj->ed->collection->prop.min.w = luaL_checkint(L, -2);
4317 obj->ed->collection->prop.min.h = luaL_checkint(L, -1);
4319 _edje_recalc(obj->ed);
4324 _edje_lua_group_set_size_max(lua_State *L)
4326 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mGroup);
4327 luaL_checktype(L, 2, LUA_TTABLE);
4328 lua_rawgeti(L, 2, 1);
4329 lua_rawgeti(L, 2, 2);
4330 obj->ed->collection->prop.max.w = luaL_checkint(L, -2);
4331 obj->ed->collection->prop.max.h = luaL_checkint(L, -1);
4333 _edje_recalc(obj->ed);
4338 _edje_lua_group_set_scale(lua_State *L)
4340 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mGroup);
4341 edje_object_scale_set(obj->eo, luaL_checknumber(L, 2));
4346 _edje_lua_group_set_play(lua_State *L)
4348 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mGroup);
4349 edje_object_play_set(obj->eo, lua_toboolean(L, 2));
4354 _edje_lua_group_set_animation(lua_State *L)
4356 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mGroup);
4357 edje_object_animation_set(obj->eo, lua_toboolean(L, 2));
4362 _edje_lua_group_text_change_cb(void* data, Evas_Object *obj, const char* part)
4364 Edje_Lua_Ref *ref = data;
4365 lua_State *L = ref->L;
4368 _edje_lua_get_ref(L, ref);
4369 _edje_lua_get_reg(L, obj);
4370 lua_pushstring(L, part);
4372 if ((err_code = lua_pcall(L, 2, 0, 0)))
4373 _edje_lua_error(L, err_code);
4377 _edje_lua_group_set_text_change_cb(lua_State *L)
4379 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mGroup);
4380 edje_object_text_change_cb_set(obj->eo, _edje_lua_group_text_change_cb, _edje_lua_new_ref(L, 2));
4385 _edje_lua_group_set_frametime(lua_State *L)
4387 edje_frametime_set(luaL_checknumber(L, 2));
4390 const luaL_Reg lGroup_set[] = {
4391 {"group", _edje_lua_group_set_group},
4392 {"size_min", _edje_lua_group_set_size_min},
4393 {"size_max", _edje_lua_group_set_size_max},
4394 {"scale", _edje_lua_group_set_scale},
4395 {"play", _edje_lua_group_set_play},
4396 {"animation", _edje_lua_group_set_animation},
4397 {"text_change_cb", _edje_lua_group_set_text_change_cb},
4398 {"frametime", _edje_lua_group_set_frametime},
4399 {NULL, NULL} // sentinel
4403 _edje_lua_group_fn_timer(lua_State *L)
4405 Edje_Lua_Timer *tar = lua_newuserdata(L, sizeof(Edje_Lua_Timer));
4407 _edje_lua_set_class(L, -1, cTimer);
4408 /* ^^^^^^^^^^^^^^^^(L, index, class)
4411 lua_setfenv(L, index - 1);
4413 lua_setfenv(L, index);
4415 _edje_lua_get_metatable(L, class);
4417 lua_setmetatable(L, index - 1);
4419 lua_setmetatable(L, index);
4422 tar->et = ecore_timer_add(luaL_checknumber(L, 2), _edje_lua_timer_cb, tar);
4425 _edje_lua_new_reg(L, -1, tar); // freed in _edje_lua_timer_cb/del
4426 /* ^^^^^^^^^^^^^^(L, index, ptr)
4427 lua_pushvalue(L, index);
4428 lua_pushlightuserdata(L, ptr);
4430 lua_rawset(L, LUA_REGISTRYINDEX); // freed in _edje_lua_free_reg
4433 tar->cb = _edje_lua_new_ref(L, 3); // freed in _edje_lua_timer_cb/del
4434 /* ^^^^^^^^^^^^^^^^^^^^^^^^(L, index)
4435 lua_pushvalue(L, index);
4436 Edje_Lua_Ref *ref = malloc(sizeof(Edje_Lua_Ref));
4437 ref->id = luaL_ref(L, LUA_REGISTRYINDEX);
4445 _edje_lua_group_fn_animator(lua_State *L)
4447 Edje_Lua_Animator *tar = lua_newuserdata(L, sizeof(Edje_Lua_Animator));
4448 _edje_lua_set_class(L, -1, cAnimator);
4449 tar->ea = ecore_animator_add(_edje_lua_animator_cb, tar);
4451 _edje_lua_new_reg(L, -1, tar); // freed in _edje_lua_animator_cb/del
4452 tar->cb = _edje_lua_new_ref(L, 2); // freed in _edje_lua_animator_cb/del
4457 _edje_lua_group_fn_poller(lua_State *L)
4460 Edje_Lua_Poller *tar;
4461 tar = lua_newuserdata(L, sizeof(Edje_Lua_Poller));
4462 _edje_lua_set_class(L, -1, cPoller);
4464 interval = luaL_checknumber(L, 2);
4465 if ((interval <= 0) || ((interval & 1) != 0))
4470 // Only 1 type of poller currently implemented in ecore
4471 tar->ep = ecore_poller_add(ECORE_POLLER_CORE, interval,
4472 _edje_lua_poller_cb, tar);
4474 _edje_lua_new_reg(L, -1, tar); // freed in _edje_lua_poller_cb/del
4475 tar->cb = _edje_lua_new_ref(L, 3); // freed in _edje_lua_poller_cb/del
4481 _edje_lua_group_fn_transform(lua_State *L)
4483 Edje_Lua_Transform *tar = lua_newuserdata(L, sizeof(Edje_Lua_Transform));
4484 evas_transform_identity_set (&(tar->et));
4485 _edje_lua_set_class(L, -1, cTransform);
4491 _edje_lua_group_fn_signal_emit(lua_State *L)
4493 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mGroup);
4494 edje_object_signal_emit(obj->eo,
4495 luaL_checkstring(L, 2), luaL_checkstring(L, 3));
4499 static Edje_Program *
4500 _edje_lua_program_get_byname(Evas_Object * obj, const char *prog_name)
4505 ed = _edje_fetch(obj);
4510 for (i = 0; i < ed->table_programs_size; i++)
4512 epr = ed->table_programs[i];
4513 if ((epr->name) && (strcmp(epr->name, prog_name) == 0))
4520 _edje_lua_group_fn_program_run(lua_State *L)
4522 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mGroup);
4524 _edje_lua_program_get_byname(obj->eo, luaL_checkstring(L, 2));
4526 _edje_program_run(obj->ed, pr, 0, "", "");
4531 _edje_lua_group_fn_program_stop(lua_State *L)
4533 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mGroup);
4535 _edje_lua_program_get_byname(obj->eo, luaL_checkstring(L, 2));
4536 int program_id = pr->id;
4537 Edje_Running_Program *runp;
4539 obj->ed->walking_actions = 1;
4540 EINA_LIST_FOREACH(obj->ed->actions, l, runp)
4541 if (program_id == runp->program->id)
4542 _edje_program_end(obj->ed, runp);
4543 obj->ed->walking_actions = 0;
4548 _edje_lua_group_fn_message_send(lua_State *L)
4550 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mGroup);
4551 int type = luaL_checkint(L, 2);
4557 case EDJE_MESSAGE_NONE:
4559 case EDJE_MESSAGE_SIGNAL:
4561 case EDJE_MESSAGE_STRING:
4563 Edje_Message_String *msg_string =
4564 malloc(sizeof(Edje_Message_String));
4565 msg_string->str = (char *)luaL_checkstring(L, 4);
4569 case EDJE_MESSAGE_INT:
4571 Edje_Message_Int *msg_int = malloc(sizeof(Edje_Message_Int));
4573 msg_int->val = luaL_checkint(L, 4);
4577 case EDJE_MESSAGE_FLOAT:
4579 Edje_Message_Float *msg_float = malloc(sizeof(Edje_Message_Float));
4581 msg_float->val = luaL_checknumber(L, 4);
4585 case EDJE_MESSAGE_STRING_SET:
4587 if (lua_type(L, 4) != LUA_TTABLE)
4589 size = lua_objlen(L, 4);
4590 Edje_Message_String_Set *msg_string_set =
4591 malloc(sizeof(Edje_Message_String_Set) +
4592 (size - 1) * sizeof(char *));
4593 msg_string_set->count = size;
4594 for (i = 0; i < size; i++)
4596 lua_rawgeti(L, 4, i + 1);
4597 msg_string_set->str[i] = (char *)luaL_checkstring(L, -1);
4600 msg = msg_string_set;
4603 case EDJE_MESSAGE_INT_SET:
4605 if (lua_type(L, 4) != LUA_TTABLE)
4607 size = lua_objlen(L, 4);
4608 Edje_Message_Int_Set *msg_int_set =
4609 malloc(sizeof(Edje_Message_Int_Set) + (size - 1) * sizeof(int));
4610 msg_int_set->count = size;
4611 for (i = 0; i < size; i++)
4613 lua_rawgeti(L, 4, i + 1);
4614 msg_int_set->val[i] = luaL_checkint(L, -1);
4620 case EDJE_MESSAGE_FLOAT_SET:
4622 if (lua_type(L, 4) != LUA_TTABLE)
4624 size = lua_objlen(L, 4);
4625 Edje_Message_Float_Set *msg_float_set =
4626 malloc(sizeof(Edje_Message_Float_Set) +
4627 (size - 1) * sizeof(double));
4628 msg_float_set->count = size;
4629 for (i = 0; i < size; i++)
4631 lua_rawgeti(L, 4, i + 1);
4632 msg_float_set->val[i] = luaL_checknumber(L, -1);
4635 msg = msg_float_set;
4638 case EDJE_MESSAGE_STRING_INT:
4640 Edje_Message_String_Int *msg_string_int =
4641 malloc(sizeof(Edje_Message_String_Int));
4642 msg_string_int->str = (char *)luaL_checkstring(L, 4);
4643 msg_string_int->val = luaL_checkint(L, 5);
4644 msg = msg_string_int;
4647 case EDJE_MESSAGE_STRING_FLOAT:
4649 Edje_Message_String_Float *msg_string_float =
4650 malloc(sizeof(Edje_Message_String_Float));
4651 msg_string_float->str = (char *)luaL_checkstring(L, 4);
4652 msg_string_float->val = luaL_checknumber(L, 5);
4653 msg = msg_string_float;
4656 case EDJE_MESSAGE_STRING_INT_SET:
4658 if (lua_type(L, 5) != LUA_TTABLE)
4660 size = lua_objlen(L, 5);
4661 Edje_Message_String_Int_Set *msg_string_int_set =
4662 malloc(sizeof(Edje_Message_String_Int_Set) +
4663 (size - 1) * sizeof(int));
4664 msg_string_int_set->str = (char *)luaL_checkstring(L, 4);
4665 msg_string_int_set->count = size;
4666 for (i = 0; i < size; i++)
4668 lua_rawgeti(L, 5, i + 1);
4669 msg_string_int_set->val[i] = luaL_checkint(L, -1);
4672 msg = msg_string_int_set;
4675 case EDJE_MESSAGE_STRING_FLOAT_SET:
4677 if (lua_type(L, 5) != LUA_TTABLE)
4679 size = lua_objlen(L, 5);
4680 Edje_Message_String_Float_Set *msg_string_float_set =
4681 malloc(sizeof(Edje_Message_String_Float_Set) +
4682 (size - 1) * sizeof(double));
4683 msg_string_float_set->str = (char *)luaL_checkstring(L, 4);
4684 msg_string_float_set->count = size;
4685 for (i = 0; i < size; i++)
4687 lua_rawgeti(L, 5, i + 1);
4688 msg_string_float_set->val[i] = luaL_checknumber(L, -1);
4691 msg = msg_string_float_set;
4700 edje_object_message_send(obj->eo, type, luaL_checkint(L, 3), msg);
4708 _edje_lua_group_signal_callback(void *data, Evas_Object * edj,
4709 const char *signal, const char *source)
4711 Edje_Lua_Ref *cb = data;
4712 lua_State *L = cb->L;
4713 _edje_lua_get_ref(L, cb); // signal callback function
4714 if (lua_isfunction(L, -1))
4718 _edje_lua_get_reg(L, edj);
4719 lua_pushstring(L, signal); // signal
4720 lua_pushstring(L, source); // source
4722 if ((err_code = lua_pcall(L, 3, 0, 0)))
4723 _edje_lua_error(L, err_code);
4728 _edje_lua_group_fn_signal_callback_add(lua_State *L)
4730 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mGroup);
4731 if (lua_type(L, 4) == LUA_TFUNCTION)
4733 Edje_Lua_Ref *ref = _edje_lua_new_ref(L, 4);
4734 obj->cb = eina_list_append(obj->cb, ref);
4735 edje_object_signal_callback_add(obj->eo,
4736 luaL_checkstring(L, 2),
4737 luaL_checkstring(L, 3),
4738 _edje_lua_group_signal_callback,
4739 ref); // freed in _edje_lua_group_fn_signal_callback_del
4745 _edje_lua_group_fn_signal_callback_del(lua_State *L)
4747 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mGroup);
4748 Edje_Lua_Ref *ref = edje_object_signal_callback_del(obj->eo,
4749 luaL_checkstring(L, 2),
4750 luaL_checkstring(L, 3),
4751 _edje_lua_group_signal_callback);
4752 obj->cb = eina_list_remove(obj->cb, ref);
4753 _edje_lua_free_ref(L, ref); // created in _edje_lua_group_fn_signal_callback_add
4758 _edje_lua_group_fn_freeze(lua_State *L)
4760 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mGroup);
4761 edje_object_freeze(obj->eo);
4766 _edje_lua_group_fn_thaw(lua_State *L)
4768 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata(L, 1, &mGroup);
4769 edje_object_thaw(obj->eo);
4773 const luaL_Reg lGroup_fn[] = {
4774 {"timer", _edje_lua_group_fn_timer},
4775 {"animator", _edje_lua_group_fn_animator},
4776 {"poller", _edje_lua_group_fn_poller},
4777 {"transform", _edje_lua_group_fn_transform},
4778 {"signal_emit", _edje_lua_group_fn_signal_emit},
4779 {"message_send", _edje_lua_group_fn_message_send},
4780 {"program_run", _edje_lua_group_fn_program_run},
4781 {"program_stop", _edje_lua_group_fn_program_stop},
4782 {"signal_callback_add", _edje_lua_group_fn_signal_callback_add},
4783 {"signal_callback_del", _edje_lua_group_fn_signal_callback_del},
4784 {"freeze", _edje_lua_group_fn_freeze},
4785 {"thaw", _edje_lua_group_fn_thaw},
4786 {NULL, NULL} // sentinel
4793 const luaL_Reg lScript_get[];
4795 const luaL_Reg lScript_set[];
4797 const luaL_Reg lScript_fn[];
4799 const Edje_Lua_Reg mScript = {
4806 const Edje_Lua_Reg *cScript[] = {
4815 * macro for adding an evas_object in the lua_script_only object
4817 #define _EDJE_LUA_SCRIPT_FN_ADD(DEF, CLASS, FUNC) \
4819 DEF (lua_State *L) \
4821 int set = lua_gettop (L) == 2; \
4822 Edje_Lua_Evas_Object *obj = _edje_lua_checkudata (L, 1, &mScript); \
4823 Edje_Lua_Evas_Object *tar = lua_newuserdata (L, sizeof (Edje_Lua_Evas_Object)); \
4824 _edje_lua_set_class (L, -1, CLASS); \
4825 tar->eo = FUNC (obj->ed->evas); \
4826 tar->ed = obj->ed; \
4829 evas_object_move (tar->eo, obj->ed->x, obj->ed->y); \
4830 _edje_lua_new_reg (L, -1, tar); /* freed in _edje_lua_object_del_cb */ \
4831 _edje_lua_new_reg (L, -1, tar->eo); /* freed in _edje_lua_object_del_cb */ \
4832 evas_object_smart_member_add (tar->eo, obj->eo); \
4833 evas_object_clip_set (tar->eo, obj->ed->clipper); \
4834 evas_object_event_callback_add (tar->eo, EVAS_CALLBACK_DEL, _edje_lua_object_del_cb, L); \
4838 lua_getfield (L, -1, "set"); \
4839 lua_pushvalue (L, -2); \
4840 lua_pushvalue (L, 2); \
4841 if ((err_code = lua_pcall (L, 2, 0, 0))) \
4842 _edje_lua_error (L, err_code); \
4847 _EDJE_LUA_SCRIPT_FN_ADD(_edje_lua_script_fn_rectangle,
4849 evas_object_rectangle_add)
4850 _EDJE_LUA_SCRIPT_FN_ADD(_edje_lua_script_fn_image,
4852 evas_object_image_add)
4853 _EDJE_LUA_SCRIPT_FN_ADD(_edje_lua_script_fn_table,
4855 evas_object_table_add)
4856 _EDJE_LUA_SCRIPT_FN_ADD(_edje_lua_script_fn_line,
4858 evas_object_line_add)
4859 _EDJE_LUA_SCRIPT_FN_ADD(_edje_lua_script_fn_polygon,
4861 evas_object_polygon_add)
4862 _EDJE_LUA_SCRIPT_FN_ADD(_edje_lua_script_fn_group, cGroup, edje_object_add)
4864 const luaL_Reg lScript_fn[] = {
4865 {"rectangle", _edje_lua_script_fn_rectangle},
4866 {"image", _edje_lua_script_fn_image},
4867 {"table", _edje_lua_script_fn_table},
4868 {"line", _edje_lua_script_fn_line},
4869 {"polygon", _edje_lua_script_fn_polygon},
4870 {"group", _edje_lua_script_fn_group},
4871 {NULL, NULL} // sentinel
4874 const luaL_Reg lScript_get[] = {
4875 {NULL, NULL} // sentinel
4878 const luaL_Reg lScript_set[] = {
4879 {NULL, NULL} // sentinel
4883 * creates and exports a lua_script_only object
4886 _edje_lua_script_fn_new(Edje * ed)
4888 lua_State *L = ed->L;
4889 Edje_Lua_Evas_Object *tar = lua_newuserdata(L, sizeof(Edje_Lua_Evas_Object));
4890 _edje_lua_set_class(L, -1, cScript);
4895 _edje_lua_new_reg(L, -1, tar); // freed in _edje_lua_object_del_cb
4896 _edje_lua_new_reg(L, -1, ed); // freed in edje_load.c::_edje_file_del
4897 _edje_lua_new_reg(L, -1, ed->obj); // freed in _edje_lua_object_del_cb
4898 evas_object_event_callback_add(tar->eo, EVAS_CALLBACK_DEL,
4899 _edje_lua_object_del_cb, L);
4903 * creates and exports an Edje group with associated Lua scripts in the parts and programs sections
4906 _edje_lua_group_fn_new(Edje * ed)
4908 lua_State *L = ed->L;
4909 Edje_Lua_Evas_Object *tar = lua_newuserdata(L, sizeof(Edje_Lua_Evas_Object));
4910 _edje_lua_set_class(L, -1, cGroup);
4915 _edje_lua_new_reg(L, -1, tar); // freed in _edje_lua_object_del_cb
4916 _edje_lua_new_reg(L, -1, ed); // freed in edje_load.c::_edje_file_del
4917 _edje_lua_new_reg(L, -1, ed->obj); // freed in _edje_lua_object_del_cb
4918 evas_object_event_callback_add(tar->eo, EVAS_CALLBACK_DEL,
4919 _edje_lua_object_del_cb, L);
4923 * this function loads all the Lua bindings into the global Lua state
4926 _edje_lua_open(lua_State *L)
4931 _edje_lua_new_class(L, cTimer);
4932 _edje_lua_new_class(L, cAnimator);
4933 _edje_lua_new_class(L, cPoller);
4934 _edje_lua_new_class(L, cTransform);
4935 _edje_lua_new_class(L, cRectangle);
4936 _edje_lua_new_class(L, cImage);
4937 _edje_lua_new_class(L, cTable);
4938 _edje_lua_new_class(L, cLine);
4939 _edje_lua_new_class(L, cPolygon);
4940 _edje_lua_new_class(L, cGroup);
4941 _edje_lua_new_class(L, cDescription);
4942 _edje_lua_new_class(L, cPart);
4943 _edje_lua_new_class(L, cScript);
4948 _edje_lua_new_const(L, "MESSAGE_NONE", EDJE_MESSAGE_NONE);
4949 _edje_lua_new_const(L, "MESSAGE_SIGNAL", EDJE_MESSAGE_SIGNAL);
4950 _edje_lua_new_const(L, "MESSAGE_STRING", EDJE_MESSAGE_STRING);
4951 _edje_lua_new_const(L, "MESSAGE_INT", EDJE_MESSAGE_INT);
4952 _edje_lua_new_const(L, "MESSAGE_FLOAT", EDJE_MESSAGE_FLOAT);
4953 _edje_lua_new_const(L, "MESSAGE_STRING_SET", EDJE_MESSAGE_STRING_SET);
4954 _edje_lua_new_const(L, "MESSAGE_INT_SET", EDJE_MESSAGE_INT_SET);
4955 _edje_lua_new_const(L, "MESSAGE_FLOAT_SET", EDJE_MESSAGE_FLOAT_SET);
4956 _edje_lua_new_const(L, "MESSAGE_STRING_INT", EDJE_MESSAGE_STRING_INT);
4957 _edje_lua_new_const(L, "MESSAGE_STRING_FLOAT", EDJE_MESSAGE_STRING_FLOAT);
4958 _edje_lua_new_const(L, "MESSAGE_STRING_INT_SET", EDJE_MESSAGE_STRING_INT_SET);
4959 _edje_lua_new_const(L, "MESSAGE_STRING_FLOAT_SET", EDJE_MESSAGE_STRING_FLOAT_SET);
4961 _edje_lua_new_const(L, "PART_TYPE_NONE", EDJE_PART_TYPE_NONE);
4962 _edje_lua_new_const(L, "PART_TYPE_RECTANGLE", EDJE_PART_TYPE_RECTANGLE);
4963 _edje_lua_new_const(L, "PART_TYPE_TEXT", EDJE_PART_TYPE_TEXT);
4964 _edje_lua_new_const(L, "PART_TYPE_IMAGE", EDJE_PART_TYPE_IMAGE);
4965 _edje_lua_new_const(L, "PART_TYPE_SWALLOW", EDJE_PART_TYPE_SWALLOW);
4966 _edje_lua_new_const(L, "PART_TYPE_TEXTBLOCK", EDJE_PART_TYPE_TEXTBLOCK);
4967 _edje_lua_new_const(L, "PART_TYPE_GRADIENT", EDJE_PART_TYPE_GRADIENT);
4968 _edje_lua_new_const(L, "PART_TYPE_GROUP", EDJE_PART_TYPE_GROUP);
4969 _edje_lua_new_const(L, "PART_TYPE_BOX", EDJE_PART_TYPE_BOX);
4971 _edje_lua_new_const(L, "TEXT_EFFECT_NONE", EDJE_TEXT_EFFECT_NONE);
4972 _edje_lua_new_const(L, "TEXT_EFFECT_PLAIN", EDJE_TEXT_EFFECT_PLAIN);
4973 _edje_lua_new_const(L, "TEXT_EFFECT_OUTLINE", EDJE_TEXT_EFFECT_OUTLINE);
4974 _edje_lua_new_const(L, "TEXT_EFFECT_OTLINE", EDJE_TEXT_EFFECT_SOFT_OUTLINE);
4975 _edje_lua_new_const(L, "TEXT_EFFECT_SHADOW", EDJE_TEXT_EFFECT_SHADOW);
4976 _edje_lua_new_const(L, "TEXT_EFFECT_SOFT_SHADOW", EDJE_TEXT_EFFECT_SOFT_SHADOW);
4977 _edje_lua_new_const(L, "TEXT_EFFECT_OUTLINE_SHADOW", EDJE_TEXT_EFFECT_OUTLINE_SHADOW);
4978 _edje_lua_new_const(L, "TEXT_EFFECT_OUTLINE_SOFT_SHADOW", EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW);
4979 _edje_lua_new_const(L, "TEXT_EFFECT_FAR_SHADOW", EDJE_TEXT_EFFECT_FAR_SHADOW);
4980 _edje_lua_new_const(L, "TEXT_EFFECT_FAR_SOFT_SHADOW", EDJE_TEXT_EFFECT_FAR_SOFT_SHADOW);
4981 _edje_lua_new_const(L, "TEXT_EFFECT_GLOW", EDJE_TEXT_EFFECT_GLOW);
4983 _edje_lua_new_const(L, "RENDER_BLEND", EVAS_RENDER_BLEND);
4984 _edje_lua_new_const(L, "RENDER_BLEND_REL", EVAS_RENDER_BLEND_REL);
4985 _edje_lua_new_const(L, "RENDER_COPY", EVAS_RENDER_COPY);
4986 _edje_lua_new_const(L, "RENDER_COPY_REL", EVAS_RENDER_COPY_REL);
4987 _edje_lua_new_const(L, "RENDER_ADD", EVAS_RENDER_ADD);
4988 _edje_lua_new_const(L, "RENDER_ADD_REL", EVAS_RENDER_ADD_REL);
4989 _edje_lua_new_const(L, "RENDER_SUB", EVAS_RENDER_SUB);
4990 _edje_lua_new_const(L, "RENDER_SUB_REL", EVAS_RENDER_SUB_REL);
4991 _edje_lua_new_const(L, "RENDER_TINT", EVAS_RENDER_TINT);
4992 _edje_lua_new_const(L, "RENDER_TINT_REL", EVAS_RENDER_TINT_REL);
4993 _edje_lua_new_const(L, "RENDER_MASK", EVAS_RENDER_MASK);
4994 _edje_lua_new_const(L, "RENDER_MUL", EVAS_RENDER_MUL);
4996 _edje_lua_new_const(L, "BORDER_FILL_NONE", EVAS_BORDER_FILL_NONE);
4997 _edje_lua_new_const(L, "BORDER_FILL_DEFAULT", EVAS_BORDER_FILL_DEFAULT);
4998 _edje_lua_new_const(L, "BORDER_FILL_SOLID", EVAS_BORDER_FILL_SOLID);
5000 _edje_lua_new_const(L, "POINTER_MODE_AUTOGRAB", EVAS_OBJECT_POINTER_MODE_AUTOGRAB);
5001 _edje_lua_new_const(L, "POINTER_MODE_NOGRAB", EVAS_OBJECT_POINTER_MODE_NOGRAB);
5003 _edje_lua_new_const(L, "ASPECT_CONTROL_NEITHER", EVAS_ASPECT_CONTROL_NEITHER);
5004 _edje_lua_new_const(L, "ASPECT_CONTROL_HORIZONTAL", EVAS_ASPECT_CONTROL_HORIZONTAL);
5005 _edje_lua_new_const(L, "ASPECT_CONTROL_VERTICAL", EVAS_ASPECT_CONTROL_VERTICAL);
5006 _edje_lua_new_const(L, "ASPECT_CONTROL_BOTH", EVAS_ASPECT_CONTROL_BOTH);
5008 _edje_lua_new_const(L, "CALLBACK_RENEW", ECORE_CALLBACK_RENEW);
5009 _edje_lua_new_const(L, "CALLBACK_CANCEL", ECORE_CALLBACK_CANCEL);
5014 * created by edje_init ()
5015 * closed by edje_shutdown ()
5016 * any other private Lua state inherits from this global state
5018 static lua_State *Ledje = NULL;
5021 _edje_lua_state_get ()
5027 * custom memory allocation function
5028 * raises an error, if memory usage is above the given maximum
5031 _edje_lua_alloc(void *ud, void *ptr, size_t osize, size_t nsize)
5033 Edje_Lua_Alloc *ela = ud;
5036 ela->cur += nsize - osize;
5037 if (ela->cur > ela->max)
5039 ERR("Edje Lua memory limit of %zu bytes reached (%zu allocated)",
5040 ela->max, ela->cur);
5045 free(ptr); /* ANSI requires that free(NULL) has no effect */
5049 /* ANSI requires that realloc(NULL, size) == malloc(size) */
5050 ptr2 = realloc(ptr, nsize);
5051 if (ptr2) return ptr2;
5052 ERR("Edje Lua cannot re-allocate %zu bytes", nsize);
5059 if (Ledje != NULL) return;
5061 * create main Lua state with the custom memory allocation function
5063 static Edje_Lua_Alloc ela = { 1e7, 0 }; // TODO make the memory limit configurable?
5064 Ledje = lua_newstate(_edje_lua_alloc, &ela);
5067 ERR("Lua error: Lua state could not be initialized");
5071 lua_atpanic(Ledje, _edje_lua_custom_panic);
5074 * configure Lua garbage collector
5075 * TODO optimize garbage collector for typical edje use or make it configurable
5077 lua_gc(Ledje, LUA_GCSETPAUSE, 200);
5078 lua_gc(Ledje, LUA_GCSETSTEPMUL, 200);
5082 * no access to io, os and package routines
5083 * no loading and execution of files
5084 * no loading and execution of strings
5085 * no access to the OS environment
5087 luaopen_base(Ledje);
5088 luaopen_table(Ledje);
5089 luaopen_string(Ledje);
5090 luaopen_math(Ledje);
5095 * this is just for debug purposes
5096 * remove it in the final version
5099 lua_setglobal(Ledje, "load");
5101 lua_setglobal(Ledje, "loadfile");
5103 lua_setglobal(Ledje, "loadstring");
5105 lua_setglobal(Ledje, "dofile");
5107 lua_setglobal(Ledje, "dostring");
5109 lua_getglobal(Ledje, "os");
5111 lua_setfield(Ledje, -2, "exit");
5113 lua_setfield(Ledje, -2, "setlocale");
5115 lua_setfield(Ledje, -2, "getenv");
5117 lua_setfield(Ledje, -2, "remove");
5119 lua_setfield(Ledje, -2, "tmpname");
5121 lua_setfield(Ledje, -2, "rename");
5123 lua_setfield(Ledje, -2, "execute");
5127 * we need a weak value registry
5128 * so that deleted and unused objects can be garbage collected
5130 lua_createtable(Ledje, 1, 0);
5131 //lua_pushstring(Ledje, "v");
5132 lua_pushstring(Ledje, "");
5133 lua_setfield(Ledje, -2, "__mode");
5134 lua_setmetatable(Ledje, LUA_REGISTRYINDEX);
5137 * load Lua Evas/Edje bindings
5139 _edje_lua_open(Ledje);
5143 _edje_lua_shutdown()
5145 if (Ledje == NULL) return;