diff options
author | Laurent Ghigonis <laurent@p1sec.com> | 2012-10-14 20:08:32 +0200 |
---|---|---|
committer | Laurent Ghigonis <laurent@p1sec.com> | 2012-10-14 20:08:32 +0200 |
commit | 5c273f97157291b7303da17e928663ff16ad9451 (patch) | |
tree | 1ef2d086a9e010ee1241a8f356b200f922e1b282 | |
parent | just so it compiles (diff) | |
download | glouglou-5c273f97157291b7303da17e928663ff16ad9451.tar.xz glouglou-5c273f97157291b7303da17e928663ff16ad9451.zip |
preliminary work on elife.
just compiles, does not run.
-rw-r--r-- | src/elife.c | 16 | ||||
-rw-r--r-- | src/elife_edje_external.c | 100 | ||||
-rw-r--r-- | src/elife_evas_smart.c | 331 | ||||
-rw-r--r-- | src/elife_evas_smart.h | 6 |
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 |