fix up config code so i can do lists and structs etc.

SVN revision: 12357
This commit is contained in:
Carsten Haitzler 2004-12-05 07:43:51 +00:00
parent 35ad8eb192
commit 7562a08b5a
12 changed files with 358 additions and 485 deletions

View File

@ -12,8 +12,8 @@ e_canvas_add(Ecore_Evas *ee)
_e_canvases = evas_list_prepend(_e_canvases, ee);
e = ecore_evas_get(ee);
evas_image_cache_set(e, e_config_val_image_cache * 1024);
evas_font_cache_set(e, e_config_val_font_cache * 1024);
evas_image_cache_set(e, e_config->image_cache * 1024);
evas_font_cache_set(e, e_config->font_cache * 1024);
// evas_image_cache_flush(e);
// evas_image_cache_reload(e);
}
@ -36,8 +36,8 @@ e_canvas_recache(void)
ee = l->data;
e = ecore_evas_get(ee);
evas_image_cache_set(e, e_config_val_image_cache * 1024);
evas_font_cache_set(e, e_config_val_font_cache * 1024);
evas_image_cache_set(e, e_config->image_cache * 1024);
evas_font_cache_set(e, e_config->font_cache * 1024);
}
}

View File

@ -11,125 +11,67 @@
#define DEF_MENUCLICK 0.25
#endif
char *e_config_val_desktop_default_background = NULL;
double e_config_val_menus_scroll_speed = 1000.0;
double e_config_val_menus_fast_mouse_move_thresthold = 500.0;
double e_config_val_menus_click_drag_timeout = DEF_MENUCLICK;
double e_config_val_framerate = 30.0;
int e_config_val_image_cache = 2048;
int e_config_val_font_cache = 512;
E_Config *e_config = NULL;
/* local subsystem functions */
static void _e_config_save_cb(void *data);
static int _e_config_listener_desktop_default_background(const char *key, const Ecore_Config_Type type, const int tag, void *data);
static int _e_config_listener_menus_scroll_speed(const char *key, const Ecore_Config_Type type, const int tag, void *data);
static int _e_config_listener_menus_fast_mouse_move_threshold(const char *key, const Ecore_Config_Type type, const int tag, void *data);
static int _e_config_listener_menus_click_drag_timeout(const char *key, const Ecore_Config_Type type, const int tag, void *data);
static int _e_config_listener_framerate(const char *key, const Ecore_Config_Type type, const int tag, void *data);
static int _e_config_listener_image_cache(const char *key, const Ecore_Config_Type type, const int tag, void *data);
static int _e_config_listener_font_cache(const char *key, const Ecore_Config_Type type, const int tag, void *data);
/* local subsystem globals */
static Ecore_Job *_e_config_save_job = NULL;
static E_Config_DD *_e_config_edd = NULL;
/* externally accessible functions */
int
e_config_init(void)
{
int ret;
ecore_config_init("e");
ecore_config_string_create
("e.desktop.default.background",
PACKAGE_DATA_DIR"/data/themes/default.eet",
'b', "default-background",
"The default background for desktops without a custom background");
ecore_config_float_create_bound
("e.menus.scroll_speed",
1000.0, 1.0, 20000.0, 10.0,
0, "menus-scroll-speed",
"Pixels per second menus scroll around the screen");
ecore_config_float_create_bound
("e.menus.fast_mouse_move_threshold",
300.0, 1.0, 2000.0, 1.0,
0, "menus-scroll-speed",
"Pixels per second menus scroll around the screen");
ecore_config_float_create_bound
("e.menus.click_drag_timeout",
DEF_MENUCLICK, 0.0, 10.0, 0.01,
0, "menus-click-drag-timeout",
"Seconds after a mouse press when a release will not hide the menu");
ecore_config_float_create_bound
("e.framerate",
30.0, 1.0, 200.0, 0.1,
0, "framerate",
"A hint at the framerate (in frames per second) Enlightenment should try and animate at");
ecore_config_int_create_bound
("e.image-cache",
2048, 0, 32768, 1,
0, "image-cache",
"The mount of memory (in Kb) to use as a sepculative image cache");
ecore_config_int_create_bound
("e.font-cache",
512, 0, 4096, 1,
0, "font-cache",
"The mount of memory (in Kb) to use as a sepculative font cache");
ecore_config_load();
ret = ecore_config_args_parse();
e_config_val_desktop_default_background =
ecore_config_string_get("e.desktop.default.background");
ecore_config_listen("e.desktop.default.background",
"e.desktop.default.background",
_e_config_listener_desktop_default_background,
0, NULL);
e_config_val_menus_scroll_speed =
ecore_config_float_get("e.menus.scroll_speed");
ecore_config_listen("e.menus.scroll_speed",
"e.menus.scroll_speed",
_e_config_listener_menus_scroll_speed,
0, NULL);
e_config_val_menus_fast_mouse_move_thresthold =
ecore_config_float_get("e.menus.fast_mouse_move_threshold");
ecore_config_listen("e.menus.fast_mouse_move_threshold",
"e.menus.fast_mouse_move_threshold",
_e_config_listener_menus_fast_mouse_move_threshold,
0, NULL);
e_config_val_menus_click_drag_timeout =
ecore_config_float_get("e.menus.click_drag_timeout");
ecore_config_listen("e.menus.click_drag_timeout",
"e.menus.click_drag_timeout",
_e_config_listener_menus_click_drag_timeout,
0, NULL);
e_config_val_framerate =
ecore_config_float_get("e.framerate");
if (e_config_val_framerate <= 0.0) e_config_val_framerate = 30.0;
ecore_config_listen("e.framerate",
"e.framerate",
_e_config_listener_framerate,
0, NULL);
e_config_val_image_cache =
ecore_config_int_get("e.image-cache");
ecore_config_listen("e.image-cache",
"e.image-cache",
_e_config_listener_image_cache,
0, NULL);
e_config_val_font_cache =
ecore_config_int_get("e.font-cache");
ecore_config_listen("e.font-cache",
"e.font-cache",
_e_config_listener_font_cache,
0, NULL);
_e_config_edd = E_CONFIG_DD_NEW("E_Config", E_Config);
#undef T
#undef D
#define T E_Config
#define D _e_config_edd
E_CONFIG_VAL(D, T, desktop_default_background, STR);
E_CONFIG_VAL(D, T, menus_scroll_speed, DOUBLE);
E_CONFIG_VAL(D, T, menus_fast_mouse_move_thresthold, DOUBLE);
E_CONFIG_VAL(D, T, menus_click_drag_timeout, DOUBLE);
E_CONFIG_VAL(D, T, framerate, DOUBLE);
E_CONFIG_VAL(D, T, image_cache, INT);
E_CONFIG_VAL(D, T, font_cache, INT);
e_config = e_config_domain_load("e", _e_config_edd);
if (!e_config) e_config = E_NEW(E_Config, 1);
if (e_config)
{
e_config->desktop_default_background = strdup(PACKAGE_DATA_DIR"/data/themes/default.eet");
e_config->menus_scroll_speed = 1000.0;
e_config->menus_fast_mouse_move_thresthold = 300.0;
e_config->menus_click_drag_timeout = DEF_MENUCLICK;
e_config->framerate = 30.0;
e_config->image_cache = 2048;
e_config->font_cache = 512;
}
else
return 0;
E_CONFIG_LIMIT(e_config->menus_scroll_speed, 1.0, 20000.0);
E_CONFIG_LIMIT(e_config->menus_fast_mouse_move_thresthold, 1.0, 2000.0);
E_CONFIG_LIMIT(e_config->menus_click_drag_timeout, 0.0, 10.0);
E_CONFIG_LIMIT(e_config->framerate, 1.0, 200.0);
E_CONFIG_LIMIT(e_config->image_cache, 0, 256 * 1024);
E_CONFIG_LIMIT(e_config->font_cache, 0, 32 * 1024);
return 1;
}
int
e_config_shutdown(void)
{
/* FIXME: unset listeners */
if (e_config)
{
E_FREE(e_config->desktop_default_background);
E_FREE(e_config);
}
if (_e_config_edd)
{
E_CONFIG_DD_FREE(_e_config_edd);
}
return 1;
}
@ -141,7 +83,7 @@ e_config_save(void)
ecore_job_del(_e_config_save_job);
_e_config_save_job = NULL;
}
return ecore_config_save();
return e_config_domain_save("e", _e_config_edd, e_config);
}
void
@ -151,98 +93,53 @@ e_config_save_queue(void)
_e_config_save_job = ecore_job_add(_e_config_save_cb, NULL);
}
void *
e_config_domain_load(char *domain, E_Config_DD *edd)
{
Eet_File *ef;
char buf[4096];
char *homedir;
void *data = NULL;
homedir = e_user_homedir_get();
snprintf(buf, sizeof(buf), "%s/.e/e/config/%s.cfg", homedir, domain);
E_FREE(homedir);
ef = eet_open(buf, EET_FILE_MODE_READ);
if (ef)
{
data = eet_data_read(ef, edd, "config");
eet_close(ef);
}
return data;
}
int
e_config_domain_save(char *domain, E_Config_DD *edd, void *data)
{
Eet_File *ef;
char buf[4096];
char *homedir;
int ok = 0;
/* FIXME: check for other sessions fo E runing */
homedir = e_user_homedir_get();
snprintf(buf, sizeof(buf), "%s/.e/e/config/%s.cfg", homedir, domain);
E_FREE(homedir);
ef = eet_open(buf, EET_FILE_MODE_WRITE);
if (ef)
{
ok = eet_data_write(ef, edd, "config", data, 0);
eet_close(ef);
}
return ok;
}
/* local subsystem functions */
static void
_e_config_save_cb(void *data)
{
_e_config_save_job = NULL;
e_module_save_all();
e_config_save();
}
static int
_e_config_listener_desktop_default_background(const char *key, const Ecore_Config_Type type, const int tag, void *data)
{
Evas_List *managers, *l;
if (e_config_val_desktop_default_background)
free(e_config_val_desktop_default_background);
e_config_val_desktop_default_background =
ecore_config_string_get("e.desktop.default.background");
managers = e_manager_list();
for (l = managers; l; l = l->next)
{
Evas_List *ll;
E_Manager *man;
man = l->data;
for (ll = man->containers; ll; ll = ll->next)
{
E_Container *con;
con = ll->data;
e_container_bg_reconfigure(con);
}
}
return 1;
}
static int
_e_config_listener_menus_scroll_speed(const char *key, const Ecore_Config_Type type, const int tag, void *data)
{
e_config_val_menus_scroll_speed =
ecore_config_float_get("e.menus.scroll_speed");
return 1;
}
static int
_e_config_listener_menus_fast_mouse_move_threshold(const char *key, const Ecore_Config_Type type, const int tag, void *data)
{
e_config_val_menus_fast_mouse_move_thresthold =
ecore_config_float_get("e.menus.fast_mouse_move_threshold");
return 1;
}
static int
_e_config_listener_menus_click_drag_timeout(const char *key, const Ecore_Config_Type type, const int tag, void *data)
{
e_config_val_menus_click_drag_timeout =
ecore_config_float_get("e.menus.click_drag_timeout");
return 1;
}
static int
_e_config_listener_framerate(const char *key, const Ecore_Config_Type type, const int tag, void *data)
{
e_config_val_framerate =
ecore_config_float_get("e.framerate");
if (e_config_val_framerate <= 0.0) e_config_val_framerate = 30.0;
edje_frametime_set(1.0 / e_config_val_framerate);
return 1;
}
static int
_e_config_listener_image_cache(const char *key, const Ecore_Config_Type type, const int tag, void *data)
{
e_config_val_image_cache =
ecore_config_int_get("e.image-cache");
ecore_config_listen("e.image-cache",
"e.image-cache",
_e_config_listener_image_cache,
0, NULL);
e_canvas_recache();
return 1;
}
static int
_e_config_listener_font_cache(const char *key, const Ecore_Config_Type type, const int tag, void *data)
{
e_config_val_font_cache =
ecore_config_int_get("e.font-cache");
ecore_config_listen("e.font-cache",
"e.font-cache",
_e_config_listener_font_cache,
0, NULL);
e_canvas_recache();
return 1;
e_config_domain_save("e", _e_config_edd, e_config);
_e_config_save_job = NULL;
}

