Hi,
as it is not possible to use ewl in the module, I used the menu way ;)
It renders quite nice. I don't know if you want to add it in the
dropshadow module, or to let it as a separate patch, but here is my work...

-- 
Colin Pitrat

http://www.framasoft.net/
D�couvrez la signification du mot libert�.
--- e17_cvs/e17/apps/e/src/modules/dropshadow/Makefile.am	2005-05-09 00:34:44.000000000 +0200
+++ e17/apps/e/src/modules/dropshadow/Makefile.am	2005-06-12 12:01:07.537909592 +0200
@@ -6,6 +6,15 @@
 files_DATA = \
 module_icon.png \
 menu_icon_close.png \
+menu_icon_color.png \
+menu_icon_color_red.png \
+menu_icon_color_yellow.png \
+menu_icon_color_green.png \
+menu_icon_color_lightblue.png \
+menu_icon_color_blue.png \
+menu_icon_color_purple.png \
+menu_icon_color_black.png \
+menu_icon_color_white.png \
 menu_icon_dark.png \
 menu_icon_far.png \
 menu_icon_fuzzy.png \
--- e17_cvs/e17/apps/e/src/modules/dropshadow/e_mod_main.c	2005-05-06 08:22:22.000000000 +0200
+++ e17/apps/e/src/modules/dropshadow/e_mod_main.c	2005-06-12 12:00:09.424744136 +0200
@@ -13,6 +13,14 @@
 static Dropshadow *_ds_init(E_Module *m);
 static void        _ds_shutdown(Dropshadow *ds);
 static E_Menu     *_ds_config_menu_new(Dropshadow *ds);
+static void        _ds_menu_color_red(void *data, E_Menu *m, E_Menu_Item *mi);
+static void        _ds_menu_color_yellow(void *data, E_Menu *m, E_Menu_Item *mi);
+static void        _ds_menu_color_green(void *data, E_Menu *m, E_Menu_Item *mi);
+static void        _ds_menu_color_lightblue(void *data, E_Menu *m, E_Menu_Item *mi);
+static void        _ds_menu_color_blue(void *data, E_Menu *m, E_Menu_Item *mi);
+static void        _ds_menu_color_purple(void *data, E_Menu *m, E_Menu_Item *mi);
+static void        _ds_menu_color_black(void *data, E_Menu *m, E_Menu_Item *mi);
+static void        _ds_menu_color_white(void *data, E_Menu *m, E_Menu_Item *mi);
 static void        _ds_menu_very_fuzzy(void *data, E_Menu *m, E_Menu_Item *mi);
 static void        _ds_menu_fuzzy(void *data, E_Menu *m, E_Menu_Item *mi);
 static void        _ds_menu_medium(void *data, E_Menu *m, E_Menu_Item *mi);
@@ -47,6 +55,7 @@
 static void        _ds_shadow_recalc(Shadow *sh);
 static void        _ds_config_darkness_set(Dropshadow *ds, double v);
 static void        _ds_config_shadow_xy_set(Dropshadow *ds, int x, int y);
+static void        _ds_config_color_set(Dropshadow *ds, int r, int g, int b);
 static void        _ds_config_blur_set(Dropshadow *ds, int blur);
 static void        _ds_blur_init(Dropshadow *ds);
 static double      _ds_gauss_int(double x);
@@ -57,11 +66,11 @@
 static void        _ds_shpix_fill(Shpix *sp, int x, int y, int w, int h, unsigned char val);
 static void        _ds_shpix_blur(Shpix *sp, int x, int y, int w, int h, unsigned char *blur_lut, int blur_size);
 static void        _ds_shpix_blur_rects(Shpix *sp, Evas_List *rects, unsigned char *blur_lut, int blur_size);
