forked from enlightenment/efl
Half of evas map API Added to lua.
The rest is commented, so you can see what the API will look like. Needs more testing, and the other half. SVN revision: 64822
This commit is contained in:
parent
c038bc4fa1
commit
2a0069118b
|
@ -201,3 +201,7 @@
|
|||
Including some handling of size changes.
|
||||
* White space fixes, one of the editors I use cleans those up automatically. shrugs
|
||||
|
||||
2011-11-06 David Seikel (onefang)
|
||||
|
||||
* Lua: Added half of the evas map API.
|
||||
|
||||
|
|
|
@ -141,6 +141,42 @@ collections {
|
|||
print(D.text:text());
|
||||
D.text:show();
|
||||
|
||||
D.map = edje.map(4);
|
||||
|
||||
D.map:coord(1, 100, 200, 300);
|
||||
D.coord = D.map:coord(1);
|
||||
|
||||
D.map:populate(100, 200, 23, 45, 0);
|
||||
D.map:populate(D.rect2);
|
||||
D.map:populate(D.rect2, 0);
|
||||
|
||||
D.rect2:map(map);
|
||||
D.rect2:map_enable(true);
|
||||
if (D.rect2:map_enable()) then
|
||||
print("lua::map enabled");
|
||||
end
|
||||
|
||||
D.map:rotate(45.0, 10, 20);
|
||||
--// D.map:zoom(10.0, 20.0, 100, 200);
|
||||
|
||||
--// D.map:rotate3d(90.0, 180.0, 45.0, 100, 200, 300);
|
||||
--// D.map:perspective(100, 200, 300, 400);
|
||||
|
||||
--// D.map:color(1, r, g, b, a); // set just one point to this colour.
|
||||
--// D.map:color(r, g, b, a); // set all points to this colour.
|
||||
|
||||
--// D.map:lighting(100, 200, 300, r, g, b, r, g, b);
|
||||
|
||||
--// D.map:uv(1, 123.0, 456.0);
|
||||
|
||||
--// D.rect2:map_source(D.rect);
|
||||
|
||||
--// D.map:clockwise();
|
||||
--// D.map:smooth();
|
||||
--// D.map:alpha();
|
||||
--// D.map:dup();
|
||||
--// D.map:size(); --// perhaps overide the # operator? For now it's only gonna return 4 anyway.
|
||||
|
||||
--// example of deleting something
|
||||
--// D.tim:del();
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@ typedef struct _Edje_Lua_Timer Edje_Lua_Timer;
|
|||
typedef struct _Edje_Lua_Animator Edje_Lua_Animator;
|
||||
typedef struct _Edje_Lua_Transition Edje_Lua_Transition;
|
||||
typedef struct _Edje_Lua_Evas_Object Edje_Lua_Evas_Object;
|
||||
typedef struct _Edje_Lua_Map Edje_Lua_Map;
|
||||
|
||||
//--------------------------------------------------------------------------//
|
||||
struct _Edje_Lua_Alloc
|
||||
|
@ -62,6 +63,12 @@ struct _Edje_Lua_Evas_Object
|
|||
int x, y;
|
||||
};
|
||||
|
||||
struct _Edje_Lua_Map
|
||||
{
|
||||
Edje_Lua_Obj obj;
|
||||
Evas_Map *map;
|
||||
};
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------//
|
||||
static int _elua_obj_gc(lua_State *L);
|
||||
|
@ -117,6 +124,10 @@ static int _elua_text(lua_State *L);
|
|||
static int _elua_edje(lua_State *L);
|
||||
static int _elua_line(lua_State *L);
|
||||
static int _elua_polygon(lua_State *L);
|
||||
static int _elua_map(lua_State *L);
|
||||
|
||||
static int _elua_obj_map(lua_State *L);
|
||||
static int _elua_obj_map_enable(lua_State *L);
|
||||
|
||||
static int _elua_text_text(lua_State *L);
|
||||
static int _elua_text_font(lua_State *L);
|
||||
|
@ -129,6 +140,10 @@ static int _elua_line_xy(lua_State *L);
|
|||
static int _elua_polygon_point(lua_State *L);
|
||||
static int _elua_polygon_clear(lua_State *L);
|
||||
|
||||
static int _elua_map_coord(lua_State *L);
|
||||
static int _elua_map_populate(lua_State *L);
|
||||
static int _elua_map_rotate(lua_State *L);
|
||||
|
||||
|
||||
#define ELO "|-ELO"
|
||||
|
||||
|
@ -205,6 +220,7 @@ static const struct luaL_reg _elua_edje_api [] =
|
|||
{"edje", _elua_edje},
|
||||
{"line", _elua_line},
|
||||
{"polygon", _elua_polygon},
|
||||
{"map", _elua_map},
|
||||
// FIXME: add the new sound stuff.
|
||||
|
||||
{NULL, NULL} // end
|
||||
|
@ -272,7 +288,30 @@ static const struct luaL_reg _elua_edje_evas_obj [] =
|
|||
// FIXME: later - set render op, anti-alias, pointer mode (autograb, nograb)
|
||||
// FIXME: later -
|
||||
|
||||
// FIXME: map api here
|
||||
// map api here
|
||||
{"map", _elua_obj_map},
|
||||
{"map_enable", _elua_obj_map_enable},
|
||||
// {"map_source", _elua_obj_map_source},
|
||||
|
||||
{NULL, NULL} // end
|
||||
};
|
||||
|
||||
static const struct luaL_reg _elua_evas_map_obj [] =
|
||||
{
|
||||
{"coord", _elua_map_coord},
|
||||
{"populate", _elua_map_populate},
|
||||
{"rotate", _elua_map_rotate},
|
||||
// {"rotate3d", _elua_map_rotate3d},
|
||||
// {"perspective", _elua_map_perspective},
|
||||
// {"zoom", _elua_map_zoom},
|
||||
// {"lighting", _elua_map_lighting},
|
||||
// {"color", _elua_map_color},
|
||||
// {"uv", _elua_map_uv},
|
||||
// {"clockwise", _elua_map_clockwise},
|
||||
// {"smooth", _elua_map_smooth},
|
||||
// {"alpha", _elua_map_alpha},
|
||||
// {"dup", _elua_map_dup},
|
||||
// {"size", _elua_map_size},
|
||||
|
||||
{NULL, NULL} // end
|
||||
};
|
||||
|
@ -476,7 +515,7 @@ _elua_ref_get(lua_State *L, void *key)
|
|||
}
|
||||
|
||||
static Edje_Lua_Obj *
|
||||
_elua_obj_new(lua_State *L, Edje *ed, int size)
|
||||
_elua_obj_new_common(lua_State *L, Edje *ed, int size, const char *metatable)
|
||||
{
|
||||
Edje_Lua_Obj *obj;
|
||||
|
||||
|
@ -484,7 +523,7 @@ _elua_obj_new(lua_State *L, Edje *ed, int size)
|
|||
memset(obj, 0, size);
|
||||
ed->lua_objs = eina_inlist_append(ed->lua_objs, EINA_INLIST_GET(obj));
|
||||
|
||||
luaL_getmetatable(L, "edje_evas_obj");
|
||||
luaL_getmetatable(L, metatable);
|
||||
lua_setmetatable(L, -2);
|
||||
obj->ed = ed;
|
||||
|
||||
|
@ -492,6 +531,18 @@ _elua_obj_new(lua_State *L, Edje *ed, int size)
|
|||
return obj;
|
||||
}
|
||||
|
||||
static Edje_Lua_Obj *
|
||||
_elua_obj_new(lua_State *L, Edje *ed, int size)
|
||||
{
|
||||
_elua_obj_new_common(L, ed, size, "edje_evas_obj");
|
||||
}
|
||||
|
||||
static Edje_Lua_Obj *
|
||||
_elua_map_new(lua_State *L, Edje *ed, int size)
|
||||
{
|
||||
_elua_obj_new_common(L, ed, size, "evas_map_obj");
|
||||
}
|
||||
|
||||
static void
|
||||
_elua_obj_free(lua_State *L __UNUSED__, Edje_Lua_Obj *obj)
|
||||
{
|
||||
|
@ -1972,6 +2023,40 @@ _elua_precise(lua_State *L)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
_elua_obj_map(lua_State *L)
|
||||
{
|
||||
Edje_Lua_Obj *obj = (Edje_Lua_Obj *)lua_touserdata(L, 1);
|
||||
Edje_Lua_Evas_Object *elo = (Edje_Lua_Evas_Object *)obj;
|
||||
Edje_Lua_Obj *obj2 = (Edje_Lua_Obj *)lua_touserdata(L, 2);
|
||||
Edje_Lua_Map *elm = (Edje_Lua_Map *)obj;
|
||||
if (!obj) return 0;
|
||||
if (!obj->is_evas_obj) return 0;
|
||||
if (!obj2) return 0;
|
||||
|
||||
evas_object_map_set(elo->evas_obj, elm->map);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
_elua_obj_map_enable(lua_State *L)
|
||||
{
|
||||
Edje_Lua_Obj *obj = (Edje_Lua_Obj *)lua_touserdata(L, 1);
|
||||
Edje_Lua_Evas_Object *elo = (Edje_Lua_Evas_Object *)obj;
|
||||
int n;
|
||||
if (!obj) return 0;
|
||||
if (!obj->is_evas_obj) return 0;
|
||||
|
||||
n = lua_gettop(L);
|
||||
if (n == 2)
|
||||
{
|
||||
evas_object_map_enable_set(elo->evas_obj, lua_toboolean(L, 2));
|
||||
}
|
||||
lua_pushboolean(L, evas_object_map_enable_get(elo->evas_obj));
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
_elua_text_font(lua_State *L)
|
||||
{
|
||||
|
@ -2174,6 +2259,94 @@ static int _elua_polygon_clear(lua_State *L)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
_elua_map_coord(lua_State *L)
|
||||
{
|
||||
Edje_Lua_Obj *obj = (Edje_Lua_Obj *)lua_touserdata(L, 1);
|
||||
Edje_Lua_Map *elm = (Edje_Lua_Map *)obj;
|
||||
Evas_Coord x, y, z;
|
||||
int n;
|
||||
|
||||
if (!obj) return 0;
|
||||
n = lua_gettop(L);
|
||||
if (2 > n) return 0;
|
||||
|
||||
if (_elua_4_int_get(L, 2, EINA_TRUE, "n", &n, "x", &x, "y", &y, "z", &z) > 0)
|
||||
{
|
||||
evas_map_point_coord_set(elm->map, n, x, y, z);
|
||||
}
|
||||
else
|
||||
{
|
||||
n = lua_tointeger(L, 2);
|
||||
evas_map_point_coord_get(elm->map, n, &x, &y, &z);
|
||||
}
|
||||
_elua_int_ret(L, "x", x);
|
||||
_elua_int_ret(L, "y", y);
|
||||
_elua_int_ret(L, "z", z);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
_elua_map_populate(lua_State *L)
|
||||
{
|
||||
Edje_Lua_Obj *obj = (Edje_Lua_Obj *)lua_touserdata(L, 1);
|
||||
Edje_Lua_Map *elm = (Edje_Lua_Map *)obj;
|
||||
int n;
|
||||
|
||||
if (!obj) return 0;
|
||||
n = lua_gettop(L);
|
||||
|
||||
switch (n)
|
||||
{
|
||||
case 2 :
|
||||
{
|
||||
Edje_Lua_Obj *obj2 = (Edje_Lua_Obj *)lua_touserdata(L, 2);
|
||||
const Edje_Lua_Evas_Object *source = (Edje_Lua_Evas_Object *)obj2;
|
||||
|
||||
evas_map_util_points_populate_from_object(elm->map, source->evas_obj);
|
||||
break;
|
||||
}
|
||||
|
||||
case 3 :
|
||||
{
|
||||
Edje_Lua_Obj *obj2 = (Edje_Lua_Obj *)lua_touserdata(L, 2);
|
||||
const Edje_Lua_Evas_Object *source = (Edje_Lua_Evas_Object *)obj2;
|
||||
Evas_Coord z = lua_tointeger(L, 3);
|
||||
|
||||
evas_map_util_points_populate_from_object_full(elm->map, source->evas_obj, z);
|
||||
break;
|
||||
}
|
||||
|
||||
default :
|
||||
{
|
||||
// FIXME: unpack 5 integers and pass them to evas_map_util_points_populate_from_geometry()
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
_elua_map_rotate(lua_State *L)
|
||||
{
|
||||
Edje_Lua_Obj *obj = (Edje_Lua_Obj *)lua_touserdata(L, 1);
|
||||
Edje_Lua_Map *elm = (Edje_Lua_Map *)obj;
|
||||
double degrees;
|
||||
Evas_Coord x, y;
|
||||
int n;
|
||||
|
||||
if (!obj) return 0;
|
||||
n = lua_gettop(L);
|
||||
if (4 != n) return 0;
|
||||
|
||||
degrees = lua_tonumber(L, 2);
|
||||
if (_elua_2_int_get(L, 3, EINA_TRUE, "x", &x, "y", &y) > 0)
|
||||
{
|
||||
evas_map_util_rotate(elm->map, degrees, x, y);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
//-------------
|
||||
static void
|
||||
_elua_evas_obj_free(void *obj)
|
||||
|
@ -2314,6 +2487,34 @@ _elua_polygon(lua_State *L)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static void
|
||||
_elua_map_free(void *obj)
|
||||
{
|
||||
Edje_Lua_Map *elm = obj;
|
||||
lua_State *L;
|
||||
if (!elm->obj.ed) return;
|
||||
L = elm->obj.ed->L;
|
||||
evas_map_free(elm->map);
|
||||
elm->map = NULL;
|
||||
}
|
||||
|
||||
static int
|
||||
_elua_map(lua_State *L)
|
||||
{
|
||||
Edje *ed = (Edje *)_elua_table_ptr_get(L, _elua_key);
|
||||
Edje_Lua_Map *elm;
|
||||
int count;
|
||||
|
||||
count = luaL_checkinteger(L, 1);
|
||||
|
||||
elm = (Edje_Lua_Map *)_elua_map_new(L, ed, sizeof(Edje_Lua_Map));
|
||||
elm->obj.free_func = _elua_map_free;
|
||||
elm->map = evas_map_new(count);
|
||||
lua_pushvalue(L, 2);
|
||||
_elua_gc(L);
|
||||
return 1;
|
||||
}
|
||||
|
||||
//-------------
|
||||
//---------------
|
||||
//-------------------
|
||||
|
@ -2362,6 +2563,14 @@ _edje_lua2_script_init(Edje *ed)
|
|||
lua_rawset(L, -3);
|
||||
lua_pop(L, 2);
|
||||
|
||||
luaL_register(L, "evas_map_obj", _elua_evas_map_obj);
|
||||
luaL_newmetatable(L, "evas_map_obj");
|
||||
luaL_register(L, 0, _elua_edje_meta);
|
||||
|
||||
lua_pushliteral(L, "__index");
|
||||
lua_pushvalue(L, -3);
|
||||
lua_rawset(L, -3);
|
||||
|
||||
// weak table for our objects
|
||||
lua_pushlightuserdata(L, &_elua_objs);
|
||||
lua_newtable(L);
|
||||
|
|
Loading…
Reference in New Issue