View File

@ -1,18 +1,63 @@
#ifndef E_CONFIG_H
#define E_CONFIG_H
typedef struct _E_Config E_Config;
typedef Eet_Data_Descriptor E_Config_DD;
struct _E_Config
{
char *desktop_default_background;
double menus_scroll_speed;
double menus_fast_mouse_move_thresthold;
double menus_click_drag_timeout;
double framerate;
int image_cache;
int font_cache;
};
#define E_CONFIG_DD_NEW(str, typ) \
eet_data_descriptor_new(str, sizeof(typ), \
(void *(*) (void *))evas_list_next, \
(void *(*) (void *, void *))evas_list_append, \
(void *(*) (void *))evas_list_data, \
(void *(*) (void *))evas_list_free, \
(void (*) (void *, int (*) (void *, const char *, void *, void *), void *))evas_hash_foreach, \
(void *(*) (void *, const char *, void *))evas_hash_add, \
(void (*) (void *))evas_hash_free)
#define E_CONFIG_DD_FREE(eed) \
if (eed) { eet_data_descriptor_free((eed)); (eed) = NULL; }
#define E_CONFIG_VAL(edd, type, member, dtype) \
EET_DATA_DESCRIPTOR_ADD_BASIC(edd, type, #member, member, dtype)
#define E_CONFIG_SUB(edd, type, member, eddtype) \
EET_DATA_DESCRIPTOR_ADD_SUB(edd, type, #member, member, eddtype)
#define E_CONFIG_LIST(edd, type, member, eddtype) \
EET_DATA_DESCRIPTOR_ADD_LIST(edd, type, #member, member, eddtype)
#define CHAR EET_T_CHAR
#define SHORT EET_T_SHORT
#define INT EET_T_INT
#define LL EET_T_LONG_LONG
#define FLOAT EET_T_FLOAT
#define DOUBLE EET_T_DOUBLE
#define UCHAR EET_T_UCHAR
#define USHORT EET_T_USHORT
#define UINT EET_T_UINT
#define ULL EET_T_ULONG_LONG
#define STR EET_T_STRING
#define E_CONFIG_LIMIT(v, min, max) \
{if (v > max) v = max; else if (v < min) v = min;}
EAPI int e_config_init(void);
EAPI int e_config_shutdown(void);
EAPI void *e_config_domain_load(char *domain, E_Config_DD *edd);
EAPI int e_config_domain_save(char *domain, E_Config_DD *edd, void *data);
EAPI int e_config_save(void);
EAPI void e_config_save_queue(void);
extern EAPI char *e_config_val_desktop_default_background;
extern EAPI double e_config_val_menus_scroll_speed;
extern EAPI double e_config_val_menus_fast_mouse_move_thresthold;
extern EAPI double e_config_val_menus_click_drag_timeout;
extern EAPI double e_config_val_framerate;
extern EAPI int e_config_val_image_cache;
extern EAPI int e_config_val_font_cache;
extern EAPI E_Config *e_config;
#endif

View File

@ -77,7 +77,7 @@ e_container_new(E_Manager *man)
evas_object_move(o, 0, 0);
evas_object_resize(o, con->w, con->h);
edje_object_file_set(o,
e_config_val_desktop_default_background,
e_config->desktop_default_background,
"desktop/background");
evas_object_show(o);
@ -171,7 +171,7 @@ e_container_bg_reconfigure(E_Container *con)
o = con->bg_object;
evas_object_hide(o);
edje_object_file_set(o,
e_config_val_desktop_default_background,
e_config->desktop_default_background,
"desktop/background");
evas_object_layer_set(o, -1);
evas_object_show(o);

View File

@ -171,32 +171,33 @@ _e_ipc_cb_client_data(void *data, int type, void *event)
break;
case E_IPC_OP_BG_SET:
{
char *file;
char *valstr;
Evas_List *cl;
int cont;
file = malloc(e->size + 1);
file[e->size] = 0;
memcpy(file, e->data, e->size);
valstr=strdup("desktop/background");
cl=edje_file_collection_list(file);
cont=1;
while(cl && cont)
{
if(!strcmp(cl->data,valstr))
{
cont=0;
ecore_config_string_set("e.desktop.default.background", file);
}
else
cl++;
}
edje_file_collection_list_free(cl);
free(valstr);
free(file);
char *file;
char *valstr;
Evas_List *managers, *l;
int cont;
file = malloc(e->size + 1);
file[e->size] = 0;
memcpy(file, e->data, e->size);
E_FREE(e_config->desktop_default_background);
e_config->desktop_default_background = file;
managers = e_manager_list();
for (l = managers; l; l = l->next)
{
Evas_List *ll;
E_Manager *man;
man = l->data;
for (ll = man->containers; ll; ll = ll->next)
{
E_Container *con;
con = ll->data;
e_container_bg_reconfigure(con);
}
}
e_config_save_queue();
}
default:
break;

View File

@ -161,8 +161,8 @@ main(int argc, char **argv)
}
_e_main_shutdown_push(e_config_shutdown);
/* setup edje to animate @ e_config_val_framerate frames per sec. */
edje_frametime_set(1.0 / e_config_val_framerate);
/* setup edje to animate @ e_config->framerate frames per sec. */
edje_frametime_set(1.0 / e_config->framerate);
e_canvas_recache();
/* setup init status window/screen */
@ -375,7 +375,8 @@ _e_main_dirs_init(void)
"%s/.e/e/applications/all",
"%s/.e/e/applications/favorite",
"%s/.e/e/applications/bar",
"%s/.e/e/modules"
"%s/.e/e/modules",
"%s/.e/e/config"
};
int i;

View File

@ -1913,7 +1913,7 @@ _e_menu_cb_mouse_up(void *data, int type, void *event)
if (ev->win != _e_menu_win) return 1;
t = ecore_time_get();
if ((_e_menu_activate_time != 0.0) &&
((t - _e_menu_activate_time) < e_config_val_menus_click_drag_timeout))
((t - _e_menu_activate_time) < e_config->menus_click_drag_timeout))
return 1;
ret = _e_menu_active_call();
if (ret == 1)
@ -1938,7 +1938,7 @@ _e_menu_cb_mouse_move(void *data, int type, void *event)
ev = event;
if (ev->win != _e_menu_win) return 1;
fast_move_threshold = e_config_val_menus_fast_mouse_move_thresthold;
fast_move_threshold = e_config->menus_fast_mouse_move_thresthold;
dx = ev->x - _e_menu_x;
dy = ev->y - _e_menu_y;
d = (dx * dx) + (dy * dy);
@ -2023,7 +2023,7 @@ _e_menu_cb_scroll_timer(void *data)
double spd;
t = ecore_time_get();
spd = e_config_val_menus_scroll_speed;
spd = e_config->menus_scroll_speed;
dt = t - _e_menu_scroll_start;
_e_menu_scroll_start = t;
dx = 0;