-static void        _ds_shpix_object_set(Shpix *sp, Evas_Object *o, int x, int y, int w, int h);
+static void        _ds_shpix_object_set(Shpix *sp, Evas_Object *o, int x, int y, int w, int h, int r, int g, int b);
 static void        _ds_shared_free(Dropshadow *ds);
 static void        _ds_shared_use(Dropshadow *ds, Shadow *sh);
 static void        _ds_shared_unuse(Dropshadow *ds);
-static Shstore    *_ds_shstore_new(Shpix *sp, int x, int y, int w, int h);
+static Shstore    *_ds_shstore_new(Shpix *sp, int x, int y, int w, int h, int r, int g, int b);
 static void        _ds_shstore_free(Shstore *st);
 static void        _ds_shstore_object_set(Shstore *st, Evas_Object *o);
 static void        _ds_object_unset(Evas_Object *o);
@@ -173,6 +182,9 @@
    E_CONFIG_VAL(D, T, blur_size, INT);
    E_CONFIG_VAL(D, T, quality, INT);
    E_CONFIG_VAL(D, T, shadow_darkness, DOUBLE);
+   E_CONFIG_VAL(ds->conf_edd, Config, color.r, INT);
+   E_CONFIG_VAL(ds->conf_edd, Config, color.g, INT);
+   E_CONFIG_VAL(ds->conf_edd, Config, color.b, INT);
    
    ds->conf = e_config_domain_load("module.dropshadow", ds->conf_edd);
    if (!ds->conf)
@@ -183,6 +195,9 @@
 	ds->conf->blur_size = 10;
 	ds->conf->quality = 1;
 	ds->conf->shadow_darkness = 0.5;
+        ds->conf->color.r = 0;
+        ds->conf->color.g = 0;
+        ds->conf->color.b = 0;
      }
    /* FIXME: new shadow optimisations dont work with quality != 1 */
    ds->conf->quality = 1;
@@ -191,6 +206,9 @@
    E_CONFIG_LIMIT(ds->conf->blur_size, 1, 120);
    E_CONFIG_LIMIT(ds->conf->quality, 1, 10);
    E_CONFIG_LIMIT(ds->conf->shadow_darkness, 0.0, 1.0);
+   E_CONFIG_LIMIT(ds->conf->color.r, 0, 255);
+   E_CONFIG_LIMIT(ds->conf->color.g, 0, 255);
+   E_CONFIG_LIMIT(ds->conf->color.b, 0, 255);
 
    if (ds->conf->shadow_x >= ds->conf->blur_size)
      ds->conf->shadow_x = ds->conf->blur_size - 1;
