aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaurent Ghigonis <laurent@p1sec.com>2012-10-14 20:08:32 +0200
committerLaurent Ghigonis <laurent@p1sec.com>2012-10-14 20:08:32 +0200
commit5c273f97157291b7303da17e928663ff16ad9451 (patch)
tree1ef2d086a9e010ee1241a8f356b200f922e1b282
parentjust so it compiles (diff)
downloadglouglou-5c273f97157291b7303da17e928663ff16ad9451.tar.xz
glouglou-5c273f97157291b7303da17e928663ff16ad9451.zip
preliminary work on elife.
just compiles, does not run.
-rw-r--r--src/elife.c16
-rw-r--r--src/elife_edje_external.c100
-rw-r--r--src/elife_evas_smart.c331
-rw-r--r--src/elife_evas_smart.h6
4 files changed, 198 insertions, 255 deletions
diff --git a/src/elife.c b/src/elife.c
index 0b34d72..1656fab 100644
--- a/src/elife.c
+++ b/src/elife.c
@@ -19,9 +19,9 @@ static struct {
Evas *evas;
Evas_Coord w, h;
Evas_Object *bg;
- Evas_Object *eenvaders;
-} eenvaders_g;
-#define _G eenvaders_g
+ Evas_Object *elife;
+} elife_g;
+#define _G elife_g
static void
resize_cb(Ecore_Evas *ee)
@@ -30,7 +30,7 @@ resize_cb(Ecore_Evas *ee)
ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
evas_object_resize(_G.bg, w, h);
- evas_object_resize(_G.eenvaders, w, h);
+ evas_object_resize(_G.elife, w, h);
}
static Eina_Bool
@@ -89,11 +89,11 @@ main(void)
evas_object_resize(_G.bg, _G.w, _G.h);
evas_object_show(_G.bg);
- _G.eenvaders = eenvaders_smart_new(_G.evas);
- evas_object_resize(_G.eenvaders, _G.w, _G.h);
- evas_object_show(_G.eenvaders);
+ _G.elife = elife_smart_new(_G.evas);
+ evas_object_resize(_G.elife, _G.w, _G.h);
+ evas_object_show(_G.elife);
- ecore_timer_add(3, timer_cb, _G.eenvaders);
+ ecore_timer_add(3, timer_cb, _G.elife);
ecore_evas_callback_resize_set(_G.ee, &resize_cb);
diff --git a/src/elife_edje_external.c b/src/elife_edje_external.c
index 099e204..14035d2 100644
--- a/src/elife_edje_external.c
+++ b/src/elife_edje_external.c
@@ -13,150 +13,150 @@
/* Prototypes -{{{-*/
static Evas_Object *
-eenvaders_ext_add(void *data, Evas *evas, Evas_Object *parent,
+elife_ext_add(void *data, Evas *evas, Evas_Object *parent,
const Eina_List *params, const char *part_name);
static void
-eenvaders_ext_state_set(void *data, Evas_Object *obj,
+elife_ext_state_set(void *data, Evas_Object *obj,
const void *from_params,
const void *to_params, float pos);
static void
-eenvaders_ext_signal_emit(void *data, Evas_Object *obj,
+elife_ext_signal_emit(void *data, Evas_Object *obj,
const char *emission, const char *source);
static Eina_Bool
-eenvaders_ext_param_set(void *data, Evas_Object *obj,
+elife_ext_param_set(void *data, Evas_Object *obj,
const Edje_External_Param *param);
static Eina_Bool
-eenvaders_ext_param_get(void *data, const Evas_Object *obj,
+elife_ext_param_get(void *data, const Evas_Object *obj,
Edje_External_Param *param);
static Evas_Object *
-eenvaders_ext_content_get(void *data, const Evas_Object *obj,
+elife_ext_content_get(void *data, const Evas_Object *obj,
const char *content);
static void*
-eenvaders_ext_params_parse(void *data, Evas_Object *obj,
+elife_ext_params_parse(void *data, Evas_Object *obj,
const Eina_List *params);
static void
-eenvaders_ext_params_free(void *params);
+elife_ext_params_free(void *params);
static const char*
-eenvaders_ext_label_get(void *data);
+elife_ext_label_get(void *data);
static const char*
-eenvaders_ext_description_get(void *data);
+elife_ext_description_get(void *data);
static Evas_Object *
-eenvaders_ext_icon_add(void *data, Evas *e);
+elife_ext_icon_add(void *data, Evas *e);
static Evas_Object *
-eenvaders_ext_preview_add(void *data, Evas *e);
+elife_ext_preview_add(void *data, Evas *e);
static const char*
-eenvaders_ext_translate(void *data, const char *orig);
+elife_ext_translate(void *data, const char *orig);
/* }}} */
/* Globals -{{{-*/
static struct {
Edje_External_Type ext_type;
-} eenvaders_g = {
+} elife_g = {
.ext_type = {
.abi_version = EDJE_EXTERNAL_TYPE_ABI_VERSION,
- .module = "eenvaders",
- .module_name = "eenvaders",
- .add = eenvaders_ext_add,
- .state_set = eenvaders_ext_state_set,
- .signal_emit = eenvaders_ext_signal_emit,
- .param_set = eenvaders_ext_param_set,
- .param_get = eenvaders_ext_param_get,
- .content_get = eenvaders_ext_content_get,
- .params_parse = eenvaders_ext_params_parse,
- .params_free = eenvaders_ext_params_free,
- .label_get = eenvaders_ext_label_get,
- .description_get = eenvaders_ext_description_get,
- .icon_add = eenvaders_ext_icon_add,
- .preview_add = eenvaders_ext_preview_add,
- .translate = eenvaders_ext_translate,
+ .module = "elife",
+ .module_name = "elife",
+ .add = elife_ext_add,
+ .state_set = elife_ext_state_set,
+ .signal_emit = elife_ext_signal_emit,
+ .param_set = elife_ext_param_set,
+ .param_get = elife_ext_param_get,
+ .content_get = elife_ext_content_get,
+ .params_parse = elife_ext_params_parse,
+ .params_free = elife_ext_params_free,
+ .label_get = elife_ext_label_get,
+ .description_get = elife_ext_description_get,
+ .icon_add = elife_ext_icon_add,
+ .preview_add = elife_ext_preview_add,
+ .translate = elife_ext_translate,
},
};
-#define _G eenvaders_g
+#define _G elife_g
/* }}} */
/* Edje External -{{{-*/
static Evas_Object *
-eenvaders_ext_add(void *data, Evas *evas, Evas_Object *parent,
+elife_ext_add(void *data, Evas *evas, Evas_Object *parent,
const Eina_List *params, const char *part_name)
{
- return eenvaders_smart_new(evas);
+ return elife_smart_new(evas);
}
static void
-eenvaders_ext_state_set(void *data, Evas_Object *obj,
+elife_ext_state_set(void *data, Evas_Object *obj,
const void *from_params,
const void *to_params, float pos)
{
}
static void
-eenvaders_ext_signal_emit(void *data, Evas_Object *obj,
+elife_ext_signal_emit(void *data, Evas_Object *obj,
const char *emission, const char *source)
{
evas_object_smart_callback_call(obj, emission, NULL);
}
static Eina_Bool
-eenvaders_ext_param_set(void *data, Evas_Object *obj,
+elife_ext_param_set(void *data, Evas_Object *obj,
const Edje_External_Param *param)
{
return EINA_TRUE;
}
static Eina_Bool
-eenvaders_ext_param_get(void *data, const Evas_Object *obj,
+elife_ext_param_get(void *data, const Evas_Object *obj,
Edje_External_Param *param)
{
return EINA_TRUE;
}
static Evas_Object *
-eenvaders_ext_content_get(void *data, const Evas_Object *obj,
+elife_ext_content_get(void *data, const Evas_Object *obj,
const char *content)
{
return NULL;
}
static void*
-eenvaders_ext_params_parse(void *data, Evas_Object *obj,
+elife_ext_params_parse(void *data, Evas_Object *obj,
const Eina_List *params)
{
return NULL;
}
static void
-eenvaders_ext_params_free(void *params)
+elife_ext_params_free(void *params)
{
}
static const char*
-eenvaders_ext_label_get(void *data)
+elife_ext_label_get(void *data)
{
return NULL;
}
static const char*
-eenvaders_ext_description_get(void *data)
+elife_ext_description_get(void *data)
{
return NULL;
}
static Evas_Object *
-eenvaders_ext_icon_add(void *data, Evas *e)
+elife_ext_icon_add(void *data, Evas *e)
{
return NULL;
}
static Evas_Object *
-eenvaders_ext_preview_add(void *data, Evas *e)
+elife_ext_preview_add(void *data, Evas *e)
{
return NULL;
}
static const char*
-eenvaders_ext_translate(void *data, const char *orig)
+elife_ext_translate(void *data, const char *orig)
{
return NULL;
}
@@ -164,7 +164,7 @@ eenvaders_ext_translate(void *data, const char *orig)
/* Init/Shutdown -{{{-*/
Eina_Bool
-eenvaders_init(void)
+elife_init(void)
{
unsigned int seedval = time(NULL);
int fd;
@@ -175,18 +175,18 @@ eenvaders_init(void)
}
srand(seedval);
- edje_external_type_register("eenvaders", &_G.ext_type);
+ edje_external_type_register("elife", &_G.ext_type);
return EINA_TRUE;
}
void
-eenvaders_shutdown(void)
+elife_shutdown(void)
{
- edje_external_type_unregister("eenvaders");
+ edje_external_type_unregister("elife");
}
-EINA_MODULE_INIT(eenvaders_init);
-EINA_MODULE_SHUTDOWN(eenvaders_shutdown);
+EINA_MODULE_INIT(elife_init);
+EINA_MODULE_SHUTDOWN(elife_shutdown);
/* }}} */
diff --git a/src/elife_evas_smart.c b/src/elife_evas_smart.c
index 9c47e8c..9cbd6b7 100644
--- a/src/elife_evas_smart.c
+++ b/src/elife_evas_smart.c
@@ -1,4 +1,5 @@
#include <stdlib.h>
+#include <err.h>
#include "elife_evas_smart.h"
@@ -7,34 +8,28 @@
#define MIN(a,b) (((a)<(b))?(a):(b))
-/* Prototypes -{{{-*/
-static Evas_Smart *_eenvaders_object_smart_get(void);
-static Evas_Object *eenvaders_object_new(Evas *evas);
-static void _eenvaders_object_del(Evas_Object *o);
-static void _eenvaders_object_move(Evas_Object *o, Evas_Coord x, Evas_Coord y);
-static void _eenvaders_object_resize(Evas_Object *o, Evas_Coord w, Evas_Coord h);
-static void _eenvaders_object_show(Evas_Object *o);
-static void _eenvaders_object_hide(Evas_Object *o);
-static void _eenvaders_object_color_set(Evas_Object *o, int r, int g, int b, int a);
-static void _eenvaders_object_clip_set(Evas_Object *o, Evas_Object *clip);
-static void _eenvaders_object_clip_unset(Evas_Object *o);
-
-static void
-draw_eenvaders(Evas_Object *smart_obj,
- int x, int y, int w, int h);
-/* }}} */
-/* Globals -{{{-*/
+static void cell_mouse_down(void *data, Evas *evas, Evas_Object *child, void *event_info);
+static Evas_Smart *_elife_object_smart_get(void);
+static Evas_Object *elife_object_new(Evas *evas);
+static void _elife_object_del(Evas_Object *o);
+static void _elife_object_move(Evas_Object *o, Evas_Coord x, Evas_Coord y);
+static void _elife_object_resize(Evas_Object *o, Evas_Coord w, Evas_Coord h);
+static void _elife_object_show(Evas_Object *o);
+static void _elife_object_hide(Evas_Object *o);
+static void _elife_object_color_set(Evas_Object *o, int r, int g, int b, int a);
+static void _elife_object_clip_set(Evas_Object *o, Evas_Object *clip);
+static void _elife_object_clip_unset(Evas_Object *o);
static struct {
Evas_Smart_Class klass;
-} eenvaders_evas_smart_g = {
+} elife_evas_smart_g = {
.klass = {
- .name = "eenvaders_object",
+ .name = "elife_object",
.version = EVAS_SMART_CLASS_VERSION,
.add = NULL,
- .del = _eenvaders_object_del,
- .move = _eenvaders_object_move,
- .resize = _eenvaders_object_resize,
+ .del = _elife_object_del,
+ .move = _elife_object_move,
+ .resize = _elife_object_resize,
.show = NULL,
.hide = NULL,
.color_set = NULL,
@@ -48,188 +43,154 @@ static struct {
.interfaces = NULL,
.data = NULL,
},
-#define _G eenvaders_evas_smart_g
+#define _G elife_evas_smart_g
};
-/* }}} */
-/* Eenvaders functions -{{{-*/
-
-static void
-eenvaders_mouse_down(void *data,
- Evas *evas,
- Evas_Object *child,
- void *event_info)
-{
- Evas_Coord x, y, w, h;
- Evas_Event_Mouse_Up *evt = event_info;
- Evas_Object *parent = data;
- void *mem;
+struct cell {
+ Evas_Object *obj;
+ int age;
+};
- x = evt->canvas.x;
- y = evt->canvas.y;
+struct grid {
+ struct cell ***grid;
+ Evas_Object *obj;
+ int w, h;
+ int age;
+};
- mem = evas_object_data_del(child, "m");
- if (!mem)
- return;
+void *
+xmalloc(size_t size)
+{
+ void *x;
- free(mem);
- evas_object_geometry_get(child, &x, &y, &w, &h);
- evas_object_smart_member_del(child);
- evas_object_del(child);
- draw_eenvaders(parent, x+3, y+3, w-3, h-3);
+ x = malloc(size);
+ if (!x)
+ err(1, "Error: failed to allocate %d", size);
+ return x;
}
-static Evas_Object*
-new_eenvader(Evas *evas, Evas_Object *smart_obj)
+struct grid *
+grid_new(Evas_Object *container, int w, int h)
{
- Evas_Object *o = NULL;
- uint16_t u = rand();
- int *mem = calloc(7 * 7, sizeof(int));
-
- if (!mem) {
- perror(NULL);
- exit(1);
- }
-
- for (int i = 0; i < 15; i++) {
- if (u & (1 << i)) {
- mem[7 + 7*(i/3) + 1 + i%3] = FG;
- mem[7 + 7*(i/3) + 5 - i%3] = FG;
- }
- }
-
- o = evas_object_image_filled_add(evas);
- evas_object_image_alpha_set(o, EINA_TRUE);
- evas_object_image_fill_set(o, 0, 0, 7, 7);
- evas_object_image_smooth_scale_set(o, EINA_FALSE);
- evas_object_image_size_set (o, 7, 7);
- evas_object_image_data_set(o, (void *) mem);
- evas_object_data_set(o, "m", (void *) mem);
-
- evas_object_event_callback_add(o,
- EVAS_CALLBACK_MOUSE_DOWN,
- eenvaders_mouse_down,
- smart_obj);
-
- return o;
+ struct grid *g;
+ struct cell *cell;
+ Evas_Object *o;
+ int i, j;
+
+ g = xmalloc(sizeof(struct grid));
+ g->grid = xmalloc(sizeof(struct cell *) * w * h);
+ for (i=0; i<w; i++) {
+ for (j=0; j<h; j++) {
+ cell = xmalloc(sizeof(struct cell));
+ o = evas_object_image_filled_add(evas_object_evas_get(container));
+ if (!o)
+ err(1, "Cannot create evas_object for cell");
+ evas_object_image_alpha_set(o, EINA_TRUE);
+ evas_object_image_fill_set(o, 0, 0, 7, 7);
+ evas_object_image_smooth_scale_set(o, EINA_FALSE);
+ evas_object_image_size_set (o, 7, 7);
+ evas_object_image_data_set(o, (void *) cell);
+ evas_object_data_set(o, "cell", (void *) cell);
+ evas_object_event_callback_add(o,
+ EVAS_CALLBACK_MOUSE_DOWN,
+ cell_mouse_down,
+ cell);
+ cell->obj = o;
+ cell->age = 0;
+ g->grid[i][j] = cell;
+ evas_object_smart_member_add(o, container);
+ }
+ }
+ g->obj = container;
+ g->w = w;
+ g->h = w;
+ g->age = 0;
+
+ return g;
}
-static int
-square_ceil_7(int n)
+void
+grid_del(struct grid *grid)
{
- /* XXX: considering n >= 7 */
- int r = 1;
+ /* program exits, OS will free */
+}
- n /= 7;
+int
+grid_redraw(struct grid *grid)
+{
+ struct cell *cell;
+ int container_w, container_h, cell_w, cell_h;
+ int i,j;
+ Evas_Object *o;
+
+ evas_object_geometry_get(grid->obj, &container_w, &container_h, NULL, NULL);
+ cell_w = container_w / grid->w;
+ cell_h = container_h / grid->h;
+
+ for (i=0; i<grid->w; i++) {
+ for (j=0; j<grid->h; j++) {
+ cell = grid->grid[i][j];
+ o = cell->obj;
+ evas_object_resize(o, cell_w, cell_h);
+ evas_object_image_fill_set(o, 0, 0, cell_w, cell_h);
+ evas_object_move(o, i*cell_w, j*cell_h);
+ evas_object_show(o);
+ }
+ }
+}
- while (n >>= 1) {
- r <<= 1;
- }
- return r * 7;
+int
+grid_evolution(struct grid *grid)
+{
+ // XXX TODO
}
static void
-draw_eenvaders(Evas_Object *smart_obj,
- int x, int y, int w, int h)
+cell_mouse_down(void *data,
+ Evas *evas,
+ Evas_Object *child,
+ void *event_info)
{
- Evas_Object *o;
- int d;
-
- if (w < 7 || h < 7)
- return;
-
- d = square_ceil_7(MIN(w,h));
-
- o = new_eenvader(evas_object_evas_get(smart_obj), smart_obj);
- evas_object_resize(o, d, d);
- evas_object_smart_member_add(o, smart_obj);
-
- switch(rand() & 3) {
- case 0:
- /* top-left */
- evas_object_move(o, x, y);
- evas_object_show(o);
-
- draw_eenvaders(smart_obj, x+d, y, w-d, h); /* right */
- draw_eenvaders(smart_obj, x, y+d, d, h-d); /* bottom */
- break;
- case 1:
- /* top-right */
- evas_object_move(o, x+w-d, y);
- evas_object_show(o);
-
- draw_eenvaders(smart_obj, x, y+d, w, h-d); /* bottom */
- draw_eenvaders(smart_obj, x, y, w-d, d); /* left */
- break;
- case 2:
- /* bottom-right */
- evas_object_move(o, x+w-d, y+h-d);
- evas_object_show(o);
-
- draw_eenvaders(smart_obj, x, y, w-d, h); /* left */
- draw_eenvaders(smart_obj, x+w-d, y, d, h-d); /* top */
- break;
- case 3:
- /* bottom-left */
- evas_object_move(o, x, y+h-d);
- evas_object_show(o);
-
- draw_eenvaders(smart_obj, x, y, w, h-d); /* top */
- draw_eenvaders(smart_obj, x+d, y+h-d, w-d, d); /* right */
- break;
- }
-}
+ Evas_Coord x, y, w, h;
+ Evas_Event_Mouse_Up *evt = event_info;
+ struct cell *cell;
-/* }}} */
-/* Smart Object -{{{-*/
+ cell = data;
+}
Evas_Object *
-eenvaders_smart_new(Evas *e)
+elife_smart_new(Evas *e)
{
- return eenvaders_object_new(e);
+ return elife_object_new(e);
}
static void
-eenvaders_on_refresh(void *data, Evas_Object *o, void *event_info)
+elife_on_refresh(void *data, Evas_Object *o, void *event_info)
{
Evas_Coord x, y, w, h;
Evas_Object *child;
- void *mem;
- Eina_List *list;
-
- list = evas_object_smart_members_get(o);
- EINA_LIST_FREE(list, child) {
- void *mem;
-
- mem = evas_object_data_del(child, "m");
- free(mem);
- evas_object_event_callback_del(o, EVAS_CALLBACK_MOUSE_DOWN,
- eenvaders_mouse_down);
- evas_object_smart_member_del(child);
- evas_object_del(child);
- }
+ struct grid *grid;
- evas_object_geometry_get(o, &x, &y, &w, &h);
- draw_eenvaders(o, x, y, w, h);
+ grid_evolution(grid);
}
static Evas_Object *
-eenvaders_object_new(Evas *evas)
+elife_object_new(Evas *evas)
{
- Evas_Object *eenvaders_object;
+ Evas_Object *elife_object;
- eenvaders_object = evas_object_smart_add(evas,
- _eenvaders_object_smart_get());
- evas_object_smart_callback_add(eenvaders_object,
+ elife_object = evas_object_smart_add(evas,
+ _elife_object_smart_get());
+ evas_object_smart_callback_add(elife_object,
"refresh",
- eenvaders_on_refresh,
+ elife_on_refresh,
NULL);
- return eenvaders_object;
+ return elife_object;
}
static Evas_Smart *
-_eenvaders_object_smart_get(void)
+_elife_object_smart_get(void)
{
static Evas_Smart *smart = NULL;
@@ -241,29 +202,27 @@ _eenvaders_object_smart_get(void)
}
static void
-_eenvaders_object_del(Evas_Object *o)
+_elife_object_del(Evas_Object *o)
{
Evas_Object *child;
- void *mem;
+ struct grid *grid;
Eina_List *list;
list = evas_object_smart_members_get(o);
EINA_LIST_FREE(list, child) {
- void *mem;
-
evas_object_smart_member_del(child);
evas_object_del(child);
- mem = evas_object_data_del(child, "m");
- free(mem);
-
}
+ grid = evas_object_data_del(child, "grid");
+ grid_del(grid);
}
static void
-_eenvaders_object_move(Evas_Object *o, Evas_Coord x, Evas_Coord y)
+_elife_object_move(Evas_Object *o, Evas_Coord x, Evas_Coord y)
{
Evas_Coord orig_x, orig_y, dx, dy;
Eina_List *lst;
+ Evas_Object *child;
void *data;
evas_object_geometry_get(o, &orig_x, &orig_y, NULL, NULL);
@@ -272,33 +231,17 @@ _eenvaders_object_move(Evas_Object *o, Evas_Coord x, Evas_Coord y)
lst = evas_object_smart_members_get(o);
EINA_LIST_FREE(lst, data) {
- Evas_Object *child = data;
-
+ child = data;
evas_object_geometry_get(child, &orig_x, &orig_y, NULL, NULL);
evas_object_move(child, orig_x + dx, orig_y + dy);
}
}
static void
-_eenvaders_object_resize(Evas_Object *o, Evas_Coord w, Evas_Coord h)
+_elife_object_resize(Evas_Object *o, Evas_Coord w, Evas_Coord h)
{
- Evas_Coord x, y;
- Evas_Object *child;
- void *mem;
- Eina_List *list;
+ struct grid *grid;
- list = evas_object_smart_members_get(o);
- EINA_LIST_FREE(list, child) {
- void *mem;
-
- mem = evas_object_data_del(child, "m");
- free(mem);
- evas_object_smart_member_del(child);
- evas_object_del(child);
- }
-
- evas_object_geometry_get(o, &x, &y, NULL, NULL);
- draw_eenvaders(o, x, y, w, h);
+ grid = evas_object_data_get(o, "grid");
+ grid_redraw(grid);
}
-
-/* }}} */
diff --git a/src/elife_evas_smart.h b/src/elife_evas_smart.h
index 65152f1..b5a5b85 100644
--- a/src/elife_evas_smart.h
+++ b/src/elife_evas_smart.h
@@ -1,8 +1,8 @@
-#ifndef EENVADERS_SMART_H
-#define EENVADERS_SMART_H
+#ifndef ELIFE_SMART_H
+#define ELIFE_SMART_H
#include <Evas.h>
-Evas_Object *eenvaders_smart_new(Evas *e);
+Evas_Object *elife_smart_new(Evas *e);
#endif