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_canvases = evas_list_prepend(_e_canvases, ee);
e = ecore_evas_get(ee); e = ecore_evas_get(ee);
evas_image_cache_set(e, e_config_val_image_cache * 1024); evas_image_cache_set(e, e_config->image_cache * 1024);
evas_font_cache_set(e, e_config_val_font_cache * 1024); evas_font_cache_set(e, e_config->font_cache * 1024);
// evas_image_cache_flush(e); // evas_image_cache_flush(e);
// evas_image_cache_reload(e); // evas_image_cache_reload(e);
} }
@ -36,8 +36,8 @@ e_canvas_recache(void)
ee = l->data; ee = l->data;
e = ecore_evas_get(ee); e = ecore_evas_get(ee);
evas_image_cache_set(e, e_config_val_image_cache * 1024); evas_image_cache_set(e, e_config->image_cache * 1024);
evas_font_cache_set(e, e_config_val_font_cache * 1024); evas_font_cache_set(e, e_config->font_cache * 1024);
} }
} }

View File

@ -11,125 +11,67 @@
#define DEF_MENUCLICK 0.25 #define DEF_MENUCLICK 0.25
#endif #endif
char *e_config_val_desktop_default_background = NULL; E_Config *e_config = 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;
/* local subsystem functions */ /* local subsystem functions */
static void _e_config_save_cb(void *data); 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 */ /* local subsystem globals */
static Ecore_Job *_e_config_save_job = NULL; static Ecore_Job *_e_config_save_job = NULL;
static E_Config_DD *_e_config_edd = NULL;
/* externally accessible functions */ /* externally accessible functions */
int int
e_config_init(void) e_config_init(void)
{ {
int ret; _e_config_edd = E_CONFIG_DD_NEW("E_Config", E_Config);
#undef T
ecore_config_init("e"); #undef D
#define T E_Config
ecore_config_string_create #define D _e_config_edd
("e.desktop.default.background", E_CONFIG_VAL(D, T, desktop_default_background, STR);
PACKAGE_DATA_DIR"/data/themes/default.eet", E_CONFIG_VAL(D, T, menus_scroll_speed, DOUBLE);
'b', "default-background", E_CONFIG_VAL(D, T, menus_fast_mouse_move_thresthold, DOUBLE);
"The default background for desktops without a custom background"); E_CONFIG_VAL(D, T, menus_click_drag_timeout, DOUBLE);
ecore_config_float_create_bound E_CONFIG_VAL(D, T, framerate, DOUBLE);
("e.menus.scroll_speed", E_CONFIG_VAL(D, T, image_cache, INT);
1000.0, 1.0, 20000.0, 10.0, E_CONFIG_VAL(D, T, font_cache, INT);
0, "menus-scroll-speed",
"Pixels per second menus scroll around the screen"); e_config = e_config_domain_load("e", _e_config_edd);
ecore_config_float_create_bound if (!e_config) e_config = E_NEW(E_Config, 1);
("e.menus.fast_mouse_move_threshold", if (e_config)
300.0, 1.0, 2000.0, 1.0, {
0, "menus-scroll-speed", e_config->desktop_default_background = strdup(PACKAGE_DATA_DIR"/data/themes/default.eet");
"Pixels per second menus scroll around the screen"); e_config->menus_scroll_speed = 1000.0;
ecore_config_float_create_bound e_config->menus_fast_mouse_move_thresthold = 300.0;
("e.menus.click_drag_timeout", e_config->menus_click_drag_timeout = DEF_MENUCLICK;
DEF_MENUCLICK, 0.0, 10.0, 0.01, e_config->framerate = 30.0;
0, "menus-click-drag-timeout", e_config->image_cache = 2048;
"Seconds after a mouse press when a release will not hide the menu"); e_config->font_cache = 512;
ecore_config_float_create_bound }
("e.framerate", else
30.0, 1.0, 200.0, 0.1, return 0;
0, "framerate", E_CONFIG_LIMIT(e_config->menus_scroll_speed, 1.0, 20000.0);
"A hint at the framerate (in frames per second) Enlightenment should try and animate at"); E_CONFIG_LIMIT(e_config->menus_fast_mouse_move_thresthold, 1.0, 2000.0);
ecore_config_int_create_bound E_CONFIG_LIMIT(e_config->menus_click_drag_timeout, 0.0, 10.0);
("e.image-cache", E_CONFIG_LIMIT(e_config->framerate, 1.0, 200.0);
2048, 0, 32768, 1, E_CONFIG_LIMIT(e_config->image_cache, 0, 256 * 1024);
0, "image-cache", E_CONFIG_LIMIT(e_config->font_cache, 0, 32 * 1024);
"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);
return 1; return 1;
} }
int int
e_config_shutdown(void) 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; return 1;
} }
@ -141,7 +83,7 @@ e_config_save(void)
ecore_job_del(_e_config_save_job); ecore_job_del(_e_config_save_job);
_e_config_save_job = NULL; _e_config_save_job = NULL;
} }
return ecore_config_save(); return e_config_domain_save("e", _e_config_edd, e_config);
} }
void void
@ -151,98 +93,53 @@ e_config_save_queue(void)
_e_config_save_job = ecore_job_add(_e_config_save_cb, NULL); _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 */ /* local subsystem functions */
static void static void
_e_config_save_cb(void *data) _e_config_save_cb(void *data)
{ {
_e_config_save_job = NULL;
e_module_save_all(); e_module_save_all();
e_config_save();
}
static int e_config_domain_save("e", _e_config_edd, e_config);
_e_config_listener_desktop_default_background(const char *key, const Ecore_Config_Type type, const int tag, void *data) _e_config_save_job = NULL;
{
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;
} }

