Enlightenment CVS committal Author : davemds Project : e_modules Module : penguins
Dir : e_modules/penguins Modified Files: e_mod_main.c e_mod_main.h Log Message: Add mouse click support. Left click will make the penguins explode, right click open the configuration dialog. =================================================================== RCS file: /cvs/e/e_modules/penguins/e_mod_main.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -3 -r1.12 -r1.13 --- e_mod_main.c 12 Nov 2007 08:29:13 -0000 1.12 +++ e_mod_main.c 13 Nov 2007 15:57:57 -0000 1.13 @@ -11,7 +11,7 @@ #define MAX_FALLER_HEIGHT 300 #define FLYER_PROB 1000 // every n animation cicle -#define CUSTOM_PROB 600 // every n animation cicle +#define CUSTOM_PROB 600 // every n animation cicle (def: 600) //_RAND(prob) is true one time every prob #define _RAND(prob) ( ( random() % prob ) == 0 ) @@ -32,7 +32,10 @@ //static void _win_shape_change(void *data, E_Container_Shape *es, E_Container_Shape_Change ch); static void _reborn(Penguin *tux); static void _cb_custom_end(void *data, Evas_Object *o, const char *emi, const char *src); - +static void _cb_click_l (void *data, Evas_Object *o, const char *emi, const char *src); +static void _cb_click_r (void *data, Evas_Object *o, const char *emi, const char *src); +static void _cb_click_c (void *data, Evas_Object *o, const char *emi, const char *src); +static void _start_bombing_at(Penguin *tux, int at_y); /* public module routines. all modules must have these */ EAPI E_Module_Api e_modapi = { E_MODULE_API_VERSION, @@ -384,7 +387,7 @@ _load_action(pop, pop->conf->theme, "Faller", ID_FALLER); _load_action(pop, pop->conf->theme, "Climber", ID_CLIMBER); _load_action(pop, pop->conf->theme, "Floater", ID_FLOATER); - //_load_action(pop, pop->conf->theme, "Bomber"); + _load_action(pop, pop->conf->theme, "Bomber", ID_BOMBER); _load_action(pop, pop->conf->theme, "Splatter", ID_SPLATTER); _load_action(pop, pop->conf->theme, "Flyer", ID_FLYER); @@ -429,7 +432,11 @@ evas_object_image_alpha_set(o, 0.5); evas_object_color_set(o, pop->conf->alpha, pop->conf->alpha, pop->conf->alpha, pop->conf->alpha); - evas_object_pass_events_set(o, 1); + evas_object_pass_events_set(o, 0); + + edje_object_signal_callback_add(o,"click_l","penguins", _cb_click_l, tux); + edje_object_signal_callback_add(o,"click_r","penguins", _cb_click_r, tux); + edje_object_signal_callback_add(o,"click_c","penguins", _cb_click_c, tux); tux->obj = o; tux->pop = pop; @@ -443,6 +450,25 @@ } static void +_cb_click_l (void *data, Evas_Object *o, const char *emi, const char *src) +{ + Penguin *tux = data; + //printf("Left-click on TUX !!!\n"); + _start_bombing_at(tux, tux->y + tux->action->h); +} +static void +_cb_click_r (void *data, Evas_Object *o, const char *emi, const char *src) +{ + //printf("Right-click on TUX !!!\n"); + e_int_config_penguins_module(NULL, NULL); +} +static void +_cb_click_c (void *data, Evas_Object *o, const char *emi, const char *src) +{ + printf("Center-click on TUX !!!\n"); +} + +static void _reborn(Penguin *tux) { //printf("PENGUINS: Reborn :)\n"); @@ -796,13 +822,39 @@ evas_object_move(tux->obj,(int)tux->x,(int)tux->y); evas_object_show(tux->obj); } - +static void +_cb_bomber_end(void *data, Evas_Object *o, const char *emi, const char *src) +{ + edje_object_signal_callback_del(o,"bombing_done","edje", _cb_bomber_end); + _reborn((Penguin*)data); +} +static void +_start_bombing_at(Penguin *tux, int at_y) +{ + //printf("PENGUINS: Start bombing at %d...\n", at_y); + + if (tux->reverse) + edje_object_signal_emit(tux->obj, "start_bombing_left", "epenguins"); + else + edje_object_signal_emit(tux->obj, "start_bombing_right", "epenguins"); + + tux->x = tux->x + (tux->action->w /2); + tux->action = evas_hash_find(tux->pop->actions, "Bomber"); + tux->x = tux->x - (tux->action->w /2); + tux->y = at_y - tux->action->h; + + edje_object_signal_callback_add(tux->obj,"bombing_done","edje", _cb_bomber_end, tux); + evas_object_image_fill_set(tux->obj, 0, 0, tux->action->w, tux->action->h); + evas_object_resize(tux->obj, tux->action->w, tux->action->h); + evas_object_move(tux->obj,(int)tux->x,(int)tux->y); + +} static void _cb_custom_end (void *data, Evas_Object *o, const char *emi, const char *src) { Penguin* tux = data; - // printf("PENGUINS: Custom action end.\n"); + printf("PENGUINS: Custom action end.\n"); if (tux->r_count > 0) { if (tux->reverse) @@ -829,10 +881,14 @@ return; ran = random() % (tux->pop->custom_num); + ran=2; //!!!! + printf("START CUSTOM NUM %d RAN %d\n",tux->pop->custom_num, ran); + tux->custom = evas_list_nth(tux->pop->customs, ran); if (!tux->custom) return; + evas_object_resize(tux->obj, tux->custom->w, tux->custom->h); tux->y = at_y - tux->custom->h; @@ -842,6 +898,7 @@ tux->r_count = tux->custom->r_min + (random() % (tux->custom->r_max - tux->custom->r_min + 1)); tux->r_count --; + if (tux->reverse) edje_object_signal_emit(tux->obj, tux->custom->left_program_name, "epenguins"); else @@ -849,7 +906,7 @@ - //printf("START Custom Action n %d (%s) repeat: %d\n", ran, tux->custom->left_program_name, tux->r_count); + printf("START Custom Action n %d (%s) repeat: %d\n", ran, tux->custom->left_program_name, tux->r_count); edje_object_signal_callback_add(tux->obj,"custom_done","edje", _cb_custom_end, tux); =================================================================== RCS file: /cvs/e/e_modules/penguins/e_mod_main.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- e_mod_main.h 12 Nov 2007 21:17:53 -0000 1.4 +++ e_mod_main.h 13 Nov 2007 15:57:57 -0000 1.5 @@ -15,6 +15,7 @@ #define ID_FLOATER 4 #define ID_SPLATTER 5 #define ID_FLYER 6 +#define ID_BOMBER 7 typedef struct _Config Config; typedef struct _Population Population; ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs