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

Attachment: storm-l.png
Description: PNG image

Attachment: storm-m.png
Description: PNG image

Attachment: storm-s.png
Description: PNG image

Reply via email to