View File

@ -34,18 +34,18 @@ static int reply_expect = 0;
#define SIMPLE_STR_REQ 1
#define FULL_FUNC 2
#define REQ(opt, desc, ipc, rep) {opt, desc, 0, rep, SIMPLE_REQ, ipc, NULL}
#define STR(opt, desc, ipc, rep) {opt, desc, 1, rep, SIMPLE_STR_REQ, ipc, NULL}
#define FNC(opt, desc, param, fn, rep) {opt, desc, param, rep, SIMPLE_FUNC, 0, fn}
#define OREQ(opt, desc, ipc, rep) {opt, desc, 0, rep, SIMPLE_REQ, ipc, NULL}
#define OSTR(opt, desc, ipc, rep) {opt, desc, 1, rep, SIMPLE_STR_REQ, ipc, NULL}
#define OFNC(opt, desc, param, fn, rep) {opt, desc, param, rep, SIMPLE_FUNC, 0, fn}
E_IPC_Opt_Handler handlers[] =
{
STR("-module-load", "Load module OPT1 into memory", E_IPC_OP_MODULE_LOAD, 0),
STR("-module-unload", "Unload (and disable) module OPT1 from memory", E_IPC_OP_MODULE_UNLOAD, 0),
STR("-module-enable", "Enable module OPT1 if not enabled", E_IPC_OP_MODULE_ENABLE, 0),
STR("-module-disable", "Disable module OPT1 if not disabled", E_IPC_OP_MODULE_DISABLE, 0),
REQ("-module-list", "List all loaded modules and their states", E_IPC_OP_MODULE_LIST, 1),
STR("-bg-set", "Set the background edje file to be OPT1", E_IPC_OP_BG_SET, 0)
OSTR("-module-load", "Load module OPT1 into memory", E_IPC_OP_MODULE_LOAD, 0),
OSTR("-module-unload", "Unload (and disable) module OPT1 from memory", E_IPC_OP_MODULE_UNLOAD, 0),
OSTR("-module-enable", "Enable module OPT1 if not enabled", E_IPC_OP_MODULE_ENABLE, 0),
OSTR("-module-disable", "Disable module OPT1 if not disabled", E_IPC_OP_MODULE_DISABLE, 0),
OREQ("-module-list", "List all loaded modules and their states", E_IPC_OP_MODULE_LIST, 1),
OSTR("-bg-set", "Set the background edje file to be OPT1", E_IPC_OP_BG_SET, 0)
};
/* externally accessible functions */

