parent
4034863219
commit
63978e9abb
14 changed files with 671 additions and 51 deletions
@ -0,0 +1,95 @@ |
||||
/*
|
||||
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 |
||||
*/ |
||||
|
||||
#include "e.h" |
||||
|
||||
static void _e_color_dialog_button1_click(void *data, E_Dialog *edia); |
||||
static void _e_color_dialog_button2_click(void *data, E_Dialog *edia); |
||||
static void _e_color_dialog_free(E_Color_Dialog *dia); |
||||
|
||||
E_Color_Dialog * |
||||
e_color_dialog_new (E_Container *con)
|
||||
{ |
||||
E_Color_Dialog *dia; |
||||
Evas_Object *o; |
||||
Evas_Coord mw, mh; |
||||
|
||||
dia = E_OBJECT_ALLOC(E_File_Dialog, E_COLOR_DIALOG_TYPE, _e_color_dialog_free); |
||||
if(!dia) return NULL; |
||||
dia->dia = e_dialog_new(con, "E", "_test"); |
||||
e_dialog_title_set(dia->dia, "Color Selector"); |
||||
|
||||
dia->color = calloc(1, sizeof(E_Color)); |
||||
dia->color->a = 255; |
||||
|
||||
o = e_widget_csel_add(dia->dia->win->evas, dia->color); |
||||
evas_object_show(o); |
||||
e_widget_min_size_get(o, &mw, &mh); |
||||
e_dialog_content_set(dia->dia, o, 460, 260); |
||||
|
||||
/* buttons at the bottom */ |
||||
e_dialog_button_add(dia->dia, "OK", NULL, _e_color_dialog_button1_click, dia); |
||||
e_dialog_button_add(dia->dia, "Cancel", NULL, _e_color_dialog_button2_click, dia); |
||||
e_dialog_resizable_set(dia->dia, 1); |
||||
e_win_centered_set(dia->dia->win, 1); |
||||
|
||||
return dia; |
||||
} |
||||
|
||||
void |
||||
e_color_dialog_show (E_Color_Dialog *dia) |
||||
{ |
||||
e_dialog_show(dia->dia); |
||||
} |
||||
|
||||
void |
||||
e_color_dialog_title_set (E_Color_Dialog *dia, const char *title) |
||||
{ |
||||
e_dialog_title_set(dia->dia, title); |
||||
} |
||||
|
||||
void |
||||
e_color_dialog_select_callback_add(E_Color_Dialog *dia, void (*func)(E_Color_Dialog *dia, E_Color *color, void *data), void *data) |
||||
{ |
||||
dia->select_func = func; |
||||
dia->select_data = data; |
||||
} |
||||
|
||||
void |
||||
e_color_dialog_cancel_callback_add(E_Color_Dialog *dia, void (*func)(E_Color_Dialog *dia, E_Color *color, void *data), void *data) |
||||
{ |
||||
dia->cancel_func = func; |
||||
dia->cancel_data = data; |
||||
} |
||||
|
||||
static void |
||||
_e_color_dialog_button1_click(void *data, E_Dialog *edia) |
||||
{ |
||||
E_Color_Dialog *dia; |
||||
|
||||
dia = data; |
||||
if(dia->select_func && dia->color) |
||||
dia->select_func(dia, dia->color, dia->select_data); |
||||
_e_color_dialog_free(dia); |
||||
} |
||||
|
||||
static void |
||||
_e_color_dialog_button2_click(void *data, E_Dialog *edia) |
||||
{ |
||||
E_Color_Dialog *dia; |
||||
|
||||
dia = data; |
||||
if(dia->cancel_func && dia->color) |
||||
dia->cancel_func(dia, dia->color, dia->cancel_data); |
||||
_e_color_dialog_free(data);
|
||||
} |
||||
|
||||
static void |
||||
_e_color_dialog_free(E_Color_Dialog *dia) |
||||
{ |
||||
printf("DIALOG FREE!\n"); |
||||
e_object_unref(E_OBJECT(dia->dia)); |
||||
E_FREE(dia->color); |
||||
E_FREE(dia); |
||||
} |
@ -0,0 +1,36 @@ |
||||
/*
|
||||
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 |
||||
*/ |
||||
#ifdef E_TYPEDEFS |
||||
|
||||
typedef struct _E_Color_Dialog E_Color_Dialog; |
||||
|
||||
#else |
||||
#ifndef E_COLOR_DIALOG_H |
||||
#define E_COLOR_DIALOG_H |
||||
|
||||
#define E_COLOR_DIALOG_TYPE 0xE0b01026 |
||||
|
||||
struct _E_Color_Dialog |
||||
{ |
||||
E_Object e_obj_inherit; |
||||
|
||||
E_Container *con; |
||||
E_Dialog *dia; |
||||
|
||||
E_Color *color; |
||||
|
||||
void (*select_func)(E_Color_Dialog *dia, E_Color *color, void *data); |
||||
void *select_data; |
||||
void (*cancel_func)(E_Color_Dialog *dia, E_Color *color, void *data); |
||||
void *cancel_data; |
||||
}; |
||||
|
||||
EAPI E_Color_Dialog *e_color_dialog_new (E_Container *con); |
||||
EAPI void e_color_dialog_show (E_Color_Dialog *dia); |
||||
EAPI void e_color_dialog_title_set (E_Color_Dialog *dia, const char *title); |
||||
EAPI void e_color_dialog_select_callback_add(E_Color_Dialog *dia, void (*func)(E_Color_Dialog *dia, E_Color *color, void *data), void *data); |
||||
EAPI void e_color_dialog_cancel_callback_add(E_Color_Dialog *dia, void (*func)(E_Color_Dialog *dia, E_Color *color, void *data), void *data); |
||||
|
||||
#endif |
||||
#endif |
@ -0,0 +1,383 @@ |
||||
/*
|
||||
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 |
||||
*/ |
||||
#include "e.h" |
||||
|
||||
#define GRAD_H 0 |
||||
#define GRAD_V 1 |
||||
#define GRAD_DU 2 |
||||
#define GRAD_DD 3 |
||||
#define GRAD_RAD 4 |
||||
|
||||
typedef struct _Import Import; |
||||
|
||||
struct _Import
|
||||
{ |
||||
E_Config_Dialog *parent; |
||||
E_Config_Dialog_Data *cfdata; |
||||
|
||||
E_Dialog *dia; |
||||
Evas_Object *bg_obj; |
||||
Evas_Object *box_obj; |
||||
Evas_Object *content_obj; |
||||
Evas_Object *fsel_obj; |
||||
|
||||
Evas_Object *ok_obj; |
||||
Evas_Object *close_obj; |
||||
|
||||
Evas_Object *fill_h_obj; |
||||
Evas_Object *fill_v_obj; |
||||
Evas_Object *fill_du_obj; |
||||
Evas_Object *fill_dd_obj; |
||||
Evas_Object *fill_rad_obj; |
||||
Evas_Object *spread_obj; |
||||
Evas_Object *frame_obj; |
||||
|
||||
Ecore_Exe *exe; |
||||
Ecore_Event_Handler *exe_handler; |
||||
char *tmpf; |
||||
char *fdest; |
||||
}; |
||||
|
||||
struct _E_Config_Dialog_Data
|
||||
{ |
||||
char *name;
|
||||
int mode; |
||||
int spread; |
||||
|
||||
E_Color *color1, *color2; |
||||
}; |
||||
|
||||
static Ecore_Event_Handler *_import_edje_cc_exit_handler = NULL; |
||||
|
||||
static void _import_opt_disabled_set(Import *import, int disabled); |
||||
static void _import_path_save(Import *import); |
||||
static void _import_edj_gen(Import *import); |
||||
static int _import_cb_edje_cc_exit(void *data, int type, void *event); |
||||
static void _import_cb_delete(E_Win *win); |
||||
static void _import_cb_close(void *data, E_Dialog *dia); |
||||
static void _import_cb_ok(void *data, E_Dialog *dia); |
||||
|
||||
EAPI E_Dialog * |
||||
e_int_config_wallpaper_gradient(E_Config_Dialog *parent) |
||||
{ |
||||
Evas *evas; |
||||
E_Dialog *dia; |
||||
Import *import; |
||||
Evas_Object *o, *ol, *of, *ord, *ot; |
||||
Evas_Coord mw, mh; |
||||
E_Radio_Group *rg; |
||||
Evas_Coord w, h; |
||||
E_Config_Dialog_Data *cfdata; |
||||
|
||||
import = E_NEW(Import, 1); |
||||
if (!import) return NULL; |
||||
|
||||
dia = e_dialog_new(parent->con, "E", "_wallpaper_gradient_dialog"); |
||||
if (!dia)
|
||||
{
|
||||
free(import); |
||||
return NULL;
|
||||
} |
||||
|
||||
dia->win->data = import; |
||||
|
||||
cfdata = E_NEW(E_Config_Dialog_Data, 1); |
||||
cfdata->mode = GRAD_H; |
||||
cfdata->spread = 0; |
||||
import->cfdata = cfdata; |
||||
import->dia = dia; |
||||
|
||||
cfdata->name = strdup("gradient"); |
||||
|
||||
evas = e_win_evas_get(dia->win); |
||||
|
||||
import->parent = parent; |
||||
|
||||
e_dialog_title_set(dia, _("Create a gradient...")); |
||||
// e_win_delete_callback_set(dia->win, _import_cb_delete);
|
||||
|
||||
cfdata->color1 = calloc(1, sizeof(E_Color)); |
||||
cfdata->color1->a = 255; |
||||
cfdata->color2 = calloc(1, sizeof(E_Color)); |
||||
cfdata->color2->a = 255; |
||||
|
||||
// XXX load last used colors from config.
|
||||
|
||||
ol = e_widget_list_add(evas, 0, 0); |
||||
|
||||
ot = e_widget_table_add(evas, 0); |
||||
evas_object_show(ot); |
||||
|
||||
o = e_widget_label_add(evas, _("Name:")); |
||||
evas_object_show(o); |
||||
e_widget_table_object_append(ot, o, 1, 1, 1, 1, 0, 1, 0, 1); |
||||
|
||||
o = e_widget_label_add(evas, _("Color 1:")); |
||||
evas_object_show(o); |
||||
e_widget_table_object_append(ot, o, 1, 2, 1, 1, 0, 1, 0, 1); |
||||
|
||||
o = e_widget_label_add(evas, _("Color 2:")); |
||||
evas_object_show(o); |
||||
e_widget_table_object_append(ot, o, 1, 3, 1, 1, 0, 1, 0, 1); |
||||
|
||||
o = e_widget_entry_add(evas, &(cfdata->name)); |
||||
evas_object_show(o); |
||||
e_widget_table_object_append(ot, o, 2, 1, 1, 1, 1, 1, 1, 1); |
||||
|
||||
o = e_widget_entry_add(evas, &(cfdata->name)); |
||||
evas_object_show(o); |
||||
e_widget_table_object_append(ot, o, 2, 1, 1, 1, 1, 1, 1, 1); |
||||
|
||||
o = e_widget_color_well_add(evas, cfdata->color1, parent->con); |
||||
evas_object_show(o); |
||||
e_widget_table_object_append(ot, o, 2, 2, 1, 1, 1, 1, 1, 1); |
||||
|
||||
o = e_widget_color_well_add(evas, cfdata->color2, parent->con); |
||||
evas_object_show(o); |
||||
e_widget_table_object_append(ot, o, 2, 3, 1, 1, 1, 1, 1, 1); |
||||
|
||||
e_widget_list_object_append(ol, ot, 1, 1, 0.5); |
||||
|
||||
of = e_widget_framelist_add(evas, "Fill and Spread Options", 1); |
||||
|
||||
rg = e_widget_radio_group_new(&(cfdata->mode)); |
||||
|
||||
ord = e_widget_radio_icon_add(evas, _("Horizontal"), "enlightenment/gradient_h", 24, 24, GRAD_H, rg); |
||||
import->fill_h_obj = ord; |
||||
e_widget_framelist_object_append(of, ord); |
||||
|
||||
ord = e_widget_radio_icon_add(evas, _("Vertical"), "enlightenment/gradient_v", 24, 24, GRAD_V, rg); |
||||
import->fill_h_obj = ord; |
||||
e_widget_framelist_object_append(of, ord); |
||||
|
||||
ord = e_widget_radio_icon_add(evas, _("Diagonal Up"), "enlightenment/gradient_du", 24, 24, GRAD_DU, rg); |
||||
import->fill_h_obj = ord; |
||||
e_widget_framelist_object_append(of, ord); |
||||
|
||||
ord = e_widget_radio_icon_add(evas, _("Diagonal Down"), "enlightenment/gradient_dd", 24, 24, GRAD_DD, rg); |
||||
import->fill_h_obj = ord; |
||||
e_widget_framelist_object_append(of, ord); |
||||
|
||||
ord = e_widget_radio_icon_add(evas, _("Radial"), "enlightenment/gradient_rad", 24, 24, GRAD_RAD, rg); |
||||
import->fill_h_obj = ord; |
||||
e_widget_framelist_object_append(of, ord); |
||||
|
||||
e_widget_list_object_append(ol, of, 1, 1, 0.5); |
||||
|
||||
e_widget_min_size_get(ol, &mw, &mh); |
||||
e_dialog_content_set(dia, ol, mw, mh); |
||||
|
||||
e_dialog_button_add(dia, _("OK"), NULL, _import_cb_ok, cfdata); |
||||
e_dialog_button_add(dia, _("Cancel"), NULL, _import_cb_close, cfdata); |
||||
|
||||
_import_opt_disabled_set(import, 1); |
||||
e_dialog_resizable_set(dia, 1); |
||||
e_dialog_show(dia); |
||||
return dia; |
||||
} |
||||
|
||||
void |
||||
e_int_config_wallpaper_gradient_del(E_Dialog *dia) |
||||
{ |
||||
Import *import; |
||||
|
||||
import = dia->win->data; |
||||
|
||||
if (import->exe_handler) ecore_event_handler_del(import->exe_handler); |
||||
import->exe_handler = NULL; |
||||
if (import->tmpf) unlink(import->tmpf); |
||||
E_FREE(import->tmpf); |
||||
E_FREE(import->fdest); |
||||
import->exe = NULL; |
||||
|
||||
e_int_config_wallpaper_gradient_done(import->parent); |
||||
E_FREE(import->cfdata->name); |
||||
E_FREE(import->cfdata->color1); |
||||
E_FREE(import->cfdata->color2); |
||||
E_FREE(import->cfdata); |
||||
E_FREE(import); |
||||
e_object_unref(E_OBJECT(dia)); |
||||
|
||||
} |
||||
|
||||
static void |
||||
_import_opt_disabled_set(Import *import, int disabled) |
||||
{ |
||||
} |
||||
|
||||
static void |
||||
_import_config_save(Import *import) |
||||
{ |
||||
// XXX save last used colors
|
||||
e_config_save_queue(); |
||||
} |
||||
|
||||
static void
|
||||
_import_edj_gen(Import *import) |
||||
{ |
||||
Evas *evas; |
||||
Evas_Object *img; |
||||
int fd, num = 1; |
||||
int w = 0, h = 0; |
||||
const char *file; |
||||
char buf[4096], cmd[4096], tmpn[4096], ipart[4096], enc[128]; |
||||
char *imgdir = NULL, *homedir, *fstrip; |
||||
int cr = 255, cg = 255, cb = 255, ca = 255; |
||||
FILE *f; |
||||
|
||||
int angle; |
||||
float fill_origin_x, fill_origin_y;
|
||||
char *type; |
||||
|
||||
evas = e_win_evas_get(import->dia->win); |
||||
|
||||
file = import->cfdata->name; |
||||
homedir = e_user_homedir_get(); |
||||
if (!homedir) return; |
||||
fstrip = ecore_file_strip_ext(file); |
||||
if (!fstrip) |
||||
{ |
||||
free(homedir); |
||||
return; |
||||
} |
||||
snprintf(buf, sizeof(buf), "%s/.e/e/backgrounds/%s.edj", homedir, fstrip); |
||||
while (ecore_file_exists(buf)) |
||||
{ |
||||
snprintf(buf, sizeof(buf), "%s/.e/e/backgrounds/%s-%i.edj", homedir, fstrip, num); |
||||
num++; |
||||
} |
||||
free(fstrip); |
||||
free(homedir); |
||||
strcpy(tmpn, "/tmp/e_bgdlg_new.edc-tmp-XXXXXX"); |
||||
fd = mkstemp(tmpn); |
||||
if (fd < 0)
|
||||
{ |
||||
printf("Error Creating tmp file: %s\n", strerror(errno)); |
||||
return; |
||||
} |
||||
close(fd); |
||||
|
||||
f = fopen(tmpn, "w"); |
||||
if (!f)
|
||||
{ |
||||
printf("Cannot open %s for writing\n", tmpn); |
||||
return; |
||||
} |
||||
|
||||
fstrip = strdup(e_util_filename_escape(file)); |
||||
|
||||
type = "linear"; |
||||
angle = 0; |
||||
fill_origin_x = 0; |
||||
fill_origin_y = 0; |
||||
switch (import->cfdata->mode)
|
||||
{ |
||||
case GRAD_H: |
||||
angle = 270; |
||||
break; |
||||
case GRAD_V: |
||||
angle = 0; |
||||
break; |
||||
case GRAD_DU: |
||||
angle = 225; |
||||
break; |
||||
case GRAD_DD: |
||||
angle = 315; |
||||
break; |
||||
case GRAD_RAD: |
||||
fill_origin_x = 0.5; |
||||
fill_origin_y = 0.5; |
||||
type = "radial"; |
||||
break; |
||||
default: |
||||
/* won't happen */ |
||||
break; |
||||
} |
||||
|
||||
fprintf(f, |
||||
"spectra { spectrum { name: \"gradient\"; color: %d %d %d 255 1; color: %d %d %d 255 1; } }\n" |
||||
"collections {\n" |
||||
"group {\n" |
||||
"name: \"desktop/background\";\n" |
||||
"parts {\n" |
||||
"part {\n" |
||||
" name: \"gradient\";\n" |
||||
" type: GRADIENT;\n" |
||||
" description {\n" |
||||
" state: \"default\" 0.0;\n" |
||||
" gradient.spectrum: \"gradient\";\n" |
||||
" fill.angle: %d;\n" |
||||
" gradient.type: \"%s\";\n" |
||||
" fill.origin.relative: %.2f %.2f;\n" |
||||
" }\n" |
||||
"}\n" |
||||
"}\n", |
||||
import->cfdata->color1->r, import->cfdata->color1->g, import->cfdata->color1->b,
|
||||
import->cfdata->color2->r, import->cfdata->color2->g, import->cfdata->color2->b,
|
||||
angle, |
||||
type, |
||||
fill_origin_x, fill_origin_y); |
||||
|
||||
|
||||
free(fstrip); |
||||
|
||||
fclose(f); |
||||
|
||||
snprintf(cmd, sizeof(cmd), "edje_cc -v %s %s",
|
||||
tmpn, e_util_filename_escape(buf)); |
||||
|
||||
import->tmpf = strdup(tmpn); |
||||
import->fdest = strdup(buf); |
||||
import->exe_handler = ecore_event_handler_add(ECORE_EXE_EVENT_DEL, _import_cb_edje_cc_exit, import); |
||||
import->exe = ecore_exe_run(cmd, NULL);
|
||||
} |
||||
|
||||
static int |
||||
_import_cb_edje_cc_exit(void *data, int type, void *event) |
||||
{ |
||||
Import *import; |
||||
Ecore_Exe_Event_Del *ev; |
||||
|
||||
ev = event; |
||||
import = data; |
||||
if (ev->exe != import->exe) return 1; |
||||
|
||||
if (ev->exit_code != 0) |
||||
{ |
||||
e_util_dialog_show(_("Gradient Creation Error"), |
||||
_("For some reason, Enlightenment was unable to create a gradient.")); |
||||
} |
||||
|
||||
e_int_config_wallpaper_update(import->parent, import->fdest); |
||||
|
||||
e_int_config_wallpaper_gradient_del(import->dia); |
||||
return 0; |
||||
} |
||||
|
||||
static void
|
||||
_import_cb_delete(E_Win *win)
|
||||
{ |
||||
} |
||||
|
||||
static void
|
||||
_import_cb_close(void *data, E_Dialog *dia)
|
||||
{ |
||||
e_int_config_wallpaper_gradient_del(dia); |
||||
} |
||||
|
||||
static void
|
||||
_import_cb_ok(void *data, E_Dialog *dia)
|
||||
{ |
||||
Import *import; |
||||
|
||||
import = dia->win->data; |
||||
|
||||
if (dia && import->cfdata->name) |
||||
{ |
||||
_import_edj_gen(import); |
||||
return; |
||||
} |
||||
e_int_config_wallpaper_gradient_del(dia); |
||||
} |
||||
|
@ -0,0 +1,10 @@ |
||||
#ifdef E_TYPEDEFS |
||||
#else |
||||
#ifndef E_INT_CONFIG_WALLPAPER_GRADIENT_H |
||||
#define E_INT_CONFIG_WALLPAPER_GRADIENT_H |
||||
|
||||
EAPI E_Dialog *e_int_config_wallpaper_gradient(E_Config_Dialog *parent); |
||||
EAPI void e_int_config_wallpaper_gradient_del(E_Dialog *dia); |
||||
|
||||
#endif |
||||
#endif |
@ -1,7 +1,7 @@ |
||||
#ifndef E_WIDGET_COLOR_WELL_H |
||||
#define E_WIDGET_COLOR_WELL_H |
||||
|
||||
void e_widget_color_well_update(Evas_Object *obj); |
||||
Evas_Object *e_widget_color_well_add(Evas *evas, E_Color *color); |
||||
EAPI Evas_Object *e_widget_color_well_add (Evas *evas, E_Color *color, E_Container *con); |
||||
EAPI void e_widget_color_well_update (Evas_Object *obj); |
||||
|
||||
#endif |
||||
|
Loading…
Reference in new issue