I added a 'storm' mode to the rain module including the needed graphics and adjusted config. Screenshot is here:
http://gefechtsdienst.de/uman/img/e_modules-storm.png I attached a patch and the three graphics files as I don't know if and how it's possible to add non-text files to a diff. Falko On Tue, Oct 18, 2005 at 09:11:48PM -0400, Christopher Michael wrote: > Enclosed is a new rain module by Ray Miller (kingrayray) for enclusion > into e_modules. Enjoy ! > > devilhorns
--- e17/apps/e_modules/src/modules/rain/e_mod_main.c 2005-10-19 23:51:36.000000000 +0200 +++ estorm/src/modules/rain/e_mod_main.c 2005-10-20 16:59:51.781096000 +0200 @@ -9,11 +9,14 @@ static int _rain_cb_animator(void *data); static void _rain_clouds_load(Rain *rain); static void _rain_drops_load(char type, Rain *rain); +static void _rain_storm_load(char type, Rain *rain); static void _rain_cb_density_sparse(void *data, E_Menu *m, E_Menu_Item *mi); static void _rain_cb_density_medium(void *data, E_Menu *m, E_Menu_Item *i); static void _rain_cb_density_dense(void *data, E_Menu *m, E_Menu_Item *mi); +static void _rain_cb_density_storm(void *data, E_Menu *m, E_Menu_Item *mi); static void _rain_cb_show_clouds(void *data, E_Menu *m, E_Menu_Item *mi); +static void _rain_cb_show_storm(void *data, E_Menu *m, E_Menu_Item *mi); /* public module routines. all modules must have these */ E_Module_Api e_modapi = @@ -90,6 +93,7 @@ E_CONFIG_VAL(D, T, cloud_count, INT); E_CONFIG_VAL(D, T, drop_count, INT); E_CONFIG_VAL(D, T, show_clouds, INT); + E_CONFIG_VAL(D, T, show_storm, INT); rain->conf = e_config_domain_load("module.rain", rain->conf_edd); if (!rain->conf) @@ -98,9 +102,12 @@ rain->conf->cloud_count = 10; rain->conf->drop_count = 60; rain->conf->show_clouds = 1; + rain->conf->show_storm = 0; } E_CONFIG_LIMIT(rain->conf->show_clouds, 0, 1); + + E_CONFIG_LIMIT(rain->conf->show_storm, 0, 1); managers = e_manager_list(); for (l = managers; l; l = l->next) @@ -121,9 +128,18 @@ evas_output_viewport_get(rain->canvas, NULL, NULL, &rain->width, &rain->height); if (rain->conf->show_clouds) _rain_clouds_load(rain); - _rain_drops_load('s', rain); - _rain_drops_load('m', rain); - _rain_drops_load('l', rain); + if (rain->conf->show_storm) + { + _rain_storm_load('s', rain); + _rain_storm_load('m', rain); + _rain_storm_load('l', rain); + } + else + { + _rain_drops_load('s', rain); + _rain_drops_load('m', rain); + _rain_drops_load('l', rain); + } rain->animator = ecore_animator_add(_rain_cb_animator, rain); @@ -202,6 +218,22 @@ e_menu_item_callback_set(mi, _rain_cb_density_dense, rain); mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, "Squall"); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 2); + if (rain->conf->cloud_count == 35) e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _rain_cb_density_storm, rain); + + mi = e_menu_item_new(mn); + e_menu_item_separator_set(mi, 1); + + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, "Storm"); + e_menu_item_check_set(mi, 1); + e_menu_item_toggle_set(mi, rain->conf->show_storm); + e_menu_item_callback_set(mi, _rain_cb_show_storm, rain); + + mi = e_menu_item_new(mn); e_menu_item_separator_set(mi, 1); mi = e_menu_item_new(mn); @@ -219,9 +251,18 @@ _rain_drops_free(rain); if (rain->conf->show_clouds) _rain_clouds_load(rain); - _rain_drops_load('s', rain); - _rain_drops_load('m', rain); - _rain_drops_load('l', rain); + if (rain->conf->show_storm) + { + _rain_storm_load('s', rain); + _rain_storm_load('m', rain); + _rain_storm_load('l', rain); + } + else + { + _rain_drops_load('s', rain); + _rain_drops_load('m', rain); + _rain_drops_load('l', rain); + } } static void _rain_cb_density_sparse(void *data, E_Menu *m, E_Menu_Item *mi) @@ -255,6 +296,25 @@ _rain_canvas_reset(rain); } +static void _rain_cb_density_storm(void *data, E_Menu *m, E_Menu_Item *mi) +{ + Rain *rain; + + rain = data; + rain->conf->cloud_count = 35; + rain->conf->drop_count = 250; + _rain_canvas_reset(rain); +} + +static void _rain_cb_show_storm(void *data, E_Menu *m, E_Menu_Item *mi) +{ + Rain *rain; + + rain = data; + rain->conf->show_storm = e_menu_item_toggle_get(mi); + _rain_canvas_reset(rain); +} + static void _rain_cb_show_clouds(void *data, E_Menu *m, E_Menu_Item *mi) { Rain *rain; @@ -293,6 +353,69 @@ } } +static void _rain_storm_load(char type, Rain *rain) +{ + Evas_Object *o; + Evas_Coord xx, yy, ww, hh; + char buf[4096]; + int tw, th, i; + Rain_Drop *drop; + + evas_output_viewport_get(rain->canvas, &xx, &yy, &ww, &hh); + snprintf(buf, sizeof(buf), PACKAGE_LIB_DIR "/e_modules/rain/storm-%c.png", type); + + o = evas_object_image_add(rain->canvas); + evas_object_image_file_set(o, buf, ""); + evas_object_image_size_get(o, &tw, &th); + + for (i = 0; i < rain->conf->drop_count / 3; i++) + { + Evas_Coord tx, ty; + + drop = malloc(sizeof(Rain_Drop)); + if (i != 0) + { + o = evas_object_image_add(rain->canvas); + evas_object_image_file_set(o, buf, ""); + } + evas_object_resize(o, tw, th); + evas_object_image_alpha_set(o, 1); + evas_object_image_fill_set(o, 0, 0, tw, th); + + tx = random() % ww; + ty = random() % hh; + evas_object_move(o, tx, ty); + evas_object_show(o); + drop->drop = o; + drop->start_time = ecore_time_get() + (double)(random() % (th * 10)) / (double) th; + switch (type) + { + case 's': + if (rain->conf->show_storm) + drop->speed = 3; + else + drop->speed = 1; + break; + case 'm': + if (rain->conf->show_storm) + drop->speed = 4; + else + drop->speed = 2; + break; + case 'l': + if (rain->conf->show_storm) + drop->speed = 5; + else + drop->speed = 3; + break; + } + rain->drops = evas_list_append(rain->drops, drop); + } + + + +} + static void _rain_drops_load(char type, Rain *rain) { Evas_Object *o; @@ -352,20 +475,41 @@ rain = data; next = rain->drops; - while (next) - { - Rain_Drop *drop; - Evas_Coord x, y; - - drop = next->data; - d = ecore_time_get() - drop->start_time; - y = 300 * d * drop->speed; - evas_object_geometry_get(drop->drop, &x, NULL, NULL, NULL); - if (y > rain->height) - drop->start_time = ecore_time_get() + (double) (random() % 600) / (double) 600; - evas_object_move(drop->drop, x, y); - - next = evas_list_next(next); - } - return 1; -} + if (rain->conf->show_storm) + { + while (next) + { + Rain_Drop *drop; + Evas_Coord x, y; + + drop = next->data; + d = ecore_time_get() - drop->start_time; + x = 300 * d * drop->speed; + evas_object_geometry_get(drop->drop, NULL, &y, NULL, NULL); + if (x > rain->width) + drop->start_time = ecore_time_get() + (double) (random() % 600) / (double) 600; + evas_object_move(drop->drop, x, y); + + next = evas_list_next(next); + } + return 1; + } + else + { + while (next) + { + Rain_Drop *drop; + Evas_Coord x, y; + + drop = next->data; + d = ecore_time_get() - drop->start_time; + y = 300 * d * drop->speed; + evas_object_geometry_get(drop->drop, &x, NULL, NULL, NULL); + if (y > rain->height) + drop->start_time = ecore_time_get() + (double) (random() % 600) / (double) 600; + evas_object_move(drop->drop, x, y); + + next = evas_list_next(next); + } + return 1;} + } --- e17/apps/e_modules/src/modules/rain/Makefile.am 2005-10-19 23:51:36.000000000 +0200 +++ estorm/src/modules/rain/Makefile.am 2005-10-20 17:11:19.904101000 +0200 @@ -7,6 +7,9 @@ drop-s.png \ drop-m.png \ drop-l.png \ +storm-s.png \ +storm-m.png \ +storm-l.png \ module_icon.png --- e17/apps/e_modules/src/modules/rain/e_mod_main.h 2005-10-19 23:51:36.000000000 +0200 +++ estorm/src/modules/rain/e_mod_main.h 2005-10-20 16:10:29.263950250 +0200 @@ -10,6 +10,7 @@ int cloud_count; int drop_count; int show_clouds; + int show_storm; }; struct _Rain
storm-l.png
Description: PNG image
storm-m.png
Description: PNG image
storm-s.png
Description: PNG image