Ephoto: Make cancelling an edit work correctly.

This commit is contained in:
Stephen Houston 2015-08-17 13:50:21 -05:00
parent 54bd029e0d
commit dd24871ca3
5 changed files with 51 additions and 10 deletions

View File

@ -55,7 +55,7 @@ Evas_Object *ephoto_single_browser_add(Ephoto *ephoto, Evas_Object *parent);
void ephoto_single_browser_entry_set(Evas_Object *obj, Ephoto_Entry *entry);
void ephoto_single_browser_path_pending_set(Evas_Object *obj, const char *path);
void ephoto_single_browser_image_data_update(Evas_Object *main, Evas_Object *image, Eina_Bool finished, unsigned int *image_data, int w, int h);
void ephoto_single_browser_cancel_editing(Evas_Object *main);
void ephoto_single_browser_cancel_editing(Evas_Object *main, Evas_Object *image);
Evas_Object *ephoto_cropper_add(Evas_Object *main, Evas_Object *toolbar, Evas_Object *parent, Evas_Object *image);
void ephoto_bcg_add(Evas_Object *main, Evas_Object *parent, Evas_Object *image);
void ephoto_hsv_add(Evas_Object *main, Evas_Object *parent, Evas_Object *image);

View File

@ -255,7 +255,6 @@ _bcg_apply(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSE
image_data = evas_object_image_data_get(elm_image_object_get(ebcg->image), EINA_FALSE);
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);
ephoto_single_browser_cancel_editing(ebcg->main);
evas_object_del(ebcg->frame);
}
@ -263,7 +262,7 @@ static void
_bcg_cancel(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
Ephoto_BCG *ebcg = data;
ephoto_single_browser_cancel_editing(ebcg->main);
ephoto_single_browser_cancel_editing(ebcg->main, ebcg->image);
evas_object_del(ebcg->frame);
}

View File

@ -77,7 +77,10 @@ _cancel_crop(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNU
elm_table_unpack(ec->parent, ec->box);
elm_layout_content_unset(ec->layout, "ephoto.swallow.image");
elm_table_pack(ec->parent, ec->image, 0, 0, 1, 1);
ephoto_single_browser_cancel_editing(ec->main);
ephoto_single_browser_cancel_editing(ec->main, ec->image);
evas_object_del(ec->cropper);
evas_object_del(ec->layout);
evas_object_del(ec->box);
}
static void

View File

@ -273,7 +273,7 @@ static void
_hsv_cancel(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
Ephoto_HSV *ehsv = data;
ephoto_single_browser_cancel_editing(ehsv->main);
ephoto_single_browser_cancel_editing(ehsv->main, ehsv->image);
evas_object_del(ehsv->frame);
}

View File

@ -24,6 +24,9 @@ struct _Ephoto_Single_Browser
Eina_List *handlers;
Eina_Bool editing:1;
Eina_Bool cropping:1;
unsigned int *edited_image_data;
int ew;
int eh;
};
struct _Ephoto_Viewer
@ -1291,6 +1294,8 @@ _main_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *e
if (!strncmp(bname, "tmp", 3))
ecore_file_unlink(info->path);
}
if (sb->edited_image_data)
free(sb->edited_image_data);
free(sb);
}
@ -1325,7 +1330,7 @@ ephoto_single_browser_add(Ephoto *ephoto, Evas_Object *parent)
{
Evas_Object *box = elm_box_add(parent);
Elm_Object_Item *icon;
Evas_Object *menu;
Evas_Object *menu, *menu_it;
Ephoto_Single_Browser *sb;
EINA_SAFETY_ON_NULL_RETURN_VAL(box, NULL);
@ -1370,8 +1375,9 @@ ephoto_single_browser_add(Ephoto *ephoto, Evas_Object *parent)
elm_menu_item_add(menu, NULL, "object-flip-horizontal", _("Flip Horizontal"), _go_flip_horiz, sb);
elm_menu_item_add(menu, NULL, "object-flip-vertical", _("Flip Vertical"), _go_flip_vert, sb);
elm_menu_item_add(menu, NULL, "edit-cut", _("Crop"), _crop_image, sb);
elm_menu_item_add(menu, NULL, "document-properties", _("Brightness/Contrast/Gamma"), _go_bcg, sb);
elm_menu_item_add(menu, NULL, "document-properties", _("Hue/Saturation/Value"), _go_hsv, sb);
menu_it = elm_menu_item_add(menu, NULL, "document-properties", _("Enhance"), NULL, NULL);
elm_menu_item_add(menu, menu_it, NULL, _("Brightness/Contrast/Gamma"), _go_bcg, sb);
elm_menu_item_add(menu, menu_it, NULL, _("Hue/Saturation/Value"), _go_hsv, sb);
/*FIXME: Use separators once they don't mess up homogeneous toolbar*/
//elm_toolbar_item_separator_set(elm_toolbar_item_append(sb->bar, NULL, NULL, NULL, NULL), EINA_TRUE);
@ -1442,6 +1448,9 @@ ephoto_single_browser_entry_set(Evas_Object *obj, Ephoto_Entry *entry)
ephoto_entry_free_listener_add(entry, _entry_free, sb);
_ephoto_single_browser_recalc(sb);
if (sb->edited_image_data)
free(sb->edited_image_data);
sb->edited_image_data = NULL;
if (sb->viewer)
_zoom_fit(sb);
@ -1496,6 +1505,10 @@ ephoto_single_browser_image_data_update(Evas_Object *main, Evas_Object *image, E
elm_table_pack(sb->table, sb->infolabel, 0, 2, 4, 1);
evas_object_show(sb->infolabel);
sb->edited_image_data = image_data;
sb->ew = w;
sb->eh = h;
evas_object_freeze_events_set(sb->bar, EINA_FALSE);
elm_object_disabled_set(sb->bar, EINA_FALSE);
sb->editing = EINA_FALSE;
@ -1505,7 +1518,7 @@ ephoto_single_browser_image_data_update(Evas_Object *main, Evas_Object *image, E
}
void
ephoto_single_browser_cancel_editing(Evas_Object *main)
ephoto_single_browser_cancel_editing(Evas_Object *main, Evas_Object *image)
{
Ephoto_Single_Browser *sb = evas_object_data_get(main, "single_browser");
if (sb->editing)
@ -1515,7 +1528,33 @@ ephoto_single_browser_cancel_editing(Evas_Object *main)
sb->editing = EINA_FALSE;
if (sb->cropping)
sb->cropping = EINA_FALSE;
ephoto_single_browser_entry_set(sb->main, sb->entry);
if (sb->edited_image_data)
{
evas_object_image_size_set(elm_image_object_get(image), sb->ew, sb->eh);
evas_object_image_data_set(elm_image_object_get(image), sb->edited_image_data);
evas_object_image_data_update_add(elm_image_object_get(image), 0, 0, sb->ew, sb->eh);
}
else
{
const char *group = NULL;
const char *ext = strrchr(sb->entry->path, '.');
if (ext)
{
ext++;
if ((strcasecmp(ext, "edj") == 0))
{
if (edje_file_group_exists(sb->entry->path, "e/desktop/background"))
group = "e/desktop/background";
else
{
Eina_List *g = edje_file_collection_list(sb->entry->path);
group = eina_list_data_get(g);
edje_file_collection_list_free(g);
}
}
}
elm_image_file_set(image, sb->entry->path, group);
}
}
}