Ephoto: Move common editing code to one place.

This commit is contained in:
Stephen okra Houston 2016-03-23 15:14:21 -05:00
parent d5b7d24082
commit 4b8ea0492b
7 changed files with 254 additions and 347 deletions

View File

@ -29,7 +29,8 @@ ephoto_SOURCES = \
ephoto_bcg.c \
ephoto_hsv.c \
ephoto_filters.c \
ephoto_color.c
ephoto_color.c \
ephoto_editor.c
noinst_HEADERS = ephoto.h
EXTRA_DIST = ephoto.h

View File

@ -88,6 +88,9 @@ void ephoto_thumb_browser_update(Ephoto *ephoto, Ephoto_Entry *entry);
/* smart callbacks called: "selected" - an item in the thumb browser is
* selected. The selected Ephoto_Entry is passed as event_info argument. */
Evas_Object *ephoto_editor_add(Evas_Object *parent, const char *title,
const char *data_name, void *data);
void ephoto_editor_del(Evas_Object *obj);
void ephoto_cropper_add(Evas_Object *main, Evas_Object *parent,
Evas_Object *image_parent, Evas_Object *image);
void ephoto_bcg_add(Evas_Object *main, Evas_Object *parent,
@ -284,5 +287,8 @@ extern int EPHOTO_EVENT_ENTRY_CREATE;
extern int EPHOTO_EVENT_POPULATE_START;
extern int EPHOTO_EVENT_POPULATE_END;
extern int EPHOTO_EVENT_POPULATE_ERROR;
extern int EPHOTO_EVENT_EDITOR_RESET;
extern int EPHOTO_EVENT_EDITOR_APPLY;
extern int EPHOTO_EVENT_EDITOR_CANCEL;
#endif

View File

@ -6,10 +6,11 @@ struct _Ephoto_BCG
Evas_Object *main;
Evas_Object *parent;
Evas_Object *image;
Evas_Object *frame;
Evas_Object *editor;
Evas_Object *bslider;
Evas_Object *cslider;
Evas_Object *gslider;
Eina_List *handlers;
int contrast;
int brightness;
double gamma;
@ -248,8 +249,8 @@ _gamma_slider_changed(void *data, Evas_Object *obj,
_ephoto_bcg_adjust_contrast(ebcg, ebcg->contrast, image_data_two);
}
static void
_bcg_reset(void *data, Evas_Object *obj EINA_UNUSED,
static Eina_Bool
_bcg_reset(void *data, int type EINA_UNUSED,
void *event_info EINA_UNUSED)
{
Ephoto_BCG *ebcg = data;
@ -261,10 +262,12 @@ _bcg_reset(void *data, Evas_Object *obj EINA_UNUSED,
ebcg->contrast = 0;
ebcg->gamma = 1;
_brightness_slider_changed(ebcg, ebcg->bslider, NULL);
return ECORE_CALLBACK_PASS_ON;
}
static void
_bcg_apply(void *data, Evas_Object *obj EINA_UNUSED,
static Eina_Bool
_bcg_apply(void *data, int type EINA_UNUSED,
void *event_info EINA_UNUSED)
{
Ephoto_BCG *ebcg = data;
@ -277,11 +280,13 @@ _bcg_apply(void *data, Evas_Object *obj EINA_UNUSED,
evas_object_image_size_get(elm_image_object_get(ebcg->image), &w, &h);
ephoto_single_browser_image_data_update(ebcg->main, ebcg->image, EINA_TRUE,
image_data, w, h);
evas_object_del(ebcg->frame);
ephoto_editor_del(ebcg->editor);
return ECORE_CALLBACK_PASS_ON;
}
static void
_bcg_cancel(void *data, Evas_Object *obj EINA_UNUSED,
static Eina_Bool
_bcg_cancel(void *data, int type EINA_UNUSED,
void *event_info EINA_UNUSED)
{
Ephoto_BCG *ebcg = data;
@ -294,15 +299,20 @@ _bcg_cancel(void *data, Evas_Object *obj EINA_UNUSED,
ebcg->gamma = 1;
_brightness_slider_changed(ebcg, ebcg->bslider, NULL);
ephoto_single_browser_cancel_editing(ebcg->main, ebcg->image);
evas_object_del(ebcg->frame);
ephoto_editor_del(ebcg->editor);
return ECORE_CALLBACK_PASS_ON;
}
static void
_frame_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
_editor_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
Ephoto_BCG *ebcg = data;
Ecore_Event_Handler *handler;
EINA_LIST_FREE(ebcg->handlers, handler)
ecore_event_handler_del(handler);
free(ebcg->original_im_data);
free(ebcg);
}
@ -310,7 +320,7 @@ _frame_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
void
ephoto_bcg_add(Evas_Object *main, Evas_Object *parent, Evas_Object *image)
{
Evas_Object *box, *slider, *ic, *button;
Evas_Object *slider;
Ephoto_BCG *ebcg;
unsigned int *im_data;
@ -334,39 +344,26 @@ ephoto_bcg_add(Evas_Object *main, Evas_Object *parent, Evas_Object *image)
memcpy(ebcg->original_im_data, im_data,
sizeof(unsigned int) * ebcg->w * ebcg->h);
ebcg->frame = elm_frame_add(parent);
elm_object_text_set(ebcg->frame, _("Brightness/Contrast/Gamma"));
evas_object_size_hint_weight_set(ebcg->frame, 0.3, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(ebcg->frame,
EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_box_pack_end(parent, ebcg->frame);
evas_object_data_set(ebcg->frame, "ebcg", ebcg);
evas_object_event_callback_add(ebcg->frame, EVAS_CALLBACK_DEL, _frame_del,
ebcg->editor = ephoto_editor_add(parent, _("Brightness/Contrast/Gamma"),
"ebcg", ebcg);
evas_object_event_callback_add(ebcg->editor, EVAS_CALLBACK_DEL, _editor_del,
ebcg);
evas_object_show(ebcg->frame);
box = elm_box_add(ebcg->frame);
elm_box_horizontal_set(box, EINA_FALSE);
evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_object_content_set(ebcg->frame, box);
evas_object_show(box);
slider = elm_slider_add(box);
elm_object_text_set(slider, _("Brightness"));
elm_slider_min_max_set(slider, -100, 100);
elm_slider_step_set(slider, 1);
elm_slider_value_set(slider, 0);
elm_slider_unit_format_set(slider, "%1.0f");
slider = elm_slider_add(ebcg->editor);
elm_object_text_set(slider, _("Gamma"));
elm_slider_min_max_set(slider, -0.1, 3);
elm_slider_step_set(slider, .1);
elm_slider_value_set(slider, 1);
elm_slider_unit_format_set(slider, "%1.2f");
evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, 0.5);
evas_object_smart_callback_add(slider, "delay,changed",
_brightness_slider_changed, ebcg);
elm_box_pack_end(box, slider);
_gamma_slider_changed, ebcg);
elm_box_pack_start(ebcg->editor, slider);
evas_object_show(slider);
ebcg->bslider = slider;
ebcg->gslider = slider;
slider = elm_slider_add(box);
slider = elm_slider_add(ebcg->editor);
elm_object_text_set(slider, _("Contrast"));
elm_slider_min_max_set(slider, -100, 100);
elm_slider_step_set(slider, 1);
@ -376,65 +373,36 @@ ephoto_bcg_add(Evas_Object *main, Evas_Object *parent, Evas_Object *image)
evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, 0.5);
evas_object_smart_callback_add(slider, "delay,changed",
_contrast_slider_changed, ebcg);
elm_box_pack_end(box, slider);
elm_box_pack_start(ebcg->editor, slider);
evas_object_show(slider);
ebcg->cslider = slider;
slider = elm_slider_add(box);
elm_object_text_set(slider, _("Gamma"));
elm_slider_min_max_set(slider, 0.1, 3);
elm_slider_step_set(slider, .1);
elm_slider_value_set(slider, 1);
elm_slider_unit_format_set(slider, "%1.2f");
slider = elm_slider_add(ebcg->editor);
elm_object_text_set(slider, _("Brightness"));
elm_slider_min_max_set(slider, -100, 100);
elm_slider_step_set(slider, 1);
elm_slider_value_set(slider, 0);
elm_slider_unit_format_set(slider, "%1.0f");
evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, 0.5);
evas_object_smart_callback_add(slider, "delay,changed",
_gamma_slider_changed, ebcg);
elm_box_pack_end(box, slider);
_brightness_slider_changed, ebcg);
elm_box_pack_start(ebcg->editor, slider);
evas_object_show(slider);
ebcg->gslider = slider;
ebcg->bslider = slider;
ic = elm_icon_add(box);
elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME);
evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
elm_icon_standard_set(ic, "edit-undo");
button = elm_button_add(box);
elm_object_text_set(button, _("Reset"));
elm_object_part_content_set(button, "icon", ic);
evas_object_smart_callback_add(button, "clicked", _bcg_reset, ebcg);
evas_object_size_hint_weight_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_box_pack_end(box, button);
evas_object_show(button);
ic = elm_icon_add(box);
elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME);
evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
elm_icon_standard_set(ic, "document-save");
button = elm_button_add(box);
elm_object_text_set(button, _("Apply"));
elm_object_part_content_set(button, "icon", ic);
evas_object_smart_callback_add(button, "clicked", _bcg_apply, ebcg);
evas_object_size_hint_weight_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_box_pack_end(box, button);
evas_object_show(button);
ic = elm_icon_add(box);
elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME);
evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
elm_icon_standard_set(ic, "window-close");
button = elm_button_add(box);
elm_object_text_set(button, _("Cancel"));
elm_object_part_content_set(button, "icon", ic);
evas_object_smart_callback_add(button, "clicked", _bcg_cancel, ebcg);
evas_object_size_hint_weight_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_box_pack_end(box, button);
evas_object_show(button);
ebcg->handlers =
eina_list_append(ebcg->handlers,
ecore_event_handler_add(EPHOTO_EVENT_EDITOR_RESET,
_bcg_reset, ebcg));
ebcg->handlers =
eina_list_append(ebcg->handlers,
ecore_event_handler_add(EPHOTO_EVENT_EDITOR_APPLY,
_bcg_apply, ebcg));
ebcg->handlers =
eina_list_append(ebcg->handlers,
ecore_event_handler_add(EPHOTO_EVENT_EDITOR_CANCEL,
_bcg_cancel, ebcg));
return;

View File

@ -6,10 +6,11 @@ struct _Ephoto_Color
Evas_Object *main;
Evas_Object *parent;
Evas_Object *image;
Evas_Object *frame;
Evas_Object *editor;
Evas_Object *bslider;
Evas_Object *gslider;
Evas_Object *rslider;
Eina_List *handlers;
int blue;
int green;
int red;
@ -233,8 +234,8 @@ _blue_slider_changed(void *data, Evas_Object *obj,
_ephoto_color_adjust_green(eco, eco->green, image_data_two);
}
static void
_color_reset(void *data, Evas_Object *obj EINA_UNUSED,
static Eina_Bool
_color_reset(void *data, int type EINA_UNUSED,
void *event_info EINA_UNUSED)
{
Ephoto_Color *eco = data;
@ -246,10 +247,12 @@ _color_reset(void *data, Evas_Object *obj EINA_UNUSED,
eco->green = 0;
eco->blue = 0;
_red_slider_changed(eco, eco->rslider, NULL);
return ECORE_CALLBACK_PASS_ON;
}
static void
_color_apply(void *data, Evas_Object *obj EINA_UNUSED,
static Eina_Bool
_color_apply(void *data, int type EINA_UNUSED,
void *event_info EINA_UNUSED)
{
Ephoto_Color *eco = data;
@ -262,11 +265,13 @@ _color_apply(void *data, Evas_Object *obj EINA_UNUSED,
evas_object_image_size_get(elm_image_object_get(eco->image), &w, &h);
ephoto_single_browser_image_data_update(eco->main, eco->image, EINA_TRUE,
image_data, w, h);
evas_object_del(eco->frame);
ephoto_editor_del(eco->editor);
return ECORE_CALLBACK_PASS_ON;
}
static void
_color_cancel(void *data, Evas_Object *obj EINA_UNUSED,
static Eina_Bool
_color_cancel(void *data, int type EINA_UNUSED,
void *event_info EINA_UNUSED)
{
Ephoto_Color *eco = data;
@ -279,15 +284,20 @@ _color_cancel(void *data, Evas_Object *obj EINA_UNUSED,
eco->blue = 0;
_red_slider_changed(eco, eco->rslider, NULL);
ephoto_single_browser_cancel_editing(eco->main, eco->image);
evas_object_del(eco->frame);
ephoto_editor_del(eco->editor);
return ECORE_CALLBACK_PASS_ON;
}
static void
_frame_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
_editor_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
Ephoto_Color *eco = data;
Ecore_Event_Handler *handler;
EINA_LIST_FREE(eco->handlers, handler)
ecore_event_handler_del(handler);
free(eco->original_im_data);
free(eco);
}
@ -295,7 +305,7 @@ _frame_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
void
ephoto_color_add(Evas_Object *main, Evas_Object *parent, Evas_Object *image)
{
Evas_Object *box, *slider, *ic, *button;
Evas_Object *slider;
Ephoto_Color *eco;
unsigned int *im_data;
@ -319,52 +329,12 @@ ephoto_color_add(Evas_Object *main, Evas_Object *parent, Evas_Object *image)
memcpy(eco->original_im_data, im_data,
sizeof(unsigned int) * eco->w * eco->h);
eco->frame = elm_frame_add(parent);
elm_object_text_set(eco->frame, _("Adjust Color Levels"));
evas_object_size_hint_weight_set(eco->frame, 0.3, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(eco->frame, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_box_pack_end(parent, eco->frame);
evas_object_data_set(eco->frame, "eco", eco);
evas_object_event_callback_add(eco->frame, EVAS_CALLBACK_DEL, _frame_del,
eco->editor = ephoto_editor_add(parent, _("Adjust Color Levels"),
"eco", eco);
evas_object_event_callback_add(eco->editor, EVAS_CALLBACK_DEL, _editor_del,
eco);
evas_object_show(eco->frame);
box = elm_box_add(eco->frame);
elm_box_horizontal_set(box, EINA_FALSE);
evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_object_content_set(eco->frame, box);
evas_object_show(box);
slider = elm_slider_add(box);
elm_object_text_set(slider, _("Red"));
elm_slider_min_max_set(slider, -100, 100);
elm_slider_step_set(slider, 1);
elm_slider_value_set(slider, 0);
elm_slider_unit_format_set(slider, "%1.0f");
evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, 0.5);
evas_object_smart_callback_add(slider, "delay,changed", _red_slider_changed,
eco);
elm_box_pack_end(box, slider);
evas_object_show(slider);
eco->rslider = slider;
slider = elm_slider_add(box);
elm_object_text_set(slider, _("Green"));
elm_slider_min_max_set(slider, -100, 100);
elm_slider_step_set(slider, 1);
elm_slider_value_set(slider, 0);
elm_slider_unit_format_set(slider, "%1.0f");
evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, 0.5);
evas_object_smart_callback_add(slider, "delay,changed",
_green_slider_changed, eco);
elm_box_pack_end(box, slider);
evas_object_show(slider);
eco->gslider = slider;
slider = elm_slider_add(box);
slider = elm_slider_add(eco->editor);
elm_object_text_set(slider, _("Blue"));
elm_slider_min_max_set(slider, -100, 100);
elm_slider_step_set(slider, 1);
@ -374,51 +344,50 @@ ephoto_color_add(Evas_Object *main, Evas_Object *parent, Evas_Object *image)
evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, 0.5);
evas_object_smart_callback_add(slider, "delay,changed",
_blue_slider_changed, eco);
elm_box_pack_end(box, slider);
elm_box_pack_start(eco->editor, slider);
evas_object_show(slider);
eco->bslider = slider;
ic = elm_icon_add(box);
elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME);
evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
elm_icon_standard_set(ic, "edit-undo");
slider = elm_slider_add(eco->editor);
elm_object_text_set(slider, _("Green"));
elm_slider_min_max_set(slider, -100, 100);
elm_slider_step_set(slider, 1);
elm_slider_value_set(slider, 0);
elm_slider_unit_format_set(slider, "%1.0f");
evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, 0.5);
evas_object_smart_callback_add(slider, "delay,changed",
_green_slider_changed, eco);
elm_box_pack_start(eco->editor, slider);
evas_object_show(slider);
eco->gslider = slider;
button = elm_button_add(box);
elm_object_text_set(button, _("Reset"));
elm_object_part_content_set(button, "icon", ic);
evas_object_smart_callback_add(button, "clicked", _color_reset, eco);
evas_object_size_hint_weight_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_box_pack_end(box, button);
evas_object_show(button);
slider = elm_slider_add(eco->editor);
elm_object_text_set(slider, _("Red"));
elm_slider_min_max_set(slider, -100, 100);
elm_slider_step_set(slider, 1);
elm_slider_value_set(slider, 0);
elm_slider_unit_format_set(slider, "%1.0f");
evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, 0.5);
evas_object_smart_callback_add(slider, "delay,changed",
_red_slider_changed, eco);
elm_box_pack_start(eco->editor, slider);
evas_object_show(slider);
eco->rslider = slider;
ic = elm_icon_add(box);
elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME);
evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
elm_icon_standard_set(ic, "document-save");
button = elm_button_add(box);
elm_object_text_set(button, _("Apply"));
elm_object_part_content_set(button, "icon", ic);
evas_object_smart_callback_add(button, "clicked", _color_apply, eco);
evas_object_size_hint_weight_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_box_pack_end(box, button);
evas_object_show(button);
ic = elm_icon_add(box);
elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME);
evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
elm_icon_standard_set(ic, "window-close");
button = elm_button_add(box);
elm_object_text_set(button, _("Cancel"));
elm_object_part_content_set(button, "icon", ic);
evas_object_smart_callback_add(button, "clicked", _color_cancel, eco);
evas_object_size_hint_weight_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_box_pack_end(box, button);
evas_object_show(button);
eco->handlers =
eina_list_append(eco->handlers,
ecore_event_handler_add(EPHOTO_EVENT_EDITOR_RESET,
_color_reset, eco));
eco->handlers =
eina_list_append(eco->handlers,
ecore_event_handler_add(EPHOTO_EVENT_EDITOR_APPLY,
_color_apply, eco));
eco->handlers =
eina_list_append(eco->handlers,
ecore_event_handler_add(EPHOTO_EVENT_EDITOR_CANCEL,
_color_cancel, eco));
return;

View File

@ -7,12 +7,13 @@ struct _Ephoto_Cropper
Evas_Object *parent;
Evas_Object *image_parent;
Evas_Object *box;
Evas_Object *frame;
Evas_Object *editor;
Evas_Object *image;
Evas_Object *cropper;
Evas_Object *layout;
Evas_Object *cropw;
Evas_Object *croph;
Eina_List *handlers;
int startx;
int starty;
int offsetx;
@ -221,10 +222,10 @@ _apply_crop(void *data, Evas_Object *obj EINA_UNUSED,
elm_table_pack(ec->image_parent, ec->image, 0, 0, 1, 1);
ephoto_single_browser_image_data_update(ec->main, ec->image, EINA_TRUE,
idata_new, nw, nh);
evas_object_del(ec->frame);
evas_object_del(ec->cropper);
evas_object_del(ec->layout);
evas_object_del(ec->box);
ephoto_editor_del(ec->editor);
}
static void
@ -237,10 +238,10 @@ _cancel_crop(void *data, Evas_Object *obj EINA_UNUSED,
elm_layout_content_unset(ec->layout, "ephoto.swallow.image");
elm_table_pack(ec->image_parent, ec->image, 0, 0, 1, 1);
ephoto_single_browser_cancel_editing(ec->main, ec->image);
evas_object_del(ec->frame);
evas_object_del(ec->cropper);
evas_object_del(ec->layout);
evas_object_del(ec->box);
ephoto_editor_del(ec->editor);
}
static void
@ -585,11 +586,42 @@ _image_resize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
EDJE_MESSAGE_INT_SET, 1, msg);
}
static Eina_Bool
_crop_reset(void *data, int type EINA_UNUSED,
void *event_info EINA_UNUSED)
{
_reset_crop(data, NULL, NULL);
return ECORE_CALLBACK_PASS_ON;
}
static Eina_Bool
_crop_apply(void *data, int type EINA_UNUSED,
void *event_info EINA_UNUSED)
{
_apply_crop(data, NULL, NULL);
return ECORE_CALLBACK_PASS_ON;
}
static Eina_Bool
_crop_cancel(void *data, int type EINA_UNUSED,
void *event_info EINA_UNUSED)
{
_cancel_crop(data, NULL, NULL);
return ECORE_CALLBACK_PASS_ON;
}
static void
_cropper_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
_editor_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
Ephoto_Cropper *ec = data;
Ecore_Event_Handler *handler;
EINA_LIST_FREE(ec->handlers, handler)
ecore_event_handler_del(handler);
free(ec);
}
@ -598,7 +630,6 @@ void
ephoto_cropper_add(Evas_Object *main, Evas_Object *parent,
Evas_Object *image_parent, Evas_Object *image)
{
Evas_Object *vbox, *ic, *button;
Ephoto_Cropper *ec;
int w, h;
@ -669,38 +700,13 @@ ephoto_cropper_add(Evas_Object *main, Evas_Object *parent,
evas_object_event_callback_add(ec->layout, EVAS_CALLBACK_RESIZE,
_image_resize, ec);
evas_object_event_callback_add(ec->box, EVAS_CALLBACK_DEL,
_cropper_del, ec);
ec->frame = elm_frame_add(parent);
elm_object_text_set(ec->frame, _("Crop Image"));
evas_object_size_hint_weight_set(ec->frame, 0.3, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(ec->frame, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_box_pack_end(parent, ec->frame);
evas_object_data_set(ec->frame, "ec", ec);
evas_object_show(ec->frame);
ec->editor = ephoto_editor_add(parent, _("Crop Image"),
"ec", ec);
evas_object_event_callback_add(ec->editor, EVAS_CALLBACK_DEL,
_editor_del, ec);
vbox = elm_box_add(ec->frame);
elm_box_horizontal_set(vbox, EINA_FALSE);
evas_object_size_hint_weight_set(vbox, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(vbox, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_object_content_set(ec->frame, vbox);
evas_object_show(vbox);
ec->cropw = elm_slider_add(vbox);
elm_slider_min_max_set(ec->cropw, 1, w);
elm_slider_step_set(ec->cropw, 1);
elm_slider_unit_format_set(ec->cropw, "%1.0f");
elm_object_text_set(ec->cropw, _("Width"));
evas_object_size_hint_weight_set(ec->cropw, EVAS_HINT_EXPAND,
EVAS_HINT_FILL);
evas_object_size_hint_align_set(ec->cropw, EVAS_HINT_FILL, 0.5);
elm_box_pack_end(vbox, ec->cropw);
evas_object_smart_callback_add(ec->cropw, "slider,drag,stop",
_cropper_changed_width, ec);
evas_object_show(ec->cropw);
ec->croph = elm_slider_add(vbox);
ec->croph = elm_slider_add(ec->editor);
elm_slider_min_max_set(ec->croph, 1, h);
elm_slider_step_set(ec->croph, 1);
elm_slider_unit_format_set(ec->croph, "%1.0f");
@ -708,52 +714,36 @@ ephoto_cropper_add(Evas_Object *main, Evas_Object *parent,
evas_object_size_hint_weight_set(ec->croph, EVAS_HINT_EXPAND,
EVAS_HINT_FILL);
evas_object_size_hint_align_set(ec->croph, EVAS_HINT_FILL, 0.5);
elm_box_pack_end(vbox, ec->croph);
elm_box_pack_start(ec->editor, ec->croph);
evas_object_smart_callback_add(ec->croph, "slider,drag,stop",
_cropper_changed_height, ec);
evas_object_show(ec->croph);
ic = elm_icon_add(vbox);
elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME);
evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
elm_icon_standard_set(ic, "edit-undo");
ec->cropw = elm_slider_add(ec->editor);
elm_slider_min_max_set(ec->cropw, 1, w);
elm_slider_step_set(ec->cropw, 1);
elm_slider_unit_format_set(ec->cropw, "%1.0f");
elm_object_text_set(ec->cropw, _("Width"));
evas_object_size_hint_weight_set(ec->cropw, EVAS_HINT_EXPAND,
EVAS_HINT_FILL);
evas_object_size_hint_align_set(ec->cropw, EVAS_HINT_FILL, 0.5);
elm_box_pack_start(ec->editor, ec->cropw);
evas_object_smart_callback_add(ec->cropw, "slider,drag,stop",
_cropper_changed_width, ec);
evas_object_show(ec->cropw);
button = elm_button_add(vbox);
elm_object_text_set(button, _("Reset"));
elm_object_part_content_set(button, "icon", ic);
evas_object_smart_callback_add(button, "clicked", _reset_crop, ec);
evas_object_size_hint_weight_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_box_pack_end(vbox, button);
evas_object_show(button);
ic = elm_icon_add(vbox);
elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME);
evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
elm_icon_standard_set(ic, "document-save");
button = elm_button_add(vbox);
elm_object_text_set(button, _("Apply"));
elm_object_part_content_set(button, "icon", ic);
evas_object_smart_callback_add(button, "clicked", _apply_crop, ec);
evas_object_size_hint_weight_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_box_pack_end(vbox, button);
evas_object_show(button);
ic = elm_icon_add(vbox);
elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME);
evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
elm_icon_standard_set(ic, "window-close");
button = elm_button_add(vbox);
elm_object_text_set(button, _("Cancel"));
elm_object_part_content_set(button, "icon", ic);
evas_object_smart_callback_add(button, "clicked", _cancel_crop, ec);
evas_object_size_hint_weight_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_box_pack_end(vbox, button);
evas_object_show(button);
ec->handlers =
eina_list_append(ec->handlers,
ecore_event_handler_add(EPHOTO_EVENT_EDITOR_RESET,
_crop_reset, ec));
ec->handlers =
eina_list_append(ec->handlers,
ecore_event_handler_add(EPHOTO_EVENT_EDITOR_APPLY,
_crop_apply, ec));
ec->handlers =
eina_list_append(ec->handlers,
ecore_event_handler_add(EPHOTO_EVENT_EDITOR_CANCEL,
_crop_cancel, ec));
return;

View File

@ -6,10 +6,11 @@ struct _Ephoto_HSV
Evas_Object *main;
Evas_Object *parent;
Evas_Object *image;
Evas_Object *frame;
Evas_Object *editor;
Evas_Object *hslider;
Evas_Object *sslider;
Evas_Object *vslider;
Eina_List *handlers;
double hue;
double saturation;
double value;
@ -255,8 +256,8 @@ _value_slider_changed(void *data, Evas_Object *obj,
_ephoto_hsv_adjust_saturation(ehsv, ehsv->saturation, image_data_two);
}
static void
_hsv_reset(void *data, Evas_Object *obj EINA_UNUSED,
static Eina_Bool
_hsv_reset(void *data, int type EINA_UNUSED,
void *event_info EINA_UNUSED)
{
Ephoto_HSV *ehsv = data;
@ -268,10 +269,12 @@ _hsv_reset(void *data, Evas_Object *obj EINA_UNUSED,
ehsv->saturation = 0;
ehsv->value = 0;
_hue_slider_changed(ehsv, ehsv->hslider, NULL);
return ECORE_CALLBACK_PASS_ON;
}
static void
_hsv_apply(void *data, Evas_Object *obj EINA_UNUSED,
static Eina_Bool
_hsv_apply(void *data, int type EINA_UNUSED,
void *event_info EINA_UNUSED)
{
Ephoto_HSV *ehsv = data;
@ -284,11 +287,13 @@ _hsv_apply(void *data, Evas_Object *obj EINA_UNUSED,
evas_object_image_size_get(elm_image_object_get(ehsv->image), &w, &h);
ephoto_single_browser_image_data_update(ehsv->main, ehsv->image, EINA_TRUE,
image_data, w, h);
evas_object_del(ehsv->frame);
ephoto_editor_del(ehsv->editor);
return ECORE_CALLBACK_PASS_ON;
}
static void
_hsv_cancel(void *data, Evas_Object *obj EINA_UNUSED,
static Eina_Bool
_hsv_cancel(void *data, int type EINA_UNUSED,
void *event_info EINA_UNUSED)
{
Ephoto_HSV *ehsv = data;
@ -301,15 +306,20 @@ _hsv_cancel(void *data, Evas_Object *obj EINA_UNUSED,
ehsv->value = 0;
_hue_slider_changed(ehsv, ehsv->hslider, NULL);
ephoto_single_browser_cancel_editing(ehsv->main, ehsv->image);
evas_object_del(ehsv->frame);
ephoto_editor_del(ehsv->editor);
return ECORE_CALLBACK_PASS_ON;
}
static void
_frame_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
_editor_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
Ephoto_HSV *ehsv = data;
Ecore_Event_Handler *handler;
EINA_LIST_FREE(ehsv->handlers, handler)
ecore_event_handler_del(handler);
free(ehsv->original_im_data);
free(ehsv);
}
@ -317,7 +327,7 @@ _frame_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
void
ephoto_hsv_add(Evas_Object *main, Evas_Object *parent, Evas_Object *image)
{
Evas_Object *box, *slider, *ic, *button;
Evas_Object *slider;
Ephoto_HSV *ehsv;
unsigned int *im_data;
@ -341,39 +351,26 @@ ephoto_hsv_add(Evas_Object *main, Evas_Object *parent, Evas_Object *image)
memcpy(ehsv->original_im_data, im_data,
sizeof(unsigned int) * ehsv->w * ehsv->h);
ehsv->frame = elm_frame_add(parent);
elm_object_text_set(ehsv->frame, _("Hue/Saturation/Value"));
evas_object_size_hint_weight_set(ehsv->frame, 0.3, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(ehsv->frame,
EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_box_pack_end(parent, ehsv->frame);
evas_object_data_set(ehsv->frame, "ehsv", ehsv);
evas_object_event_callback_add(ehsv->frame, EVAS_CALLBACK_DEL, _frame_del,
ehsv->editor = ephoto_editor_add(parent, _("Hue/Saturation/Value"),
"ehsv", ehsv);
evas_object_event_callback_add(ehsv->editor, EVAS_CALLBACK_DEL, _editor_del,
ehsv);
evas_object_show(ehsv->frame);
box = elm_box_add(ehsv->frame);
elm_box_horizontal_set(box, EINA_FALSE);
evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_object_content_set(ehsv->frame, box);
evas_object_show(box);
slider = elm_slider_add(box);
elm_object_text_set(slider, _("Hue"));
elm_slider_min_max_set(slider, -180, 180);
elm_slider_step_set(slider, 1);
slider = elm_slider_add(ehsv->editor);
elm_object_text_set(slider, _("Value"));
elm_slider_min_max_set(slider, -100, 100);
elm_slider_step_set(slider, 1.20);
elm_slider_value_set(slider, 0);
elm_slider_unit_format_set(slider, "%1.0f");
elm_slider_unit_format_set(slider, "%1.2f");
evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, 0.5);
evas_object_smart_callback_add(slider, "delay,changed", _hue_slider_changed,
evas_object_smart_callback_add(slider, "delay,changed", _value_slider_changed,
ehsv);
elm_box_pack_end(box, slider);
elm_box_pack_start(ehsv->editor, slider);
evas_object_show(slider);
ehsv->hslider = slider;
ehsv->vslider = slider;
slider = elm_slider_add(box);
slider = elm_slider_add(ehsv->editor);
elm_object_text_set(slider, _("Saturation"));
elm_slider_min_max_set(slider, -100, 100);
elm_slider_step_set(slider, 1.20);
@ -383,66 +380,36 @@ ephoto_hsv_add(Evas_Object *main, Evas_Object *parent, Evas_Object *image)
evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, 0.5);
evas_object_smart_callback_add(slider, "delay,changed",
_saturation_slider_changed, ehsv);
elm_box_pack_end(box, slider);
elm_box_pack_start(ehsv->editor, slider);
evas_object_show(slider);
ehsv->sslider = slider;
slider = elm_slider_add(box);
elm_object_text_set(slider, _("Value"));
elm_slider_min_max_set(slider, -100, 100);
elm_slider_step_set(slider, 1.20);
slider = elm_slider_add(ehsv->editor);
elm_object_text_set(slider, _("Hue"));
elm_slider_min_max_set(slider, -180, 180);
elm_slider_step_set(slider, 1);
elm_slider_value_set(slider, 0);
elm_slider_unit_format_set(slider, "%1.2f");
elm_slider_unit_format_set(slider, "%1.0f");
evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, 0.5);
evas_object_smart_callback_add(slider, "delay,changed",
_value_slider_changed, ehsv);
elm_box_pack_end(box, slider);
_hue_slider_changed, ehsv);
elm_box_pack_start(ehsv->editor, slider);
evas_object_show(slider);
ehsv->vslider = slider;
ic = elm_icon_add(box);
elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME);
evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
elm_icon_standard_set(ic, "edit-undo");
button = elm_button_add(box);
elm_object_text_set(button, _("Reset"));
elm_object_part_content_set(button, "icon", ic);
evas_object_smart_callback_add(button, "clicked", _hsv_reset, ehsv);
evas_object_size_hint_weight_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_box_pack_end(box, button);
evas_object_show(button);
ic = elm_icon_add(box);
elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME);
evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
elm_icon_standard_set(ic, "document-save");
button = elm_button_add(box);
elm_object_text_set(button, _("Apply"));
elm_object_part_content_set(button, "icon", ic);
evas_object_smart_callback_add(button, "clicked", _hsv_apply, ehsv);
evas_object_size_hint_weight_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_box_pack_end(box, button);
evas_object_show(button);
ic = elm_icon_add(box);
elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME);
evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
elm_icon_standard_set(ic, "window-close");
button = elm_button_add(box);
elm_object_text_set(button, _("Cancel"));
elm_object_part_content_set(button, "icon", ic);
evas_object_smart_callback_add(button, "clicked", _hsv_cancel, ehsv);
evas_object_size_hint_weight_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_box_pack_end(box, button);
evas_object_show(button);
ehsv->hslider = slider;
ehsv->handlers =
eina_list_append(ehsv->handlers,
ecore_event_handler_add(EPHOTO_EVENT_EDITOR_RESET,
_hsv_reset, ehsv));
ehsv->handlers =
eina_list_append(ehsv->handlers,
ecore_event_handler_add(EPHOTO_EVENT_EDITOR_APPLY,
_hsv_apply, ehsv));
ehsv->handlers =
eina_list_append(ehsv->handlers,
ecore_event_handler_add(EPHOTO_EVENT_EDITOR_CANCEL,
_hsv_cancel, ehsv));
return;
error:

View File

@ -4,6 +4,9 @@ int EPHOTO_EVENT_ENTRY_CREATE = 0;
int EPHOTO_EVENT_POPULATE_START = 0;
int EPHOTO_EVENT_POPULATE_END = 0;
int EPHOTO_EVENT_POPULATE_ERROR = 0;
int EPHOTO_EVENT_EDITOR_RESET = 0;
int EPHOTO_EVENT_EDITOR_APPLY = 0;
int EPHOTO_EVENT_EDITOR_CANCEL = 0;
typedef struct _Ephoto_Entry_Free_Listener Ephoto_Entry_Free_Listener;
struct _Ephoto_Entry_Free_Listener
@ -198,6 +201,9 @@ ephoto_window_add(const char *path)
EPHOTO_EVENT_POPULATE_START = ecore_event_type_new();
EPHOTO_EVENT_POPULATE_END = ecore_event_type_new();
EPHOTO_EVENT_POPULATE_ERROR = ecore_event_type_new();
EPHOTO_EVENT_EDITOR_RESET = ecore_event_type_new();
EPHOTO_EVENT_EDITOR_APPLY = ecore_event_type_new();
EPHOTO_EVENT_EDITOR_CANCEL = ecore_event_type_new();
ephoto->selentries = NULL;
ephoto->win = elm_win_util_standard_add("ephoto", "Ephoto");