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>>