View File

@ -3,7 +3,7 @@
/* TODO List:
*
* fix up a better default x and y
* should support proepr resize and move handles in the edje.
*
*/
@ -19,8 +19,6 @@ static void _clock_cb_face_down(void *data, Evas *e, Evas_Object *obj, void *
static void _clock_cb_face_up(void *data, Evas *e, Evas_Object *obj, void *event_info);
static void _clock_cb_face_move(void *data, Evas *e, Evas_Object *obj, void *event_info);
char *_clock_module_dir;
/* public module routines. all modules must have these */
void *
init(E_Module *m)
@ -69,10 +67,7 @@ save(E_Module *m)
Clock *e;
e = m->data;
ecore_config_int_set("e.module.clock.x", e->face->fx);
ecore_config_int_set("e.module.clock.y", e->face->fy);
ecore_config_int_set("e.module.clock.width", e->face->fw);
e_config_save_queue();
e_config_domain_save("module.clock", e->conf_edd, e->conf);
return 1;
}
@ -96,32 +91,35 @@ about(E_Module *m)
}
/* module private routines */
static
Clock *_clock_init(E_Module *m)
static Clock *
_clock_init(E_Module *m)
{
Clock *e;
char buf[4096];
Evas_List *managers, *l, *l2;
e = calloc(1, sizeof(Clock));
if (!e) return NULL;
ecore_config_int_create
("e.module.clock.x", 50, 0, "",
"Clock module: X start position");
ecore_config_int_create
("e.module.clock.y", 50, 0, "",
"Clock module: Y start position");
ecore_config_int_create
("e.module.clock.width", 64, 0, "",
"Clock module: Start width");
e->conf_edd = E_CONFIG_DD_NEW("Clock_Config", Config);
#undef T
#undef D
#define T Config
#define D e->conf_edd
E_CONFIG_VAL(D, T, width, INT);
E_CONFIG_VAL(D, T, x, DOUBLE);
E_CONFIG_VAL(D, T, y, DOUBLE);
ecore_config_load();
e->conf.width = ecore_config_int_get("e.module.clock.width");
e->conf.x = ecore_config_int_get("e.module.clock.x");
e->conf.y = ecore_config_int_get("e.module.clock.y");
_clock_module_dir = e_module_dir_get(m);
e->conf = e_config_domain_load("module.clock", e->conf_edd);
if (!e->conf)
{
e->conf = E_NEW(Config, 1);
e->conf->width = 64;
e->conf->x = 0.0;
e->conf->y = 1.0;
}
E_CONFIG_LIMIT(e->conf->width, 2, 256);
E_CONFIG_LIMIT(e->conf->x, 0.0, 1.0);
E_CONFIG_LIMIT(e->conf->y, 0.0, 1.0);
managers = e_manager_list();
for (l = managers; l; l = l->next)
@ -152,6 +150,9 @@ Clock *_clock_init(E_Module *m)
static void
_clock_shutdown(Clock *e)
{
free(e->conf);
E_CONFIG_DD_FREE(e->conf_edd);
_clock_face_free(e->face);
free(e);
}
@ -190,16 +191,15 @@ _clock_face_init(Clock_Face *ef)
Evas_List *l;
Evas_Coord ww, hh, bw, bh;
Evas_Object *o;
char buf[4096];
ef->fx = ef->clock->conf.x;
ef->fy = ef->clock->conf.y;
evas_output_viewport_get(ef->evas, NULL, NULL, &ww, &hh);
ef->fx = ef->clock->conf->x * (ww - ef->clock->conf->width);
ef->fy = ef->clock->conf->y * (hh - ef->clock->conf->width);
evas_event_freeze(ef->evas);
o = edje_object_add(ef->evas);
ef->clock_object = o;
snprintf(buf, sizeof(buf), "%s/default.eet", _clock_module_dir);
edje_object_file_set(o,
/* FIXME: "default.eet" needs to come from conf */
e_path_find(path_themes, "default.eet"),
@ -237,20 +237,21 @@ _clock_face_free(Clock_Face *ef)
static void
_clock_face_reconfigure(Clock_Face *ef)
{
Evas_Coord minw, minh, maxw, maxh;
Evas_Coord minw, minh, maxw, maxh, ww, hh;
edje_object_size_min_calc(ef->clock_object, &minw, &maxh);
edje_object_size_max_get(ef->clock_object, &maxw, &minh);
ef->fx = ef->clock->conf.x;
ef->fy = ef->clock->conf.y;
ef->fw = ef->clock->conf.width;
evas_output_viewport_get(ef->evas, NULL, NULL, &ww, &hh);
ef->fx = ef->clock->conf->x * (ww - ef->clock->conf->width);
ef->fy = ef->clock->conf->y * (hh - ef->clock->conf->width);
ef->fw = ef->clock->conf->width;
ef->minsize = minw;
ef->maxsize = maxw;
evas_object_move(ef->clock_object, ef->clock->conf.x, ef->clock->conf.y);
evas_object_resize(ef->clock_object, ef->clock->conf.width, ef->clock->conf.width);
evas_object_move(ef->event_object, ef->clock->conf.x, ef->clock->conf.y);
evas_object_resize(ef->event_object, ef->clock->conf.width, ef->clock->conf.width);
evas_object_move(ef->clock_object, ef->fx, ef->fy);
evas_object_resize(ef->clock_object, ef->clock->conf->width, ef->clock->conf->width);
evas_object_move(ef->event_object, ef->fx, ef->fy);
evas_object_resize(ef->event_object, ef->clock->conf->width, ef->clock->conf->width);
}
static void
@ -284,11 +285,16 @@ _clock_cb_face_up(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
Evas_Event_Mouse_Up *ev;
Clock_Face *ef;
Evas_Coord ww, hh;
ev = event_info;
ef = data;
ef->move = 0;
ef->resize = 0;
evas_output_viewport_get(ef->evas, NULL, NULL, &ww, &hh);
ef->clock->conf->x = (double)ef->fx / (double)(ww - ef->clock->conf->width);
ef->clock->conf->y = (double)ef->fy / (double)(hh - ef->clock->conf->width);
e_config_save_queue();
}
static void
@ -297,6 +303,7 @@ _clock_cb_face_move(void *data, Evas *e, Evas_Object *obj, void *event_info)
Evas_Event_Mouse_Move *ev;
Clock_Face *ef;
Evas_Coord x, y, w, h, cx, cy, sw, sh;
evas_pointer_canvas_xy_get(e, &cx, &cy);
evas_output_viewport_get(e, NULL, NULL, &sw, &sh);

View File

@ -1,17 +1,23 @@
#ifndef E_MOD_MAIN_H
#define E_MOD_MAIN_H
typedef struct _Config Config;
typedef struct _Clock Clock;
typedef struct _Clock_Face Clock_Face;
struct _Config
{
int width;
double x, y;
};
struct _Clock
{
E_Menu *config_menu;
Clock_Face *face;
struct {
int width;
int x, y;
} conf;
E_Config_DD *conf_edd;
Config *conf;
};
struct _Clock_Face

View File

@ -4,7 +4,6 @@
/* TODO List:
*
* * bug in shadow_x < 0 and shadow_y < 0 needs to be fixed (not urgent though)
* * bug in ecore_config ? when we change shadow darkness in examine, _ds_config_listen_shadow_darkness does not get called - only when we change other values like x, y, blur and when it gets called we are not getting the value set in examine - always getting 0.5
* * add alpha-pixel only pixel space to image objects in evas and make use of it to save cpu and ram
* * when blurring ALSO cut out the overlayed rect frrom the blur algorithm
* * handle shaped windows efficiently (as possible).
@ -14,10 +13,6 @@
/* module private routines */
static Dropshadow *_ds_init(E_Module *m);
static void _ds_shutdown(Dropshadow *ds);
static int _ds_config_listen_shadow_x(const char *key, const Ecore_Config_Type type, const int tag, void *data);
static int _ds_config_listen_shadow_y(const char *key, const Ecore_Config_Type type, const int tag, void *data);
static int _ds_config_listen_blur(const char *key, const Ecore_Config_Type type, const int tag, void *data);
static int _ds_config_listen_shadow_darkness(const char *key, const Ecore_Config_Type type, const int tag, void *data);
static E_Menu *_ds_config_menu_new(Dropshadow *ds);
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);
@ -108,10 +103,12 @@ save(E_Module *m)
ds = m->data;
if (!ds) return;
ecore_config_int_set("e.module.dropshadow.shadow.x", ds->conf.shadow_x);
ecore_config_int_set("e.module.dropshadow.shadow.y", ds->conf.shadow_y);
ecore_config_int_set("e.module.dropshadow.blur", ds->conf.blur_size);
ecore_config_float_set("e.module.dropshadow.shadow.darkness", ds->conf.shadow_darkness);
printf("SAVE: %i %i, %i, %3.3f\n",
ds->conf->shadow_x,
ds->conf->shadow_y,
ds->conf->blur_size,
ds->conf->shadow_darkness);
e_config_domain_save("module.dropshadow", ds->conf_edd, ds->conf);
return 1;
}
@ -147,49 +144,29 @@ _ds_init(E_Module *m)
if (!ds) return NULL;
ds->module = m;
ecore_config_int_create_bound
("e.module.dropshadow.shadow.x",
4, -200, 200, 1,
0, "",
"Dropshadow module: Shadow X offset");
ecore_config_int_create_bound
("e.module.dropshadow.shadow.y",
4, -200, 200, 1,
0, "",
"Dropshadow module: Shadow Y offset");
ecore_config_int_create_bound
("e.module.dropshadow.blur",
10, 1, 120, 1,
0, "",
"Dropshadow module: Shadow blur radius");
ecore_config_float_create_bound
("e.module.dropshadow.shadow.darkness",
0.5, 0.0, 1.0, 0.001,
0, "",
"Dropshadow module: Shadow darkness");
ecore_config_load();
ds->conf_edd = E_CONFIG_DD_NEW("Dropshadow_Config", Config);
#undef T
#undef D
#define T Config
#define D ds->conf_edd
E_CONFIG_VAL(D, T, shadow_x, INT);
E_CONFIG_VAL(D, T, shadow_y, INT);
E_CONFIG_VAL(D, T, blur_size, INT);
E_CONFIG_VAL(D, T, shadow_darkness, DOUBLE);
ds->conf.shadow_x = ecore_config_int_get("e.module.dropshadow.shadow.x");
ecore_config_listen("e.module.dropshadow.shadow.x",
"e.module.dropshadow.shadow.x",
_ds_config_listen_shadow_x,
0, ds);
ds->conf.shadow_y = ecore_config_int_get("e.module.dropshadow.shadow.y");
ecore_config_listen("e.module.dropshadow.shadow.y",
"e.module.dropshadow.shadow.y",
_ds_config_listen_shadow_y,
0, ds);
ds->conf.blur_size = ecore_config_int_get("e.module.dropshadow.blur");
ecore_config_listen("e.module.dropshadow.blur",
"e.module.dropshadow.blur",
_ds_config_listen_blur,
0, ds);
ds->conf.shadow_darkness = ecore_config_float_get("e.module.dropshadow.shadow.darkness");
ecore_config_listen("e.module.dropshadow.shadow.darkness",
"e.module.dropshadow.shadow.darkness",
_ds_config_listen_shadow_darkness,
0, ds);
ds->conf = e_config_domain_load("module.dropshadow", ds->conf_edd);
if (!ds->conf)
{
ds->conf = E_NEW(Config, 1);
ds->conf->shadow_x = 4;
ds->conf->shadow_y = 4;
ds->conf->blur_size = 10;
ds->conf->shadow_darkness = 0.5;
}
E_CONFIG_LIMIT(ds->conf->shadow_x, -200, 200);
E_CONFIG_LIMIT(ds->conf->shadow_y, -200, 200);
E_CONFIG_LIMIT(ds->conf->blur_size, 1, 120);
E_CONFIG_LIMIT(ds->conf->shadow_darkness, 0.0, 1.0);
_ds_blur_init(ds);
@ -216,18 +193,8 @@ _ds_init(E_Module *m)
static void
_ds_shutdown(Dropshadow *ds)
{
ecore_config_deaf("e.module.dropshadow.shadow.x",
"e.module.dropshadow.shadow.x",
_ds_config_listen_shadow_x);
ecore_config_deaf("e.module.dropshadow.shadow.y",
"e.module.dropshadow.shadow.y",
_ds_config_listen_shadow_y);
ecore_config_deaf("e.module.dropshadow.blur",
"e.module.dropshadow.blur",
_ds_config_listen_blur);
ecore_config_deaf("e.module.dropshadow.shadow.darkness",
"e.module.dropshadow.shadow.darkness",
_ds_config_listen_shadow_darkness);
free(ds->conf);
E_CONFIG_DD_FREE(ds->conf_edd);
while (ds->cons)
{
E_Container *con;
@ -248,62 +215,6 @@ _ds_shutdown(Dropshadow *ds)
free(ds);
}
static int
_ds_config_listen_shadow_x(const char *key, const Ecore_Config_Type type, const int tag, void *data)
{
Dropshadow *ds;
int v;
ds = data;
v = ecore_config_int_get("e.module.dropshadow.shadow.x");
if (v < -200) v = -200;
else if (v > 200) v = 200;
_ds_config_shadow_xy_set(ds, v, ds->conf.shadow_y);
return 1;
}
static int
_ds_config_listen_shadow_y(const char *key, const Ecore_Config_Type type, const int tag, void *data)
{
Dropshadow *ds;
int v;
ds = data;
v = ecore_config_int_get("e.module.dropshadow.shadow.y");
if (v < -200) v = -200;
else if (v > 200) v = 200;
_ds_config_shadow_xy_set(ds, ds->conf.shadow_x, v);
return 1;
}
static int
_ds_config_listen_blur(const char *key, const Ecore_Config_Type type, const int tag, void *data)
{
Dropshadow *ds;
int v;
ds = data;
v = ecore_config_int_get("e.module.dropshadow.blur");
if (v < 1) v = 1;
else if (v > 120) v= 120;
_ds_config_blur_set(ds, v);
return 1;
}
static int
_ds_config_listen_shadow_darkness(const char *key, const Ecore_Config_Type type, const int tag, void *data)
{
Dropshadow *ds;
double v;
ds = data;
v = ecore_config_float_get("e.module.dropshadow.shadow.darkness");
if (v < 0.0) v = 0.0;
else if (v > 1.0) v = 1.0;
_ds_config_darkness_set(ds, v);
return 1;
}
static E_Menu *
_ds_config_menu_new(Dropshadow *ds)
{
@ -319,7 +230,7 @@ _ds_config_menu_new(Dropshadow *ds)
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.blur_size == 80) e_menu_item_toggle_set(mi, 1);
if (ds->conf->blur_size == 80) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _ds_menu_very_fuzzy, ds);
mi = e_menu_item_new(mn);
@ -328,7 +239,7 @@ _ds_config_menu_new(Dropshadow *ds)
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.blur_size == 40) e_menu_item_toggle_set(mi, 1);
if (ds->conf->blur_size == 40) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _ds_menu_fuzzy, ds);
mi = e_menu_item_new(mn);
@ -337,7 +248,7 @@ _ds_config_menu_new(Dropshadow *ds)
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.blur_size == 20) e_menu_item_toggle_set(mi, 1);
if (ds->conf->blur_size == 20) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _ds_menu_medium, ds);
mi = e_menu_item_new(mn);
@ -346,7 +257,7 @@ _ds_config_menu_new(Dropshadow *ds)
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.blur_size == 10) e_menu_item_toggle_set(mi, 1);
if (ds->conf->blur_size == 10) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _ds_menu_sharp, ds);
mi = e_menu_item_new(mn);
@ -355,7 +266,7 @@ _ds_config_menu_new(Dropshadow *ds)
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.blur_size == 5) e_menu_item_toggle_set(mi, 1);
if (ds->conf->blur_size == 5) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _ds_menu_very_sharp, ds);
mi = e_menu_item_new(mn);
@ -367,7 +278,7 @@ _ds_config_menu_new(Dropshadow *ds)
e_menu_item_icon_file_set(mi, buf);
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 2);
if (ds->conf.shadow_darkness == 1.0) e_menu_item_toggle_set(mi, 1);
if (ds->conf->shadow_darkness == 1.0) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _ds_menu_very_dark, ds);
mi = e_menu_item_new(mn);
@ -376,7 +287,7 @@ _ds_config_menu_new(Dropshadow *ds)
e_menu_item_icon_file_set(mi, buf);
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 2);
if (ds->conf.shadow_darkness == 0.75) e_menu_item_toggle_set(mi, 1);
if (ds->conf->shadow_darkness == 0.75) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _ds_menu_dark, ds);
mi = e_menu_item_new(mn);
@ -385,7 +296,7 @@ _ds_config_menu_new(Dropshadow *ds)
e_menu_item_icon_file_set(mi, buf);
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 2);
if (ds->conf.shadow_darkness == 0.5) e_menu_item_toggle_set(mi, 1);
if (ds->conf->shadow_darkness == 0.5) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _ds_menu_light, ds);
mi = e_menu_item_new(mn);
@ -394,7 +305,7 @@ _ds_config_menu_new(Dropshadow *ds)
e_menu_item_icon_file_set(mi, buf);
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 2);
if (ds->conf.shadow_darkness == 0.25) e_menu_item_toggle_set(mi, 1);
if (ds->conf->shadow_darkness == 0.25) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _ds_menu_very_light, ds);
mi = e_menu_item_new(mn);
@ -406,7 +317,7 @@ _ds_config_menu_new(Dropshadow *ds)
e_menu_item_icon_file_set(mi, buf);
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 3);
if (ds->conf.shadow_x == 32) e_menu_item_toggle_set(mi, 1);
if (ds->conf->shadow_x == 32) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _ds_menu_very_far, ds);
mi = e_menu_item_new(mn);
@ -415,7 +326,7 @@ _ds_config_menu_new(Dropshadow *ds)
e_menu_item_icon_file_set(mi, buf);
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 3);
if (ds->conf.shadow_x == 16) e_menu_item_toggle_set(mi, 1);
if (ds->conf->shadow_x == 16) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _ds_menu_far, ds);
mi = e_menu_item_new(mn);
@ -424,7 +335,7 @@ _ds_config_menu_new(Dropshadow *ds)
e_menu_item_icon_file_set(mi, buf);
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 3);
if (ds->conf.shadow_x == 8) e_menu_item_toggle_set(mi, 1);
if (ds->conf->shadow_x == 8) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _ds_menu_close, ds);
mi = e_menu_item_new(mn);
@ -433,7 +344,7 @@ _ds_config_menu_new(Dropshadow *ds)
e_menu_item_icon_file_set(mi, buf);
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 3);
if (ds->conf.shadow_x == 4) e_menu_item_toggle_set(mi, 1);
if (ds->conf->shadow_x == 4) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _ds_menu_very_close, ds);
mi = e_menu_item_new(mn);
@ -442,7 +353,7 @@ _ds_config_menu_new(Dropshadow *ds)
e_menu_item_icon_file_set(mi, buf);
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 3);
if (ds->conf.shadow_x == 2) e_menu_item_toggle_set(mi, 1);
if (ds->conf->shadow_x == 2) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _ds_menu_extremely_close, ds);
mi = e_menu_item_new(mn);
@ -451,7 +362,7 @@ _ds_config_menu_new(Dropshadow *ds)
e_menu_item_icon_file_set(mi, buf);
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 3);
if (ds->conf.shadow_x == 0) e_menu_item_toggle_set(mi, 1);
if (ds->conf->shadow_x == 0) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _ds_menu_under, ds);
return mn;
}
@ -701,7 +612,7 @@ _ds_shadow_obj_init(Shadow *sh)
evas_object_resize(sh->object[i], 0, 0);
evas_object_color_set(sh->object[i],
255, 255, 255,
255 * sh->ds->conf.shadow_darkness);
255 * sh->ds->conf->shadow_darkness);
}
}
@ -767,23 +678,23 @@ _ds_shadow_move(Shadow *sh, int x, int y)
if (sh->square)
{
evas_object_move(sh->object[0],
sh->x + sh->ds->conf.shadow_x - sh->ds->conf.blur_size,
sh->y + sh->ds->conf.shadow_y - sh->ds->conf.blur_size);
sh->x + sh->ds->conf->shadow_x - sh->ds->conf->blur_size,
sh->y + sh->ds->conf->shadow_y - sh->ds->conf->blur_size);
evas_object_move(sh->object[1],
sh->x + sh->ds->conf.shadow_x - sh->ds->conf.blur_size,
sh->x + sh->ds->conf->shadow_x - sh->ds->conf->blur_size,
sh->y);
evas_object_move(sh->object[2],
sh->x + sh->w,
sh->y);
evas_object_move(sh->object[3],
sh->x + sh->ds->conf.shadow_x - sh->ds->conf.blur_size,
sh->x + sh->ds->conf->shadow_x - sh->ds->conf->blur_size,
sh->y + sh->h);
}
else
{
evas_object_move(sh->object[0],
sh->x + sh->ds->conf.shadow_x - sh->ds->conf.blur_size,
sh->y + sh->ds->conf.shadow_y - sh->ds->conf.blur_size);
sh->x + sh->ds->conf->shadow_x - sh->ds->conf->blur_size,
sh->y + sh->ds->conf->shadow_y - sh->ds->conf->blur_size);
}
}
@ -836,8 +747,8 @@ _ds_shadow_recalc(Shadow *sh)
Evas_List *l;
sh->square = 0;
pix_w = sh->w + (sh->ds->conf.blur_size * 2);
pix_h = sh->h + (sh->ds->conf.blur_size * 2);
pix_w = sh->w + (sh->ds->conf->blur_size * 2);
pix_h = sh->h + (sh->ds->conf->blur_size * 2);
pix = calloc(1, pix_w * pix_h * sizeof(unsigned char));
/* for every rect in the shape - fill it */
@ -850,10 +761,10 @@ _ds_shadow_recalc(Shadow *sh)
}
/* FIXME: need to find an optimal "inner rect" fromt he above rect list */
/*
sx = sh->ds->conf.blur_size;
sy = sh->ds->conf.blur_size;
sxx = pix_w - sh->ds->conf.blur_size;
syy = pix_h - sh->ds->conf.blur_size;
sx = sh->ds->conf->blur_size;
sy = sh->ds->conf->blur_size;
sxx = pix_w - sh->ds->conf->blur_size;
syy = pix_h - sh->ds->conf->blur_size;
*/
sx = 0;
sy = 0;
@ -861,15 +772,15 @@ _ds_shadow_recalc(Shadow *sh)
syy = 0;
_ds_gauss_blur(pix, pix_w, pix_h,
sh->ds->table.gauss, sh->ds->conf.blur_size,
sh->ds->table.gauss, sh->ds->conf->blur_size,
sx, sy, sxx, syy);
evas_object_move(sh->object[0],
sh->x + sh->ds->conf.shadow_x - sh->ds->conf.blur_size,
sh->y + sh->ds->conf.shadow_y - sh->ds->conf.blur_size);
sh->x + sh->ds->conf->shadow_x - sh->ds->conf->blur_size,
sh->y + sh->ds->conf->shadow_y - sh->ds->conf->blur_size);
sx = 0;
sy = 0;
ssw = sh->w + (sh->ds->conf.blur_size * 2);
ssh = sh->h + (sh->ds->conf.blur_size * 2);
ssw = sh->w + (sh->ds->conf->blur_size * 2);
ssh = sh->h + (sh->ds->conf->blur_size * 2);
_ds_shadow_object_pixels_set(sh->object[0], pix, pix_w, pix_h,
sx, sy, ssw, ssh);
if (evas_object_visible_get(sh->object[0]))
@ -883,55 +794,55 @@ _ds_shadow_recalc(Shadow *sh)
else
{
sh->square = 1;
pix_w = sh->w + (sh->ds->conf.blur_size * 2);
pix_h = sh->h + (sh->ds->conf.blur_size * 2);
pix_w = sh->w + (sh->ds->conf->blur_size * 2);
pix_h = sh->h + (sh->ds->conf->blur_size * 2);
pix = calloc(1, pix_w * pix_h * sizeof(unsigned char));
sx = sh->ds->conf.blur_size;
sy = sh->ds->conf.blur_size;
sxx = pix_w - sh->ds->conf.blur_size;
syy = pix_h - sh->ds->conf.blur_size;
sx = sh->ds->conf->blur_size;
sy = sh->ds->conf->blur_size;
sxx = pix_w - sh->ds->conf->blur_size;
syy = pix_h - sh->ds->conf->blur_size;
_ds_gauss_fill(pix, pix_w, pix_h, 255, sx, sy, sxx, syy);
sx = sh->ds->conf.blur_size * 2;
sy = sh->ds->conf.blur_size * 2;
ssw = pix_w - (sh->ds->conf.blur_size * 4);
ssh = pix_h - (sh->ds->conf.blur_size * 4);
sx = sh->ds->conf->blur_size * 2;
sy = sh->ds->conf->blur_size * 2;
ssw = pix_w - (sh->ds->conf->blur_size * 4);
ssh = pix_h - (sh->ds->conf->blur_size * 4);
_ds_gauss_blur(pix, pix_w, pix_h,
sh->ds->table.gauss, sh->ds->conf.blur_size,
sh->ds->table.gauss, sh->ds->conf->blur_size,
sx, sy, ssw, ssh);
evas_object_move(sh->object[0],
sh->x + sh->ds->conf.shadow_x - sh->ds->conf.blur_size,
sh->y + sh->ds->conf.shadow_y - sh->ds->conf.blur_size);
sh->x + sh->ds->conf->shadow_x - sh->ds->conf->blur_size,
sh->y + sh->ds->conf->shadow_y - sh->ds->conf->blur_size);
evas_object_move(sh->object[1],
sh->x + sh->ds->conf.shadow_x - sh->ds->conf.blur_size,
sh->x + sh->ds->conf->shadow_x - sh->ds->conf->blur_size,
sh->y);
evas_object_move(sh->object[2],
sh->x + sh->w,
sh->y);
evas_object_move(sh->object[3],
sh->x + sh->ds->conf.shadow_x - sh->ds->conf.blur_size,
sh->x + sh->ds->conf->shadow_x - sh->ds->conf->blur_size,
sh->y + sh->h);
sx = 0;
sy = 0;
ssw = sh->w + (sh->ds->conf.blur_size * 2);
ssh = sh->ds->conf.blur_size - sh->ds->conf.shadow_y;
ssw = sh->w + (sh->ds->conf->blur_size * 2);
ssh = sh->ds->conf->blur_size - sh->ds->conf->shadow_y;
_ds_shadow_object_pixels_set(sh->object[0], pix, pix_w, pix_h,
sx, sy, ssw, ssh);
sx = 0;
sy = sh->ds->conf.blur_size - sh->ds->conf.shadow_y;
ssw = sh->ds->conf.blur_size - sh->ds->conf.shadow_x;
sy = sh->ds->conf->blur_size - sh->ds->conf->shadow_y;
ssw = sh->ds->conf->blur_size - sh->ds->conf->shadow_x;
ssh = sh->h;
_ds_shadow_object_pixels_set(sh->object[1], pix, pix_w, pix_h,
sx, sy, ssw, ssh);
sx = sh->ds->conf.blur_size - sh->ds->conf.shadow_y + sh->w;
sy = sh->ds->conf.blur_size - sh->ds->conf.shadow_y;
ssw = sh->ds->conf.blur_size + sh->ds->conf.shadow_x;
sx = sh->ds->conf->blur_size - sh->ds->conf->shadow_y + sh->w;
sy = sh->ds->conf->blur_size - sh->ds->conf->shadow_y;
ssw = sh->ds->conf->blur_size + sh->ds->conf->shadow_x;
ssh = sh->h;
_ds_shadow_object_pixels_set(sh->object[2], pix, pix_w, pix_h,
sx, sy, ssw, ssh);
sx = 0;
sy = sh->ds->conf.blur_size - sh->ds->conf.shadow_y + sh->h;
ssw = sh->w + (sh->ds->conf.blur_size * 2);
ssh = sh->ds->conf.blur_size + sh->ds->conf.shadow_y;
sy = sh->ds->conf->blur_size - sh->ds->conf->shadow_y + sh->h;
ssw = sh->w + (sh->ds->conf->blur_size * 2);
ssh = sh->ds->conf->blur_size + sh->ds->conf->shadow_y;
_ds_shadow_object_pixels_set(sh->object[3], pix, pix_w, pix_h,
sx, sy, ssw, ssh);
if (evas_object_visible_get(sh->object[0]))
@ -1040,8 +951,8 @@ _ds_config_darkness_set(Dropshadow *ds, double v)
if (v < 0.0) v = 0.0;
else if (v > 1.0) v = 1.0;
if (ds->conf.shadow_darkness == v) return;
ds->conf.shadow_darkness = v;
if (ds->conf->shadow_darkness == v) return;
ds->conf->shadow_darkness = v;
for (l = ds->shadows; l; l = l->next)
{
Shadow *sh;
@ -1051,7 +962,7 @@ _ds_config_darkness_set(Dropshadow *ds, double v)
for (i = 0; i < 4; i++)
evas_object_color_set(sh->object[i],
255, 255, 255,
255 * ds->conf.shadow_darkness);
255 * ds->conf->shadow_darkness);
}
e_config_save_queue();
}
@ -1061,9 +972,9 @@ _ds_config_shadow_xy_set(Dropshadow *ds, int x, int y)
{
Evas_List *l;
if ((ds->conf.shadow_x == x) && (ds->conf.shadow_y == y)) return;
ds->conf.shadow_x = x;
ds->conf.shadow_y = y;
if ((ds->conf->shadow_x == x) && (ds->conf->shadow_y == y)) return;
ds->conf->shadow_x = x;
ds->conf->shadow_y = y;
for (l = ds->shadows; l; l = l->next)
{
Shadow *sh;
@ -1080,8 +991,8 @@ _ds_config_blur_set(Dropshadow *ds, int blur)
Evas_List *l;
if (blur < 0) blur = 0;
if (ds->conf.blur_size == blur) return;
ds->conf.blur_size = blur;
if (ds->conf->blur_size == blur) return;
ds->conf->blur_size = blur;
_ds_blur_init(ds);
for (l = ds->shadows; l; l = l->next)
@ -1100,17 +1011,17 @@ _ds_blur_init(Dropshadow *ds)
int i;
if (ds->table.gauss) free(ds->table.gauss);
ds->table.gauss_size = (ds->conf.blur_size * 2) - 1;
ds->table.gauss_size = (ds->conf->blur_size * 2) - 1;
ds->table.gauss = calloc(1, ds->table.gauss_size * sizeof(unsigned char));
ds->table.gauss[ds->conf.blur_size - 1] = 255;
for (i = 1; i < (ds->conf.blur_size - 1); i++)
ds->table.gauss[ds->conf->blur_size - 1] = 255;
for (i = 1; i < (ds->conf->blur_size - 1); i++)
{
double v;
v = (double)i / (ds->conf.blur_size - 2);
ds->table.gauss[ds->conf.blur_size - 1 + i] =
ds->table.gauss[ds->conf.blur_size - 1 - i] =
v = (double)i / (ds->conf->blur_size - 2);
ds->table.gauss[ds->conf->blur_size - 1 + i] =
ds->table.gauss[ds->conf->blur_size - 1 - i] =
_ds_gauss_int(-1.5 + (v * 3.0)) * 255.0;
}
}

View File

@ -1,8 +1,16 @@
#ifndef E_MOD_MAIN_H
#define E_MOD_MAIN_H
typedef struct _Config Config;
typedef struct _Dropshadow Dropshadow;
typedef struct _Shadow Shadow;
typedef struct _Shadow Shadow;
struct _Config
{
int shadow_x, shadow_y;
int blur_size;
double shadow_darkness;
};
struct _Dropshadow
{
@ -10,12 +18,9 @@ struct _Dropshadow
Evas_List *shadows;
Evas_List *cons;
E_Before_Idler *idler_before;
struct {
int shadow_x, shadow_y;
int blur_size;
double shadow_darkness;
} conf;
E_Config_DD *conf_edd;
Config *conf;
struct {
unsigned char *gauss;