@@ -250,11 +268,100 @@
 _ds_config_menu_new(Dropshadow *ds)
 {
    E_Menu *mn;
+   E_Menu *sub;
    E_Menu_Item *mi;
    char buf[4096];
    
    mn = e_menu_new();
+   sub = e_menu_new();
      
+   /*
+    * Color submenu
+    */
+   mi = e_menu_item_new(mn);
+   e_menu_item_label_set(mi, _("Color"));
+   snprintf(buf, sizeof(buf), "%s/menu_icon_color.png", e_module_dir_get(ds->module));
+   e_menu_item_icon_file_set(mi, buf);
+   e_menu_item_submenu_set(mi, sub);
+
+   mi = e_menu_item_new(sub);
+   e_menu_item_label_set(mi, _("Red"));
+   snprintf(buf, sizeof(buf), "%s/menu_icon_color_red.png", e_module_dir_get(ds->module));
+   e_menu_item_icon_file_set(mi, buf);
+   e_menu_item_radio_set(mi, 1);
+   e_menu_item_radio_group_set(mi, 1);
+   if (ds->conf->color.r == 255 && ds->conf->color.g == 0 && ds->conf->color.b == 0) e_menu_item_toggle_set(mi, 1);
+   e_menu_item_callback_set(mi, _ds_menu_color_red, ds);
+
+   mi = e_menu_item_new(sub);
+   e_menu_item_label_set(mi, _("Yellow"));
+   snprintf(buf, sizeof(buf), "%s/menu_icon_color_yellow.png", e_module_dir_get(ds->module));
+   e_menu_item_icon_file_set(mi, buf);
+   e_menu_item_radio_set(mi, 1);
+   e_menu_item_radio_group_set(mi, 1);
+   if (ds->conf->color.r == 255 && ds->conf->color.g == 255 && ds->conf->color.b == 0) e_menu_item_toggle_set(mi, 1);
+   e_menu_item_callback_set(mi, _ds_menu_color_yellow, ds);
+
+   mi = e_menu_item_new(sub);
+   e_menu_item_label_set(mi, _("Green"));
+   snprintf(buf, sizeof(buf), "%s/menu_icon_color_green.png", e_module_dir_get(ds->module));
+   e_menu_item_icon_file_set(mi, buf);
+   e_menu_item_radio_set(mi, 1);
+   e_menu_item_radio_group_set(mi, 1);
+   if (ds->conf->color.r == 0 && ds->conf->color.g == 255 && ds->conf->color.b == 0) e_menu_item_toggle_set(mi, 1);
+   e_menu_item_callback_set(mi, _ds_menu_color_green, ds);
+
+   mi = e_menu_item_new(sub);
+   e_menu_item_label_set(mi, _("Light Blue"));
+   snprintf(buf, sizeof(buf), "%s/menu_icon_color_lightblue.png", e_module_dir_get(ds->module));
+   e_menu_item_icon_file_set(mi, buf);
+   e_menu_item_radio_set(mi, 1);
+   e_menu_item_radio_group_set(mi, 1);
+   if (ds->conf->color.r == 0 && ds->conf->color.g == 255 && ds->conf->color.b == 255) e_menu_item_toggle_set(mi, 1);
+   e_menu_item_callback_set(mi, _ds_menu_color_lightblue, ds);
+
+   mi = e_menu_item_new(sub);
+   e_menu_item_label_set(mi, _("Blue"));
+   snprintf(buf, sizeof(buf), "%s/menu_icon_color_blue.png", e_module_dir_get(ds->module));
+   e_menu_item_icon_file_set(mi, buf);
+   e_menu_item_radio_set(mi, 1);
+   e_menu_item_radio_group_set(mi, 1);
+   if (ds->conf->color.r == 0 && ds->conf->color.g == 0 && ds->conf->color.b == 255) e_menu_item_toggle_set(mi, 1);
+   e_menu_item_callback_set(mi, _ds_menu_color_blue, ds);
+
+   mi = e_menu_item_new(sub);
+   e_menu_item_label_set(mi, _("Purple"));
+   snprintf(buf, sizeof(buf), "%s/menu_icon_color_purple.png", e_module_dir_get(ds->module));
+   e_menu_item_icon_file_set(mi, buf);
+   e_menu_item_radio_set(mi, 1);
+   e_menu_item_radio_group_set(mi, 1);
+   if (ds->conf->color.r == 255 && ds->conf->color.g == 0 && ds->conf->color.b == 255) e_menu_item_toggle_set(mi, 1);
+   e_menu_item_callback_set(mi, _ds_menu_color_purple, ds);
+
+   mi = e_menu_item_new(sub);
+   e_menu_item_label_set(mi, _("Black"));
+   snprintf(buf, sizeof(buf), "%s/menu_icon_color_black.png", e_module_dir_get(ds->module));
+   e_menu_item_icon_file_set(mi, buf);
+   e_menu_item_radio_set(mi, 1);
+   e_menu_item_radio_group_set(mi, 1);
+   if (ds->conf->color.r == 0 && ds->conf->color.g == 0 && ds->conf->color.b == 0) e_menu_item_toggle_set(mi, 1);
+   e_menu_item_callback_set(mi, _ds_menu_color_black, ds);
+
+   mi = e_menu_item_new(sub);
+   e_menu_item_label_set(mi, _("White"));
+   snprintf(buf, sizeof(buf), "%s/menu_icon_color_white.png", e_module_dir_get(ds->module));
+   e_menu_item_icon_file_set(mi, buf);
+   e_menu_item_radio_set(mi, 1);
+   e_menu_item_radio_group_set(mi, 1);
+   if (ds->conf->color.r == 255 && ds->conf->color.g == 255 && ds->conf->color.b == 255) e_menu_item_toggle_set(mi, 1);
+   e_menu_item_callback_set(mi, _ds_menu_color_white, ds);
+
+   /*
+    * Other items
+    */
+   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, _("Very Fuzzy"));
    snprintf(buf, sizeof(buf), "%s/menu_icon_very_fuzzy.png", e_module_dir_get(ds->module));
