From 7562a08b5a168ebd10f66b05e232e04625ee3149 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Sun, 5 Dec 2004 07:43:51 +0000 Subject: [PATCH] fix up config code so i can do lists and structs etc. SVN revision: 12357 --- src/bin/e_canvas.c | 8 +- src/bin/e_config.c | 279 +++++++++----------------- src/bin/e_config.h | 61 +++++- src/bin/e_container.c | 4 +- src/bin/e_ipc.c | 53 ++--- src/bin/e_main.c | 7 +- src/bin/e_menu.c | 6 +- src/bin/e_remote_main.c | 18 +- src/modules/clock/e_mod_main.c | 81 ++++---- src/modules/clock/e_mod_main.h | 14 +- src/modules/dropshadow/e_mod_main.c | 293 ++++++++++------------------ src/modules/dropshadow/e_mod_main.h | 19 +- 12 files changed, 358 insertions(+), 485 deletions(-) diff --git a/src/bin/e_canvas.c b/src/bin/e_canvas.c index 2f36a7e49..6b730a7c5 100644 --- a/src/bin/e_canvas.c +++ b/src/bin/e_canvas.c @@ -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); } } diff --git a/src/bin/e_config.c b/src/bin/e_config.c index 705e3d3ae..be00c8418 100644 --- a/src/bin/e_config.c +++ b/src/bin/e_config.c @@ -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; } diff --git a/src/bin/e_config.h b/src/bin/e_config.h index cb4b93fdb..2882ae4fe 100644 --- a/src/bin/e_config.h +++ b/src/bin/e_config.h @@ -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 diff --git a/src/bin/e_container.c b/src/bin/e_container.c index 1ace0963f..e1745e285 100644 --- a/src/bin/e_container.c +++ b/src/bin/e_container.c @@ -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); diff --git a/src/bin/e_ipc.c b/src/bin/e_ipc.c index 9d0f986a7..d59cc568f 100644 --- a/src/bin/e_ipc.c +++ b/src/bin/e_ipc.c @@ -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; diff --git a/src/bin/e_main.c b/src/bin/e_main.c index 69b19ee7b..188a3fd46 100644 --- a/src/bin/e_main.c +++ b/src/bin/e_main.c @@ -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; diff --git a/src/bin/e_menu.c b/src/bin/e_menu.c index 3e2c611ca..d3e467562 100644 --- a/src/bin/e_menu.c +++ b/src/bin/e_menu.c @@ -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; diff --git a/src/bin/e_remote_main.c b/src/bin/e_remote_main.c index f35a71dd8..042fbbef5 100644 --- a/src/bin/e_remote_main.c +++ b/src/bin/e_remote_main.c @@ -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 */ diff --git a/src/modules/clock/e_mod_main.c b/src/modules/clock/e_mod_main.c index 8eb220c12..a9d7ddfb3 100644 --- a/src/modules/clock/e_mod_main.c +++ b/src/modules/clock/e_mod_main.c @@ -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); diff --git a/src/modules/clock/e_mod_main.h b/src/modules/clock/e_mod_main.h index d1c63e572..b37e80702 100644 --- a/src/modules/clock/e_mod_main.h +++ b/src/modules/clock/e_mod_main.h @@ -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 diff --git a/src/modules/dropshadow/e_mod_main.c b/src/modules/dropshadow/e_mod_main.c index 1945d2f15..ed94edd08 100644 --- a/src/modules/dropshadow/e_mod_main.c +++ b/src/modules/dropshadow/e_mod_main.c @@ -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; } } diff --git a/src/modules/dropshadow/e_mod_main.h b/src/modules/dropshadow/e_mod_main.h index 08d567ccb..8439301b0 100644 --- a/src/modules/dropshadow/e_mod_main.h +++ b/src/modules/dropshadow/e_mod_main.h @@ -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;