View File

@ -1,18 +1,63 @@
#ifndef E_CONFIG_H #ifndef E_CONFIG_H
#define 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_init(void);
EAPI int e_config_shutdown(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 int e_config_save(void);
EAPI void e_config_save_queue(void); EAPI void e_config_save_queue(void);
extern EAPI char *e_config_val_desktop_default_background; extern EAPI E_Config *e_config;
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;
#endif #endif

View File

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

View File

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

View File

@ -161,8 +161,8 @@ main(int argc, char **argv)
} }
_e_main_shutdown_push(e_config_shutdown); _e_main_shutdown_push(e_config_shutdown);
/* setup edje to animate @ e_config_val_framerate frames per sec. */ /* setup edje to animate @ e_config->framerate frames per sec. */
edje_frametime_set(1.0 / e_config_val_framerate); edje_frametime_set(1.0 / e_config->framerate);
e_canvas_recache(); e_canvas_recache();
/* setup init status window/screen */ /* setup init status window/screen */
@ -375,7 +375,8 @@ _e_main_dirs_init(void)
"%s/.e/e/applications/all", "%s/.e/e/applications/all",
"%s/.e/e/applications/favorite", "%s/.e/e/applications/favorite",
"%s/.e/e/applications/bar", "%s/.e/e/applications/bar",
"%s/.e/e/modules" "%s/.e/e/modules",
"%s/.e/e/config"
}; };
int i; 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; if (ev->win != _e_menu_win) return 1;
t = ecore_time_get(); t = ecore_time_get();
if ((_e_menu_activate_time != 0.0) && 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; return 1;
ret = _e_menu_active_call(); ret = _e_menu_active_call();
if (ret == 1) if (ret == 1)
@ -1938,7 +1938,7 @@ _e_menu_cb_mouse_move(void *data, int type, void *event)
ev = event; ev = event;
if (ev->win != _e_menu_win) return 1; 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; dx = ev->x - _e_menu_x;
dy = ev->y - _e_menu_y; dy = ev->y - _e_menu_y;
d = (dx * dx) + (dy * dy); d = (dx * dx) + (dy * dy);
@ -2023,7 +2023,7 @@ _e_menu_cb_scroll_timer(void *data)
double spd; double spd;
t = ecore_time_get(); t = ecore_time_get();
spd = e_config_val_menus_scroll_speed; spd = e_config->menus_scroll_speed;
dt = t - _e_menu_scroll_start; dt = t - _e_menu_scroll_start;
_e_menu_scroll_start = t; _e_menu_scroll_start = t;
dx = 0; dx = 0;

View File

@ -34,18 +34,18 @@ static int reply_expect = 0;
#define SIMPLE_STR_REQ 1 #define SIMPLE_STR_REQ 1
#define FULL_FUNC 2 #define FULL_FUNC 2
#define REQ(opt, desc, ipc, rep) {opt, desc, 0, rep, SIMPLE_REQ, ipc, NULL} #define OREQ(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 OSTR(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 OFNC(opt, desc, param, fn, rep) {opt, desc, param, rep, SIMPLE_FUNC, 0, fn}
E_IPC_Opt_Handler handlers[] = E_IPC_Opt_Handler handlers[] =
{ {
STR("-module-load", "Load module OPT1 into memory", E_IPC_OP_MODULE_LOAD, 0), OSTR("-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), OSTR("-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), OSTR("-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), OSTR("-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), OREQ("-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("-bg-set", "Set the background edje file to be OPT1", E_IPC_OP_BG_SET, 0)
}; };
/* externally accessible functions */ /* externally accessible functions */

View File

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

View File

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

View File

@ -4,7 +4,6 @@
/* TODO List: /* TODO List:
* *
* * bug in shadow_x < 0 and shadow_y < 0 needs to be fixed (not urgent though) * * 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 * * 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 * * when blurring ALSO cut out the overlayed rect frrom the blur algorithm
* * handle shaped windows efficiently (as possible). * * handle shaped windows efficiently (as possible).
@ -14,10 +13,6 @@
/* module private routines */ /* module private routines */
static Dropshadow *_ds_init(E_Module *m); static Dropshadow *_ds_init(E_Module *m);
static void _ds_shutdown(Dropshadow *ds); 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 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_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_fuzzy(void *data, E_Menu *m, E_Menu_Item *mi);
@ -108,10 +103,12 @@ save(E_Module *m)
ds = m->data; ds = m->data;
if (!ds) return; if (!ds) return;
ecore_config_int_set("e.module.dropshadow.shadow.x", ds->conf.shadow_x); printf("SAVE: %i %i, %i, %3.3f\n",
ecore_config_int_set("e.module.dropshadow.shadow.y", ds->conf.shadow_y); ds->conf->shadow_x,
ecore_config_int_set("e.module.dropshadow.blur", ds->conf.blur_size); ds->conf->shadow_y,
ecore_config_float_set("e.module.dropshadow.shadow.darkness", ds->conf.shadow_darkness); ds->conf->blur_size,
ds->conf->shadow_darkness);
e_config_domain_save("module.dropshadow", ds->conf_edd, ds->conf);
return 1; return 1;
} }
@ -147,49 +144,29 @@ _ds_init(E_Module *m)
if (!ds) return NULL; if (!ds) return NULL;
ds->module = m; ds->module = m;
ecore_config_int_create_bound ds->conf_edd = E_CONFIG_DD_NEW("Dropshadow_Config", Config);
("e.module.dropshadow.shadow.x", #undef T
4, -200, 200, 1, #undef D
0, "", #define T Config
"Dropshadow module: Shadow X offset"); #define D ds->conf_edd
ecore_config_int_create_bound E_CONFIG_VAL(D, T, shadow_x, INT);
("e.module.dropshadow.shadow.y", E_CONFIG_VAL(D, T, shadow_y, INT);
4, -200, 200, 1, E_CONFIG_VAL(D, T, blur_size, INT);
0, "", E_CONFIG_VAL(D, T, shadow_darkness, DOUBLE);
"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.shadow_x = ecore_config_int_get("e.module.dropshadow.shadow.x"); ds->conf = e_config_domain_load("module.dropshadow", ds->conf_edd);
ecore_config_listen("e.module.dropshadow.shadow.x", if (!ds->conf)
"e.module.dropshadow.shadow.x", {
_ds_config_listen_shadow_x, ds->conf = E_NEW(Config, 1);
0, ds); ds->conf->shadow_x = 4;
ds->conf.shadow_y = ecore_config_int_get("e.module.dropshadow.shadow.y"); ds->conf->shadow_y = 4;
ecore_config_listen("e.module.dropshadow.shadow.y", ds->conf->blur_size = 10;
"e.module.dropshadow.shadow.y", ds->conf->shadow_darkness = 0.5;
_ds_config_listen_shadow_y, }
0, ds); E_CONFIG_LIMIT(ds->conf->shadow_x, -200, 200);
ds->conf.blur_size = ecore_config_int_get("e.module.dropshadow.blur"); E_CONFIG_LIMIT(ds->conf->shadow_y, -200, 200);
ecore_config_listen("e.module.dropshadow.blur", E_CONFIG_LIMIT(ds->conf->blur_size, 1, 120);
"e.module.dropshadow.blur", E_CONFIG_LIMIT(ds->conf->shadow_darkness, 0.0, 1.0);
_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_blur_init(ds); _ds_blur_init(ds);
@ -216,18 +193,8 @@ _ds_init(E_Module *m)
static void static void
_ds_shutdown(Dropshadow *ds) _ds_shutdown(Dropshadow *ds)
{ {
ecore_config_deaf("e.module.dropshadow.shadow.x", free(ds->conf);
"e.module.dropshadow.shadow.x", E_CONFIG_DD_FREE(ds->conf_edd);
_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);
while (ds->cons) while (ds->cons)
{ {
E_Container *con; E_Container *con;
@ -248,62 +215,6 @@ _ds_shutdown(Dropshadow *ds)
free(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 * static E_Menu *
_ds_config_menu_new(Dropshadow *ds) _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_icon_file_set(mi, buf);
e_menu_item_radio_set(mi, 1); e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_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); e_menu_item_callback_set(mi, _ds_menu_very_fuzzy, ds);
mi = e_menu_item_new(mn); 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_icon_file_set(mi, buf);
e_menu_item_radio_set(mi, 1); e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_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); e_menu_item_callback_set(mi, _ds_menu_fuzzy, ds);
mi = e_menu_item_new(mn); 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_icon_file_set(mi, buf);
e_menu_item_radio_set(mi, 1); e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_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); e_menu_item_callback_set(mi, _ds_menu_medium, ds);
mi = e_menu_item_new(mn); 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_icon_file_set(mi, buf);
e_menu_item_radio_set(mi, 1); e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_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); e_menu_item_callback_set(mi, _ds_menu_sharp, ds);
mi = e_menu_item_new(mn); 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_icon_file_set(mi, buf);
e_menu_item_radio_set(mi, 1); e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_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); e_menu_item_callback_set(mi, _ds_menu_very_sharp, ds);
mi = e_menu_item_new(mn); 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_icon_file_set(mi, buf);
e_menu_item_radio_set(mi, 1); e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 2); 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); e_menu_item_callback_set(mi, _ds_menu_very_dark, ds);
mi = e_menu_item_new(mn); 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_icon_file_set(mi, buf);
e_menu_item_radio_set(mi, 1); e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 2); 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); e_menu_item_callback_set(mi, _ds_menu_dark, ds);
mi = e_menu_item_new(mn); 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_icon_file_set(mi, buf);
e_menu_item_radio_set(mi, 1); e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 2); 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); e_menu_item_callback_set(mi, _ds_menu_light, ds);
mi = e_menu_item_new(mn); 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_icon_file_set(mi, buf);
e_menu_item_radio_set(mi, 1); e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 2); 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); e_menu_item_callback_set(mi, _ds_menu_very_light, ds);
mi = e_menu_item_new(mn); 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_icon_file_set(mi, buf);
e_menu_item_radio_set(mi, 1); e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 3); 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); e_menu_item_callback_set(mi, _ds_menu_very_far, ds);
mi = e_menu_item_new(mn); 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_icon_file_set(mi, buf);
e_menu_item_radio_set(mi, 1); e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 3); 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); e_menu_item_callback_set(mi, _ds_menu_far, ds);
mi = e_menu_item_new(mn); 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_icon_file_set(mi, buf);
e_menu_item_radio_set(mi, 1); e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 3); 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); e_menu_item_callback_set(mi, _ds_menu_close, ds);
mi = e_menu_item_new(mn); 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_icon_file_set(mi, buf);
e_menu_item_radio_set(mi, 1); e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 3); 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); e_menu_item_callback_set(mi, _ds_menu_very_close, ds);
mi = e_menu_item_new(mn); 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_icon_file_set(mi, buf);
e_menu_item_radio_set(mi, 1); e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 3); 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); e_menu_item_callback_set(mi, _ds_menu_extremely_close, ds);
mi = e_menu_item_new(mn); 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_icon_file_set(mi, buf);
e_menu_item_radio_set(mi, 1); e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 3); 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); e_menu_item_callback_set(mi, _ds_menu_under, ds);
return mn; return mn;
} }
@ -701,7 +612,7 @@ _ds_shadow_obj_init(Shadow *sh)
evas_object_resize(sh->object[i], 0, 0); evas_object_resize(sh->object[i], 0, 0);
evas_object_color_set(sh->object[i], evas_object_color_set(sh->object[i],
255, 255, 255, 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) if (sh->square)
{ {
evas_object_move(sh->object[0], evas_object_move(sh->object[0],
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->ds->conf.shadow_y - sh->ds->conf.blur_size); sh->y + sh->ds->conf->shadow_y - sh->ds->conf->blur_size);
evas_object_move(sh->object[1], 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); sh->y);
evas_object_move(sh->object[2], evas_object_move(sh->object[2],
sh->x + sh->w, sh->x + sh->w,
sh->y); sh->y);
evas_object_move(sh->object[3], 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); sh->y + sh->h);
} }
else else
{ {
evas_object_move(sh->object[0], evas_object_move(sh->object[0],
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->ds->conf.shadow_y - 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; Evas_List *l;
sh->square = 0; sh->square = 0;
pix_w = sh->w + (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_h = sh->h + (sh->ds->conf->blur_size * 2);
pix = calloc(1, pix_w * pix_h * sizeof(unsigned char)); pix = calloc(1, pix_w * pix_h * sizeof(unsigned char));
/* for every rect in the shape - fill it */ /* 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 */ /* FIXME: need to find an optimal "inner rect" fromt he above rect list */
/* /*
sx = sh->ds->conf.blur_size; sx = sh->ds->conf->blur_size;
sy = sh->ds->conf.blur_size; sy = sh->ds->conf->blur_size;
sxx = pix_w - sh->ds->conf.blur_size; sxx = pix_w - sh->ds->conf->blur_size;
syy = pix_h - sh->ds->conf.blur_size; syy = pix_h - sh->ds->conf->blur_size;
*/ */
sx = 0; sx = 0;
sy = 0; sy = 0;
@ -861,15 +772,15 @@ _ds_shadow_recalc(Shadow *sh)
syy = 0; syy = 0;
_ds_gauss_blur(pix, pix_w, pix_h, _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); sx, sy, sxx, syy);
evas_object_move(sh->object[0], evas_object_move(sh->object[0],
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->ds->conf.shadow_y - sh->ds->conf.blur_size); sh->y + sh->ds->conf->shadow_y - sh->ds->conf->blur_size);
sx = 0; sx = 0;
sy = 0; sy = 0;
ssw = sh->w + (sh->ds->conf.blur_size * 2); ssw = sh->w + (sh->ds->conf->blur_size * 2);
ssh = sh->h + (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, _ds_shadow_object_pixels_set(sh->object[0], pix, pix_w, pix_h,
sx, sy, ssw, ssh); sx, sy, ssw, ssh);
if (evas_object_visible_get(sh->object[0])) if (evas_object_visible_get(sh->object[0]))
@ -883,55 +794,55 @@ _ds_shadow_recalc(Shadow *sh)
else else
{ {
sh->square = 1; sh->square = 1;
pix_w = sh->w + (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_h = sh->h + (sh->ds->conf->blur_size * 2);
pix = calloc(1, pix_w * pix_h * sizeof(unsigned char)); pix = calloc(1, pix_w * pix_h * sizeof(unsigned char));
sx = sh->ds->conf.blur_size; sx = sh->ds->conf->blur_size;
sy = sh->ds->conf.blur_size; sy = sh->ds->conf->blur_size;
sxx = pix_w - sh->ds->conf.blur_size; sxx = pix_w - sh->ds->conf->blur_size;
syy = pix_h - 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); _ds_gauss_fill(pix, pix_w, pix_h, 255, sx, sy, sxx, syy);
sx = sh->ds->conf.blur_size * 2; sx = sh->ds->conf->blur_size * 2;
sy = sh->ds->conf.blur_size * 2; sy = sh->ds->conf->blur_size * 2;
ssw = pix_w - (sh->ds->conf.blur_size * 4); ssw = pix_w - (sh->ds->conf->blur_size * 4);
ssh = pix_h - (sh->ds->conf.blur_size * 4); ssh = pix_h - (sh->ds->conf->blur_size * 4);
_ds_gauss_blur(pix, pix_w, pix_h, _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); sx, sy, ssw, ssh);
evas_object_move(sh->object[0], evas_object_move(sh->object[0],
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->ds->conf.shadow_y - sh->ds->conf.blur_size); sh->y + sh->ds->conf->shadow_y - sh->ds->conf->blur_size);
evas_object_move(sh->object[1], 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); sh->y);
evas_object_move(sh->object[2], evas_object_move(sh->object[2],
sh->x + sh->w, sh->x + sh->w,
sh->y); sh->y);
evas_object_move(sh->object[3], 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); sh->y + sh->h);
sx = 0; sx = 0;
sy = 0; sy = 0;
ssw = sh->w + (sh->ds->conf.blur_size * 2); ssw = sh->w + (sh->ds->conf->blur_size * 2);
ssh = sh->ds->conf.blur_size - sh->ds->conf.shadow_y; ssh = sh->ds->conf->blur_size - sh->ds->conf->shadow_y;
_ds_shadow_object_pixels_set(sh->object[0], pix, pix_w, pix_h, _ds_shadow_object_pixels_set(sh->object[0], pix, pix_w, pix_h,
sx, sy, ssw, ssh); sx, sy, ssw, ssh);
sx = 0; sx = 0;
sy = sh->ds->conf.blur_size - sh->ds->conf.shadow_y; sy = sh->ds->conf->blur_size - sh->ds->conf->shadow_y;
ssw = sh->ds->conf.blur_size - sh->ds->conf.shadow_x; ssw = sh->ds->conf->blur_size - sh->ds->conf->shadow_x;
ssh = sh->h; ssh = sh->h;
_ds_shadow_object_pixels_set(sh->object[1], pix, pix_w, pix_h, _ds_shadow_object_pixels_set(sh->object[1], pix, pix_w, pix_h,
sx, sy, ssw, ssh); sx, sy, ssw, ssh);
sx = sh->ds->conf.blur_size - sh->ds->conf.shadow_y + sh->w; sx = sh->ds->conf->blur_size - sh->ds->conf->shadow_y + sh->w;
sy = sh->ds->conf.blur_size - sh->ds->conf.shadow_y; sy = sh->ds->conf->blur_size - sh->ds->conf->shadow_y;
ssw = sh->ds->conf.blur_size + sh->ds->conf.shadow_x; ssw = sh->ds->conf->blur_size + sh->ds->conf->shadow_x;
ssh = sh->h; ssh = sh->h;
_ds_shadow_object_pixels_set(sh->object[2], pix, pix_w, pix_h, _ds_shadow_object_pixels_set(sh->object[2], pix, pix_w, pix_h,
sx, sy, ssw, ssh); sx, sy, ssw, ssh);
sx = 0; sx = 0;
sy = sh->ds->conf.blur_size - sh->ds->conf.shadow_y + sh->h; sy = sh->ds->conf->blur_size - sh->ds->conf->shadow_y + sh->h;
ssw = sh->w + (sh->ds->conf.blur_size * 2); ssw = sh->w + (sh->ds->conf->blur_size * 2);
ssh = sh->ds->conf.blur_size + sh->ds->conf.shadow_y; ssh = sh->ds->conf->blur_size + sh->ds->conf->shadow_y;
_ds_shadow_object_pixels_set(sh->object[3], pix, pix_w, pix_h, _ds_shadow_object_pixels_set(sh->object[3], pix, pix_w, pix_h,
sx, sy, ssw, ssh); sx, sy, ssw, ssh);
if (evas_object_visible_get(sh->object[0])) 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; if (v < 0.0) v = 0.0;
else if (v > 1.0) v = 1.0; else if (v > 1.0) v = 1.0;
if (ds->conf.shadow_darkness == v) return; if (ds->conf->shadow_darkness == v) return;
ds->conf.shadow_darkness = v; ds->conf->shadow_darkness = v;
for (l = ds->shadows; l; l = l->next) for (l = ds->shadows; l; l = l->next)
{ {
Shadow *sh; Shadow *sh;
@ -1051,7 +962,7 @@ _ds_config_darkness_set(Dropshadow *ds, double v)
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
evas_object_color_set(sh->object[i], evas_object_color_set(sh->object[i],
255, 255, 255, 255, 255, 255,
255 * ds->conf.shadow_darkness); 255 * ds->conf->shadow_darkness);
} }
e_config_save_queue(); e_config_save_queue();
} }
@ -1061,9 +972,9 @@ _ds_config_shadow_xy_set(Dropshadow *ds, int x, int y)
{ {
Evas_List *l; Evas_List *l;
if ((ds->conf.shadow_x == x) && (ds->conf.shadow_y == y)) return; if ((ds->conf->shadow_x == x) && (ds->conf->shadow_y == y)) return;
ds->conf.shadow_x = x; ds->conf->shadow_x = x;
ds->conf.shadow_y = y; ds->conf->shadow_y = y;
for (l = ds->shadows; l; l = l->next) for (l = ds->shadows; l; l = l->next)
{ {
Shadow *sh; Shadow *sh;
@ -1080,8 +991,8 @@ _ds_config_blur_set(Dropshadow *ds, int blur)
Evas_List *l; Evas_List *l;
if (blur < 0) blur = 0; if (blur < 0) blur = 0;
if (ds->conf.blur_size == blur) return; if (ds->conf->blur_size == blur) return;
ds->conf.blur_size = blur; ds->conf->blur_size = blur;
_ds_blur_init(ds); _ds_blur_init(ds);
for (l = ds->shadows; l; l = l->next) for (l = ds->shadows; l; l = l->next)
@ -1100,17 +1011,17 @@ _ds_blur_init(Dropshadow *ds)
int i; int i;
if (ds->table.gauss) free(ds->table.gauss); 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 = calloc(1, ds->table.gauss_size * sizeof(unsigned char));
ds->table.gauss[ds->conf.blur_size - 1] = 255; ds->table.gauss[ds->conf->blur_size - 1] = 255;
for (i = 1; i < (ds->conf.blur_size - 1); i++) for (i = 1; i < (ds->conf->blur_size - 1); i++)
{ {
double v; double v;
v = (double)i / (ds->conf.blur_size - 2); 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->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; _ds_gauss_int(-1.5 + (v * 3.0)) * 255.0;
} }
} }

View File

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