@@ -399,6 +506,78 @@
 }
 
 static void
+_ds_menu_color_red(void *data, E_Menu *m, E_Menu_Item *mi)
+{
+  Dropshadow *ds;
+  ds = data;
+
+  _ds_config_color_set(ds, 255, 0, 0);
+}
+
+static void
+_ds_menu_color_yellow(void *data, E_Menu *m, E_Menu_Item *mi)
+{
+  Dropshadow *ds;
+  ds = data;
+
+  _ds_config_color_set(ds, 255, 255, 0);
+}
+
+static void
+_ds_menu_color_green(void *data, E_Menu *m, E_Menu_Item *mi)
+{
+  Dropshadow *ds;
+  ds = data;
+
+  _ds_config_color_set(ds, 0, 255, 0);
+}
+
+static void
+_ds_menu_color_lightblue(void *data, E_Menu *m, E_Menu_Item *mi)
+{
+  Dropshadow *ds;
+  ds = data;
+
+  _ds_config_color_set(ds, 0, 255, 255);
+}
+
+static void
+_ds_menu_color_blue(void *data, E_Menu *m, E_Menu_Item *mi)
+{
+  Dropshadow *ds;
+  ds = data;
+
+  _ds_config_color_set(ds, 0, 0, 255);
+}
+
+static void
+_ds_menu_color_purple(void *data, E_Menu *m, E_Menu_Item *mi)
+{
+  Dropshadow *ds;
+  ds = data;
+
+  _ds_config_color_set(ds, 255, 0, 255);
+}
+
+static void
+_ds_menu_color_black(void *data, E_Menu *m, E_Menu_Item *mi)
+{
+  Dropshadow *ds;
+  ds = data;
+
+  _ds_config_color_set(ds, 0, 0, 0);
+}
+
+static void
+_ds_menu_color_white(void *data, E_Menu *m, E_Menu_Item *mi)
+{
+  Dropshadow *ds;
+  ds = data;
+
+  _ds_config_color_set(ds, 255, 255, 255);
+}
+
+static void
 _ds_menu_very_fuzzy(void *data, E_Menu *m, E_Menu_Item *mi)
 {
    Dropshadow *ds;
@@ -1160,7 +1339,7 @@
 		       if (sh->visible)
 			 evas_object_show(so->obj);
 		       _ds_shpix_object_set(sp, so->obj, 
-					    r->x, r->y, r->w, r->h);
+					    r->x, r->y, r->w, r->h, sh->ds->conf->color.r, sh->ds->conf->color.g, sh->ds->conf->color.b);
 		    }
 		  _ds_shpix_free(sp);
 		  
@@ -1347,6 +1526,28 @@
 }
 
 static void
+_ds_config_color_set(Dropshadow *ds, int r, int g, int b)
+{
+  Evas_List *l;
+  if (r < 0) r = 0; if (r > 255) r = 255;
+  if (g < 0) g = 0; if (g > 255) g = 255;
+  if (b < 0) b = 0; if (b > 255) b = 255;
+  if (ds->conf->color.r == r && ds->conf->color.g == g && ds->conf->color.b) return;
+
+  ds->conf->color.r = r; ds->conf->color.g = g; ds->conf->color.b = b;
+   for (l = ds->shadows; l; l = l->next)
+     {
+	Shadow *sh;
+	
+	sh = l->data;
+	_ds_shadow_obj_clear(sh);
+	_ds_shadow_shaperects(sh);
+     }
+
+  e_config_save_queue();
+}
+
+static void
 _ds_config_blur_set(Dropshadow *ds, int blur)
 {
    Evas_List *l;
@@ -1761,7 +1962,7 @@
 }
 
 static void
