From: David Walter Seikel Date: Sat, 12 Nov 2011 04:11:25 +0000 (+0000) Subject: More boiler, less plate. X-Git-Tag: submit/devel/efl/20131022.203902~7561 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3aba54fd04c540d9d31491aaa69c63b48a47db38;p=platform%2Fupstream%2Fefl.git More boiler, less plate. SVN revision: 65086 --- diff --git a/legacy/edje/src/lib/edje_lua2.c b/legacy/edje/src/lib/edje_lua2.c index 2ee9a34..4108678 100644 --- a/legacy/edje/src/lib/edje_lua2.c +++ b/legacy/edje/src/lib/edje_lua2.c @@ -395,6 +395,32 @@ static const char *_elua_key = "key"; static const char *_elua_objs = "objs"; //--------------------------------------------------------------------------// + + +static void +_elua_add_functions(lua_State *L, const char *api, const luaL_Reg *funcs, const char *meta, const char *parent, const char *base) +{ + luaL_register(L, api, funcs); + luaL_newmetatable(L, meta); + luaL_register(L, 0, _elua_edje_gc_funcs); + lua_pushliteral(L, "__index"); + lua_pushvalue(L, -3); + lua_rawset(L, -3); + + if (base && parent) + { + // Inherit from base + lua_getglobal(L, base); + luaL_newmetatable(L, parent); + lua_pushliteral(L, "__index"); + lua_pushvalue(L, -3); + lua_rawset(L, -3); + lua_getglobal(L, api); + luaL_getmetatable(L, parent); + lua_setmetatable(L, -2); + } +} + static void * _elua_alloc(void *ud, void *ptr, size_t osize, size_t nsize) { @@ -485,14 +511,7 @@ _elua_init(void) luaL_newmetatable(L, _elua_edje_meta); luaL_register(L, 0, _elua_edje_gc_funcs); - luaL_register(L, _elua_evas_api, _elua_evas_funcs); - luaL_newmetatable(L, _elua_evas_meta); - luaL_register(L, 0, _elua_edje_gc_funcs); - - lua_pushliteral(L, "__index"); - lua_pushvalue(L, -3); - lua_rawset(L, -3); - lua_pop(L, 2); + _elua_add_functions(L, _elua_evas_api, _elua_evas_funcs, _elua_evas_meta, NULL, NULL); // weak table for our objects lua_pushlightuserdata(L, &_elua_objs); @@ -2510,54 +2529,46 @@ _elua_evas_obj_free(void *obj) elo->evas_obj = NULL; } -static int -_elua_rect(lua_State *L) -{ - Edje *ed = (Edje *)_elua_table_ptr_get(L, _elua_key); - Edje_Lua_Evas_Object *elo; +#define _ELUA_PLANT_EVAS_OBJECT(type, meta, free) \ + Edje *ed = (Edje *)_elua_table_ptr_get(L, _elua_key); \ + type *elo; \ + elo = (type *)_elua_obj_new(L, ed, sizeof(type), meta); \ + elo->obj.free_func = free; - elo = (Edje_Lua_Evas_Object *)_elua_obj_new(L, ed, sizeof(Edje_Lua_Evas_Object), _elua_evas_meta); - elo->obj.free_func = _elua_evas_obj_free; - elo->evas_obj = evas_object_rectangle_add(evas_object_evas_get(ed->obj)); +static void +_elua_polish_evas_object(Edje *ed, Edje_Lua_Evas_Object *elo) +{ evas_object_smart_member_add(elo->evas_obj, ed->obj); evas_object_clip_set(elo->evas_obj, ed->base.clipper); evas_object_move(elo->evas_obj, ed->x, ed->y); evas_object_resize(elo->evas_obj, 0, 0); evas_object_data_set(elo->evas_obj, ELO, elo); +} + +static int +_elua_rect(lua_State *L) +{ + _ELUA_PLANT_EVAS_OBJECT(Edje_Lua_Evas_Object, _elua_evas_meta, _elua_evas_obj_free) + elo->evas_obj = evas_object_rectangle_add(evas_object_evas_get(ed->obj)); + _elua_polish_evas_object(ed, elo); return 1; } static int _elua_image(lua_State *L) { - Edje *ed = (Edje *)_elua_table_ptr_get(L, _elua_key); - Edje_Lua_Evas_Object *elo; - - elo = (Edje_Lua_Evas_Object *)_elua_obj_new(L, ed, sizeof(Edje_Lua_Evas_Object), _elua_evas_image_meta); - elo->obj.free_func = _elua_evas_obj_free; + _ELUA_PLANT_EVAS_OBJECT(Edje_Lua_Evas_Object, _elua_evas_image_meta, _elua_evas_obj_free) elo->evas_obj = evas_object_image_filled_add(evas_object_evas_get(ed->obj)); - evas_object_smart_member_add(elo->evas_obj, ed->obj); - evas_object_clip_set(elo->evas_obj, ed->base.clipper); - evas_object_move(elo->evas_obj, ed->x, ed->y); - evas_object_resize(elo->evas_obj, 0, 0); - evas_object_data_set(elo->evas_obj, ELO, elo); + _elua_polish_evas_object(ed, elo); return 1; } static int _elua_text(lua_State *L) { - Edje *ed = (Edje *)_elua_table_ptr_get(L, _elua_key); - Edje_Lua_Evas_Object *elo; - - elo = (Edje_Lua_Evas_Object *)_elua_obj_new(L, ed, sizeof(Edje_Lua_Evas_Object), _elua_evas_text_meta); - elo->obj.free_func = _elua_evas_obj_free; + _ELUA_PLANT_EVAS_OBJECT(Edje_Lua_Evas_Object, _elua_evas_text_meta, _elua_evas_obj_free) elo->evas_obj = evas_object_text_add(evas_object_evas_get(ed->obj)); - evas_object_smart_member_add(elo->evas_obj, ed->obj); - evas_object_clip_set(elo->evas_obj, ed->base.clipper); - evas_object_move(elo->evas_obj, ed->x, ed->y); - evas_object_resize(elo->evas_obj, 0, 0); - evas_object_data_set(elo->evas_obj, ELO, elo); + _elua_polish_evas_object(ed, elo); return 1; } @@ -2565,17 +2576,9 @@ _elua_text(lua_State *L) static int _elua_textblock(lua_State *L) { - Edje *ed = (Edje *)_elua_table_ptr_get(L, _elua_key); - Edje_Lua_Evas_Object *elo; - - elo = (Edje_Lua_Evas_Object *)_elua_obj_new(L, ed, sizeof(Edje_Lua_Evas_Object), _elua_evas_text_metablock); - elo->obj.free_func = _elua_evas_obj_free; + _ELUA_PLANT_EVAS_OBJECT(Edje_Lua_Evas_Object, _elua_evas_textblock_meta, _elua_evas_obj_free) elo->evas_obj = evas_object_textblock_add(evas_object_evas_get(ed->obj)); - evas_object_smart_member_add(elo->evas_obj, ed->obj); - evas_object_clip_set(elo->evas_obj, ed->base.clipper); - evas_object_move(elo->evas_obj, ed->x, ed->y); - evas_object_resize(elo->evas_obj, 0, 0); - evas_object_data_set(elo->evas_obj, ELO, elo); + _elua_polish_evas_object(ed, elo); return 1; } */ @@ -2583,51 +2586,27 @@ _elua_textblock(lua_State *L) static int _elua_edje(lua_State *L) { - Edje *ed = (Edje *)_elua_table_ptr_get(L, _elua_key); - Edje_Lua_Evas_Object *elo; - - elo = (Edje_Lua_Evas_Object *)_elua_obj_new(L, ed, sizeof(Edje_Lua_Evas_Object), _elua_evas_edje_meta); - elo->obj.free_func = _elua_evas_obj_free; + _ELUA_PLANT_EVAS_OBJECT(Edje_Lua_Evas_Object, _elua_evas_edje_meta, _elua_evas_obj_free) elo->evas_obj = edje_object_add(evas_object_evas_get(ed->obj)); - evas_object_smart_member_add(elo->evas_obj, ed->obj); - evas_object_clip_set(elo->evas_obj, ed->base.clipper); - evas_object_move(elo->evas_obj, ed->x, ed->y); - evas_object_resize(elo->evas_obj, 0, 0); - evas_object_data_set(elo->evas_obj, ELO, elo); + _elua_polish_evas_object(ed, elo); return 1; } static int _elua_line(lua_State *L) { - Edje *ed = (Edje *)_elua_table_ptr_get(L, _elua_key); - Edje_Lua_Evas_Object *elo; - - elo = (Edje_Lua_Evas_Object *)_elua_obj_new(L, ed, sizeof(Edje_Lua_Evas_Object), _elua_evas_line_meta); - elo->obj.free_func = _elua_evas_obj_free; + _ELUA_PLANT_EVAS_OBJECT(Edje_Lua_Evas_Object, _elua_evas_line_meta, _elua_evas_obj_free) elo->evas_obj = evas_object_line_add(evas_object_evas_get(ed->obj)); - evas_object_smart_member_add(elo->evas_obj, ed->obj); - evas_object_clip_set(elo->evas_obj, ed->base.clipper); - evas_object_move(elo->evas_obj, ed->x, ed->y); - evas_object_resize(elo->evas_obj, 0, 0); - evas_object_data_set(elo->evas_obj, ELO, elo); + _elua_polish_evas_object(ed, elo); return 1; } static int _elua_polygon(lua_State *L) { - Edje *ed = (Edje *)_elua_table_ptr_get(L, _elua_key); - Edje_Lua_Evas_Object *elo; - - elo = (Edje_Lua_Evas_Object *)_elua_obj_new(L, ed, sizeof(Edje_Lua_Evas_Object), _elua_evas_polygon_meta); - elo->obj.free_func = _elua_evas_obj_free; + _ELUA_PLANT_EVAS_OBJECT(Edje_Lua_Evas_Object, _elua_evas_polygon_meta, _elua_evas_obj_free) elo->evas_obj = evas_object_polygon_add(evas_object_evas_get(ed->obj)); - evas_object_smart_member_add(elo->evas_obj, ed->obj); - evas_object_clip_set(elo->evas_obj, ed->base.clipper); - evas_object_move(elo->evas_obj, ed->x, ed->y); - evas_object_resize(elo->evas_obj, 0, 0); - evas_object_data_set(elo->evas_obj, ELO, elo); + _elua_polish_evas_object(ed, elo); return 1; } @@ -2691,106 +2670,19 @@ _edje_lua2_script_init(Edje *ed) lua_call(L, 1, 0); } - luaL_register(L, _elua_edje_api, _elua_edje_funcs); luaL_newmetatable(L, _elua_edje_meta); luaL_register(L, 0, _elua_edje_gc_funcs); - luaL_register(L, _elua_evas_api, _elua_evas_funcs); - luaL_newmetatable(L, _elua_evas_meta); - luaL_register(L, 0, _elua_edje_gc_funcs); - lua_pushliteral(L, "__index"); - lua_pushvalue(L, -3); - lua_rawset(L, -3); - lua_pop(L, 2); - luaL_register(L, _elua_evas_edje_api, _elua_evas_edje_funcs); - luaL_newmetatable(L, _elua_evas_edje_meta); - luaL_register(L, 0, _elua_edje_gc_funcs); - lua_pushliteral(L, "__index"); - lua_pushvalue(L, -3); - lua_rawset(L, -3); - // Inherit from _elua_evas_api - lua_getglobal(L, _elua_evas_api); - luaL_newmetatable(L, _elua_evas_edje_parent); - lua_pushliteral(L, "__index"); - lua_pushvalue(L, -3); - lua_rawset(L, -3); - lua_getglobal(L, _elua_evas_edje_api); - luaL_getmetatable(L, _elua_evas_edje_parent); - lua_setmetatable(L, -2); - - luaL_register(L, _elua_evas_image_api, _elua_evas_image_funcs); - luaL_newmetatable(L, _elua_evas_image_meta); - luaL_register(L, 0, _elua_edje_gc_funcs); - lua_pushliteral(L, "__index"); - lua_pushvalue(L, -3); - lua_rawset(L, -3); - // Inherit from _elua_evas_api - lua_getglobal(L, _elua_evas_api); - luaL_newmetatable(L, _elua_evas_image_parent); - lua_pushliteral(L, "__index"); - lua_pushvalue(L, -3); - lua_rawset(L, -3); - lua_getglobal(L, _elua_evas_image_api); - luaL_getmetatable(L, _elua_evas_image_parent); - lua_setmetatable(L, -2); - - luaL_register(L, _elua_evas_line_api, _elua_evas_line_funcs); - luaL_newmetatable(L, _elua_evas_line_meta); - luaL_register(L, 0, _elua_edje_gc_funcs); - lua_pushliteral(L, "__index"); - lua_pushvalue(L, -3); - lua_rawset(L, -3); - // Inherit from _elua_evas_api - lua_getglobal(L, _elua_evas_api); - luaL_newmetatable(L, _elua_evas_line_parent); - lua_pushliteral(L, "__index"); - lua_pushvalue(L, -3); - lua_rawset(L, -3); - lua_getglobal(L, _elua_evas_line_api); - luaL_getmetatable(L, _elua_evas_line_parent); - lua_setmetatable(L, -2); - - luaL_register(L, _elua_evas_map_api, _elua_evas_map_funcs); - luaL_newmetatable(L, _elua_evas_map_meta); - luaL_register(L, 0, _elua_edje_gc_funcs); - lua_pushliteral(L, "__index"); - lua_pushvalue(L, -3); - lua_rawset(L, -3); - - luaL_register(L, _elua_evas_polygon_api, _elua_evas_polygon_funcs); - luaL_newmetatable(L, _elua_evas_polygon_meta); - luaL_register(L, 0, _elua_edje_gc_funcs); - lua_pushliteral(L, "__index"); - lua_pushvalue(L, -3); - lua_rawset(L, -3); - // Inherit from _elua_evas_api - lua_getglobal(L, _elua_evas_api); - luaL_newmetatable(L, _elua_evas_polygon_parent); - lua_pushliteral(L, "__index"); - lua_pushvalue(L, -3); - lua_rawset(L, -3); - lua_getglobal(L, _elua_evas_polygon_api); - luaL_getmetatable(L, _elua_evas_polygon_parent); - lua_setmetatable(L, -2); - - luaL_register(L, _elua_evas_text_api, _elua_evas_text_funcs); - luaL_newmetatable(L, _elua_evas_text_meta); - luaL_register(L, 0, _elua_edje_gc_funcs); - lua_pushliteral(L, "__index"); - lua_pushvalue(L, -3); - lua_rawset(L, -3); - // Inherit from _elua_evas_api - lua_getglobal(L, _elua_evas_api); - luaL_newmetatable(L, _elua_evas_text_parent); - lua_pushliteral(L, "__index"); - lua_pushvalue(L, -3); - lua_rawset(L, -3); - lua_getglobal(L, _elua_evas_text_api); - luaL_getmetatable(L, _elua_evas_text_parent); - lua_setmetatable(L, -2); + _elua_add_functions(L, _elua_evas_api, _elua_evas_funcs, _elua_evas_meta, NULL, NULL); + _elua_add_functions(L, _elua_evas_edje_api, _elua_evas_edje_funcs, _elua_evas_edje_meta, _elua_evas_edje_parent, _elua_evas_api); + _elua_add_functions(L, _elua_evas_image_api, _elua_evas_image_funcs, _elua_evas_image_meta, _elua_evas_image_parent, _elua_evas_api); + _elua_add_functions(L, _elua_evas_line_api, _elua_evas_line_funcs, _elua_evas_line_meta, _elua_evas_line_parent, _elua_evas_api); + _elua_add_functions(L, _elua_evas_map_api, _elua_evas_map_funcs, _elua_evas_map_meta, NULL, NULL); + _elua_add_functions(L, _elua_evas_polygon_api, _elua_evas_polygon_funcs, _elua_evas_polygon_meta, _elua_evas_polygon_parent, _elua_evas_api); + _elua_add_functions(L, _elua_evas_text_api, _elua_evas_text_funcs, _elua_evas_text_meta, _elua_evas_text_parent, _elua_evas_api); // weak table for our objects lua_pushlightuserdata(L, &_elua_objs);