added evas object box
[ego.git] / src / lib / evas.c
blob079ac934b0b87d84fd1abe136e200ef80cd08e53
1 #include "class.h"
2 #include "evas.h"
3 #include "object.h"
4 #include "image.h"
5 #include "animator.h"
6 #include "smart.h"
7 #include "ego.h"
9 #include <Evas.h>
10 #include <Edje.h>
12 extern luaobj_Ref *rSmart;
14 /* FIXME
15 * smart_member_add of edje and ego don't like each other
18 #define FN_ADD_OBJ(EGO_FUNC, EGO_CLASS, E_FUNC) \
19 static int \
20 EGO_FUNC (lua_State *L) \
21 { \
22 int set = lua_gettop (L) == 2; \
23 luaobj_Object *obj = luaL_checkudata (L, 1, "cEgo"); \
24 luaobj_Object *tar = lua_newuserdata (L, sizeof (luaobj_Object)); \
25 luaobj_set_class (L, -1, tar, EGO_CLASS); \
26 tar->data = E_FUNC (evas_object_evas_get (obj->data)); \
27 evas_object_data_set (tar->data, "luaobj", luaobj_new_ref (L, -1)); \
28 evas_object_smart_member_add (tar->data, obj->data); \
29 evas_object_clip_set (tar->data, evas_object_smart_clipped_clipper_get (obj->data)); \
30 if (set) \
31 { \
32 lua_getfield (L, -1, "set"); \
33 lua_pushvalue (L, -2); \
34 lua_pushvalue (L, 2); \
35 if (lua_pcall (L, 2, 0, 0)) \
36 printf (EGO_CLASS"#set: %s\n", luaL_checkstring (L, -1)); \
37 } \
38 return 1; \
41 #define FN_ADD_ELM(EGO_FUNC, EGO_CLASS, E_FUNC) \
42 static int \
43 EGO_FUNC (lua_State *L) \
44 { \
45 int set = lua_gettop (L) == 2; \
46 luaobj_Object *obj = luaL_checkudata (L, 1, "cEgo"); \
47 luaobj_Object *tar = lua_newuserdata (L, sizeof (luaobj_Object)); \
48 luaobj_set_class (L, -1, tar, EGO_CLASS); \
49 tar->data = (Evas_Object *) E_FUNC (obj->data); \
50 evas_object_data_set (tar->data, "luaobj", luaobj_new_ref (L, -1)); \
51 evas_object_smart_member_add (tar->data, obj->data); \
52 evas_object_clip_set (tar->data, evas_object_smart_clipped_clipper_get (obj->data)); \
53 if (set) \
54 { \
55 lua_getfield (L, -1, "set"); \
56 lua_pushvalue (L, -2); \
57 lua_pushvalue (L, 2); \
58 if (lua_pcall (L, 2, 0, 0)) \
59 printf (EGO_CLASS"#set: %s\n", luaL_checkstring (L, -1)); \
60 } \
61 return 1; \
64 static int
65 lecore_fn_animator (lua_State * L)
67 /* 1: ego
68 * 2: function
69 * 3: (table)
71 luaobj_Object *obj = lua_newuserdata (L, sizeof (luaobj_Object));
72 luaobj_set_class (L, -1, obj, "cAnimator");
73 obj->data = ecore_animator_add (lanimator_cb, obj);
74 obj->datb = luaobj_new_ref (L, -1); // userdata
75 obj->datc = luaobj_new_ref (L, 2); // function
76 return 1;
79 static int
80 levas_fn_smart_class (lua_State * L)
82 /* 1: evas (not used)
83 * 2: table {}
85 luaobj_Object *sma =
86 (luaobj_Object *) lua_newuserdata (L, sizeof (luaobj_Object));
87 luaobj_set_class (L, -1, sma, "cSmart");
88 sma->data = (void *) lsmart_class_new (luaobj_new_ref (L, 2));
89 return 1;
92 static int
93 levas_fn_smart (lua_State * L)
95 /* 1: evas
96 * 2: smart_class
98 luaobj_Object *obj = (luaobj_Object *) lua_touserdata (L, 1);
99 luaobj_Object *sma = (luaobj_Object *) lua_touserdata (L, 2);
100 luaobj_Object *sob =
101 (luaobj_Object *) lua_newuserdata (L, sizeof (luaobj_Object));
102 luaobj_set_class (L, -1, sob, "cRect");
103 rSmart = luaobj_new_ref (L, -1);
104 sob->data = evas_object_smart_add (evas_object_evas_get (obj->data), sma->data);
105 evas_object_data_set (sob->data, "luaobj", rSmart);
106 return 1;
109 static int
110 levas_fn_textblock_style (lua_State * L)
112 /* 1: evas (not used)
114 int set = lua_gettop (L) == 2;
115 luaobj_Object *sty =
116 (luaobj_Object *) lua_newuserdata (L, sizeof (luaobj_Object));
117 luaobj_set_class (L, -1, sty, "cStyle");
118 sty->data = evas_textblock_style_new ();
119 // FIXME // register
120 if (set)
122 lua_getfield (L, -1, "set");
123 lua_pushvalue (L, -2);
124 lua_pushvalue (L, 2);
125 if (lua_pcall (L, 2, 0, 0))
126 printf ("textblock_style#set: %s\n", luaL_checkstring (L, -1));
128 return 1;
131 static int
132 levas_fn_transform (lua_State * L)
134 /* 1: evas (not used)
136 int set = lua_gettop (L) == 2;
137 luaobj_Object *sty =
138 (luaobj_Object *) lua_newuserdata (L, sizeof (luaobj_Object));
139 luaobj_set_class (L, -1, sty, "cTransform");
140 sty->data = malloc (sizeof (Evas_Transform));
141 // FIXME // register
142 if (set)
144 lua_getfield (L, -1, "set");
145 lua_pushvalue (L, -2);
146 lua_pushvalue (L, 2);
147 if (lua_pcall (L, 2, 0, 0))
148 printf ("transform#set: %s\n", luaL_checkstring (L, -1));
150 return 1;
153 FN_ADD_OBJ (levas_fn_rectangle, "cRect", evas_object_rectangle_add);
154 FN_ADD_OBJ (levas_fn_image, "cImage", evas_object_image_add);
155 FN_ADD_OBJ (levas_fn_edje, "cEdje", edje_object_add);
156 FN_ADD_OBJ (levas_fn_text, "cText", evas_object_text_add);
157 FN_ADD_OBJ (levas_fn_textblock, "cTextblock", evas_object_textblock_add);
158 FN_ADD_OBJ (levas_fn_gradient, "cGradient", evas_object_gradient_add);
159 FN_ADD_OBJ (levas_fn_gradient2_linear, "cGradient2_Linear", evas_object_gradient2_linear_add);
160 FN_ADD_OBJ (levas_fn_gradient2_radial, "cGradient2_Radial", evas_object_gradient2_radial_add);
161 FN_ADD_OBJ (levas_fn_polygon, "cPolygon", evas_object_polygon_add);
162 FN_ADD_OBJ (levas_fn_line, "cLine", evas_object_line_add);
163 FN_ADD_OBJ (levas_fn_table, "cTable", evas_object_table_add);
164 FN_ADD_OBJ (levas_fn_box, "cBox", evas_object_box_add);
166 FN_ADD_ELM (levas_fn_icon, "cIcon", elm_icon_add);
167 FN_ADD_ELM (levas_fn_box2, "cBox2", elm_box_add);
168 FN_ADD_ELM (levas_fn_button, "cButton", elm_button_add);
169 FN_ADD_ELM (levas_fn_scroller, "cScroller", elm_scroller_add);
170 FN_ADD_ELM (levas_fn_label, "cLabel", elm_label_add);
171 FN_ADD_ELM (levas_fn_toggle, "cToggle", elm_toggle_add);
172 FN_ADD_ELM (levas_fn_frame, "cFrame", elm_frame_add);
173 FN_ADD_ELM (levas_fn_table2, "cTable2", elm_table_add);
174 FN_ADD_ELM (levas_fn_entry, "cEntry", elm_entry_add);
175 FN_ADD_ELM (levas_fn_bubble, "cBubble", elm_bubble_add);
176 FN_ADD_ELM (levas_fn_hover, "cHover", elm_hover_add);
177 FN_ADD_ELM (levas_fn_layout, "cLayout", elm_layout_add);
178 FN_ADD_ELM (levas_fn_clock, "cClock", elm_clock_add);
180 static int
181 levas_fn_quit (lua_State * L)
183 ecore_main_loop_quit ();
184 return 0;
188 * evas functions definitions
191 const luaL_Reg lEgo_fn [] = {
192 {"animator", lecore_fn_animator},
193 {"rectangle", levas_fn_rectangle},
194 {"image", levas_fn_image},
195 {"edje", levas_fn_edje},
196 {"line", levas_fn_line},
197 {"text", levas_fn_text},
198 {"textblock", levas_fn_textblock},
199 {"gradient", levas_fn_gradient},
200 {"gradient2_linear", levas_fn_gradient2_linear},
201 {"gradient2_radial", levas_fn_gradient2_radial},
202 {"polygon", levas_fn_polygon},
203 {"table", levas_fn_table},
204 {"box", levas_fn_box},
206 {"textblock_style", levas_fn_textblock_style},
207 {"smart_class", levas_fn_smart_class},
208 {"smart", levas_fn_smart},
209 {"transform", levas_fn_transform},
211 {"icon", levas_fn_icon},
212 {"box2", levas_fn_box2},
213 {"button", levas_fn_button},
214 {"scroller", levas_fn_scroller},
215 {"label", levas_fn_label},
216 {"toggle", levas_fn_toggle},
217 {"frame", levas_fn_frame},
218 {"table2", levas_fn_table2},
219 {"entry", levas_fn_entry},
220 {"bubble", levas_fn_bubble},
221 {"hover", levas_fn_hover},
222 {"layout", levas_fn_layout},
223 {"clock", levas_fn_clock},
225 {"quit", levas_fn_quit},
227 {NULL, NULL}
230 const luaL_Reg lEgo_nil [] = {
231 {NULL, NULL} // sentinel
234 const luaobj_Reg mEgo = {
235 lEgo_nil,
236 lEgo_nil,
237 lEgo_nil,
238 lEgo_fn
241 const luaobj_Reg *cEgo [] = {
242 &mClass,
243 &mObject,
244 &mEgo,
245 NULL // sentinel