-_ds_shpix_object_set(Shpix *sp, Evas_Object *o, int x, int y, int w, int h)
+_ds_shpix_object_set(Shpix *sp, Evas_Object *o, int x, int y, int w, int h, int r, int g, int b)
 {
    unsigned char *p;
    unsigned int *pix2, *p2;
@@ -1801,7 +2002,7 @@
 	  {
 	     for (xx = 0; xx < w; xx++)
 	       {
-		  *p2 = ((*p) << 24);
+		  *p2 = (*p << 24) + (r << 16) + (g << 8) + b;
 		  p2++;
 		  p++;
 	       }
@@ -1835,7 +2036,11 @@
      {
 	Shpix *sp;
 	int shw, shh, bsz, shx, shy;
+        int r, g, b;
 	
+        r = sh->ds->conf->color.r;
+        g = sh->ds->conf->color.g;
+        b = sh->ds->conf->color.b;
 	shx = sh->ds->conf->shadow_x;
 	shy = sh->ds->conf->shadow_y;
 	shw = sh->w;
@@ -1894,19 +2099,19 @@
 		       ds->shared.shadow[0] = 
 			 _ds_shstore_new(sp,
 					 0, 0,
-					 shw + (bsz * 2), bsz - shy);
+					 shw + (bsz * 2), bsz - shy, r, g, b);
 		       ds->shared.shadow[1] = 
 			 _ds_shstore_new(sp,
 					 0, bsz - shy,
-					 bsz - shx, shh);
+					 bsz - shx, shh, r, g, b);
 		       ds->shared.shadow[2] = 
 			 _ds_shstore_new(sp,
 					 shw + bsz - shx, bsz - shy,
-					 bsz + shx, shh);
+					 bsz + shx, shh, r, g ,b);
 		       ds->shared.shadow[3] = 
 			 _ds_shstore_new(sp,
 					 0, bsz - shy + shh,
-					 shw + (bsz * 2), bsz + shy);
+					 shw + (bsz * 2), bsz + shy, r, g, b);
 		    }
 	       }
 	     _ds_shpix_free(sp);
@@ -1924,7 +2129,7 @@
 }
 
 static Shstore *
-_ds_shstore_new(Shpix *sp, int x, int y, int w, int h)
+_ds_shstore_new(Shpix *sp, int x, int y, int w, int h, int r, int g, int b)
 {
    Shstore *st;
    unsigned char *p;
@@ -1971,7 +2176,7 @@
      {
 	for (xx = 0; xx < w; xx++)
 	  {
-	     *p2 = ((*p) << 24);
+             *p2 = (*p << 24) + (r << 16) + (g << 8) + b;
 	     p2++;
 	     p++;
 	  }
--- e17_cvs/e17/apps/e/src/modules/dropshadow/e_mod_main.h	2005-04-21 07:13:46.000000000 +0200
+++ e17/apps/e/src/modules/dropshadow/e_mod_main.h	2005-06-12 12:01:50.946310512 +0200
@@ -28,6 +28,7 @@
    int blur_size;
    int quality;
    double shadow_darkness;
+   struct { int r, g, b; } color;
 };
 
 struct _Dropshadow

<<inline: menu_icon_color.png>>

<<inline: menu_icon_color_black.png>>

<<inline: menu_icon_color_blue.png>>

<<inline: menu_icon_color_green.png>>

<<inline: menu_icon_color_lightblue.png>>

<<inline: menu_icon_color_purple.png>>

<<inline: menu_icon_color_red.png>>

<<inline: menu_icon_color_white.png>>

<<inline: menu_icon_color_yellow.png>>

Reply via email to