From ef82e33746ea5bcf53845836fdd2948414bc8514 Mon Sep 17 00:00:00 2001 From: Stephen Houston Date: Sun, 23 Nov 2014 15:44:24 -0600 Subject: [PATCH] Bug fixes, keybinding work, add rotation to single browser, remove photocam until is fixed/can rotate, slideshow starts in window. See summary for more. Remove libexif support and code as this is now done outside of Ephoto. Remove all photocam code until photocam can rotate like elm_image and doesn't crash on certain jpegs and while zooming. Slideshow now starts in window, as usual press F11 for fullscreen. Single brower now does rotations. There is still a keybinding bug that needs to be fixed where keybindings are passed through to other pages within the naviframe. --- configure.ac | 25 --- src/bin/Makefile.am | 6 +- src/bin/ephoto.h | 6 +- src/bin/ephoto_main.c | 4 + src/bin/ephoto_single_browser.c | 374 +++++++++----------------------- src/bin/ephoto_slideshow.c | 51 +---- src/bin/ephoto_thumb_browser.c | 25 +-- 7 files changed, 116 insertions(+), 375 deletions(-) diff --git a/configure.ac b/configure.ac index 34376c6..a1a95da 100644 --- a/configure.ac +++ b/configure.ac @@ -85,31 +85,6 @@ AC_SUBST(LTLIBINTL) PKG_CHECK_MODULES([ELEMENTARY], [elementary ecore-file ethumb_client]) PKG_CHECK_MODULES([EFREET_MIME], [efreet-mime]) -AC_ARG_ENABLE([libexif], - [AC_HELP_STRING([--enable-libexif], [enable libexif support @<:@default=yes@:>@])], - [ - if test "x${enableval}" = "xyes" ; then - _ephoto_enable_libexif="yes" - else - _ephoto_enable_libexif="no" - fi - ], - [_ephoto_enable_libexif="yes"] -) - -AC_MSG_RESULT([${_ephoto_enable_libexif}]) - -have_libexif="No" - -if test "x${_ephoto_enable_libexif}" = "xyes" ; then - PKG_CHECK_MODULES(EXIF, libexif, [ - have_libexif="Yes" - AC_DEFINE(HAVE_LIBEXIF, 1, [have libexif support]) - ],[ - have_libexif="No" - ]) -fi - want_quicklaunch="auto" AC_ARG_ENABLE([quicklaunch], [AC_HELP_STRING([--disable-quicklaunch], diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am index 5718f60..df5ea41 100644 --- a/src/bin/Makefile.am +++ b/src/bin/Makefile.am @@ -1,12 +1,12 @@ MAINTAINERCLEANFILES = *.o config.h.in config.h Makefile.in Makefile stamp-h1 -INCLUDES = \ +AM_CPPFLAGS = \ -I$(top_srcdir) \ -I$(top_srcdir)/src/bin \ -DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \ -DGETTEXT_PACKAGE=\"$(PACKAGE)\" \ -DLOCALEDIR=\"$(localedir)\" \ - @ELEMENTARY_CFLAGS@ @EFREET_MIME_CFLAGS@ @EXIF_CFLAGS@ + @ELEMENTARY_CFLAGS@ @EFREET_MIME_CFLAGS@ bin_PROGRAMS = ephoto if BUILD_QUICKLAUNCH @@ -22,7 +22,7 @@ _sources = \ ephoto_slideshow.c -_libs = @ELEMENTARY_LIBS@ @EFREET_MIME_LIBS@ @EXIF_LIBS@ +_libs = @ELEMENTARY_LIBS@ @EFREET_MIME_LIBS@ ephoto_SOURCES = $(_sources) ephoto_LDADD = $(_libs) diff --git a/src/bin/ephoto.h b/src/bin/ephoto.h index f0cf089..e0bc174 100644 --- a/src/bin/ephoto.h +++ b/src/bin/ephoto.h @@ -37,8 +37,6 @@ Evas_Object *ephoto_thumb_add(Ephoto *ephoto, Evas_Object *parent, const char *p void ephoto_thumb_path_set(Evas_Object *o, const char *path); void ephoto_directory_set(Ephoto *ephoto, const char *path); -Ephoto_Orient ephoto_file_orient_get(const char *path); - Eina_Bool ephoto_config_init(Ephoto *em); void ephoto_config_save(Ephoto *em); void ephoto_config_free(Ephoto *em); @@ -49,13 +47,13 @@ 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); /* smart callbacks called: - * "back" - the user want to go back to the previous screen. + * "back" - the user wants to go back to the previous screen. */ Evas_Object *ephoto_slideshow_add(Ephoto *ephoto, Evas_Object *parent); void ephoto_slideshow_entry_set(Evas_Object *obj, Ephoto_Entry *entry); /* smart callbacks called: - * "back" - the user want to go back to the previous screen. + * "back" - the user wants to go back to the previous screen. */ Evas_Object *ephoto_thumb_browser_add(Ephoto *ephoto, Evas_Object *parent); diff --git a/src/bin/ephoto_main.c b/src/bin/ephoto_main.c index 48a65c1..10c1225 100644 --- a/src/bin/ephoto_main.c +++ b/src/bin/ephoto_main.c @@ -27,6 +27,7 @@ _ephoto_thumb_browser_show(Ephoto *ephoto, Ephoto_Entry *entry) ephoto_single_browser_entry_set(ephoto->single_browser, NULL); ephoto_slideshow_entry_set(ephoto->slideshow, NULL); elm_naviframe_item_simple_promote(ephoto->pager, ephoto->thumb_browser); + elm_object_focus_set(ephoto->thumb_browser, EINA_TRUE); _ephoto_state_set(ephoto, EPHOTO_STATE_THUMB); ephoto_title_set(ephoto, NULL); @@ -40,6 +41,7 @@ _ephoto_single_browser_show(Ephoto *ephoto, Ephoto_Entry *entry) DBG("entry '%s'", entry->path); ephoto_single_browser_entry_set(ephoto->single_browser, entry); elm_naviframe_item_simple_promote(ephoto->pager, ephoto->single_browser); + elm_object_focus_set(ephoto->single_browser, EINA_TRUE); _ephoto_state_set(ephoto, EPHOTO_STATE_SINGLE); } @@ -49,6 +51,7 @@ _ephoto_slideshow_show(Ephoto *ephoto, Ephoto_Entry *entry) DBG("entry '%s'", entry->path); ephoto_slideshow_entry_set(ephoto->slideshow, entry); elm_naviframe_item_simple_promote(ephoto->pager, ephoto->slideshow); + elm_object_focus_set(ephoto->slideshow, EINA_TRUE); _ephoto_state_set(ephoto, EPHOTO_STATE_SLIDESHOW); } @@ -179,6 +182,7 @@ ephoto_window_add(const char *path) evas_object_show(ephoto->bg); ephoto->pager = elm_naviframe_add(ephoto->win); + elm_naviframe_prev_btn_auto_pushed_set(ephoto->pager, EINA_FALSE); elm_object_style_set(ephoto->pager, "fade_invisible"); evas_object_size_hint_weight_set (ephoto->pager, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); diff --git a/src/bin/ephoto_single_browser.c b/src/bin/ephoto_single_browser.c index 0be9a81..619cacd 100644 --- a/src/bin/ephoto_single_browser.c +++ b/src/bin/ephoto_single_browser.c @@ -1,15 +1,5 @@ #include "ephoto.h" -#ifdef HAVE_LIBEXIF -#include -#endif - -/* ROTATION is disabled until we do it properly, and properly means - * elm_photocam and elm_image rotates their images internally. - * Rotating the scroller is not correct and was rejected by Raster and others. - */ -//#define ROTATION - #define ZOOM_STEP 0.2 typedef struct _Ephoto_Single_Browser Ephoto_Single_Browser; @@ -31,8 +21,8 @@ struct _Ephoto_Single_Browser struct _Ephoto_Viewer { - Evas_Object *photocam; Evas_Object *scroller; + Evas_Object *table; Evas_Object *image; double zoom; Eina_Bool fit:1; @@ -42,29 +32,6 @@ static void _zoom_set(Ephoto_Single_Browser *sb, double zoom); static void _zoom_in(Ephoto_Single_Browser *sb); static void _zoom_out(Ephoto_Single_Browser *sb); -static Eina_Bool -_path_is_jpeg(const char *path_stringshared) -{ - size_t len = eina_stringshare_strlen(path_stringshared); - const char *ext; - - if (len < sizeof(".jpg")) return EINA_FALSE; - ext = path_stringshared + len - (sizeof(".jpg") - 1); - if (strcasecmp(ext, ".jpg") == 0) return EINA_TRUE; - - if (len < sizeof(".jpeg")) return EINA_FALSE; - ext = path_stringshared + len - (sizeof(".jpeg") - 1); - if (strcasecmp(ext, ".jpeg") == 0) return EINA_TRUE; - - return EINA_FALSE; -} - -static void -_viewer_photocam_loaded(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) -{ - elm_photocam_paused_set(obj, EINA_FALSE); -} - static void _viewer_del(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) { @@ -80,54 +47,50 @@ _viewer_add(Evas_Object *parent, const char *path) int err; EINA_SAFETY_ON_NULL_RETURN_VAL(v, NULL); - if (_path_is_jpeg(path)) + + Evas_Coord w, h; + const char *group = NULL; + const char *ext = strrchr(path, '.'); + if (ext) { - obj = v->photocam = elm_photocam_add(parent); - EINA_SAFETY_ON_NULL_GOTO(obj, error); - err = elm_photocam_file_set(obj, path); - if (err != EVAS_LOAD_ERROR_NONE) goto load_error; - elm_photocam_paused_set(obj, EINA_TRUE); - evas_object_smart_callback_add - (obj, "loaded", _viewer_photocam_loaded, v); - } - else - { - Evas_Coord w, h; - const char *group = NULL; - const char *ext = strrchr(path, '.'); - if (ext) + ext++; + if ((strcasecmp(ext, "edj") == 0)) { - ext++; - if ((strcasecmp(ext, "edj") == 0)) + if (edje_file_group_exists(path, "e/desktop/background")) + group = "e/desktop/background"; + else { - if (edje_file_group_exists(path, "e/desktop/background")) - group = "e/desktop/background"; - else - { - Eina_List *g = edje_file_collection_list(path); - group = eina_list_data_get(g); - edje_file_collection_list_free(g); - } + Eina_List *g = edje_file_collection_list(path); + group = eina_list_data_get(g); + edje_file_collection_list_free(g); } - } - obj = v->scroller = elm_scroller_add(parent); - EINA_SAFETY_ON_NULL_GOTO(obj, error); - v->image = elm_image_add(parent); - elm_image_file_set(v->image, path, group); - err = evas_object_image_load_error_get(elm_image_object_get(v->image)); - if (err != EVAS_LOAD_ERROR_NONE) goto load_error; - elm_image_object_size_get(v->image, &w, &h); - evas_object_size_hint_align_set(v->image, 0.5, 0.5); - evas_object_size_hint_min_set(v->image, w, h); - evas_object_size_hint_max_set(v->image, w, h); - elm_object_content_set(v->scroller, v->image); - evas_object_show(v->scroller); - evas_object_show(v->image); - } + } + } + obj = v->scroller = elm_scroller_add(parent); + EINA_SAFETY_ON_NULL_GOTO(obj, error); evas_object_size_hint_weight_set(obj, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(obj, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_data_set(obj, "viewer", v); evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, _viewer_del, v); + evas_object_show(obj); + + v->table = elm_table_add(v->scroller); + evas_object_size_hint_weight_set(v->table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(v->table, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_content_set(v->scroller, v->table); + evas_object_show(v->table); + + v->image = elm_image_add(v->table); + elm_image_preload_disabled_set(v->image, EINA_FALSE); + elm_image_file_set(v->image, path, group); + err = evas_object_image_load_error_get(elm_image_object_get(v->image)); + if (err != EVAS_LOAD_ERROR_NONE) goto load_error; + elm_image_object_size_get(v->image, &w, &h); + evas_object_size_hint_min_set(v->image, w, h); + evas_object_size_hint_max_set(v->image, w, h); + elm_table_pack(v->table, v->image, 0, 0, 1, 1); + evas_object_show(v->image); + return obj; load_error: @@ -142,16 +105,13 @@ static void _viewer_zoom_apply(Ephoto_Viewer *v, double zoom) { v->zoom = zoom; - if (v->photocam) elm_photocam_zoom_set(v->photocam, 1.0 / zoom); - else - { - Evas_Coord w, h; - evas_object_image_size_get(elm_image_object_get(v->image), &w, &h); - w *= zoom; - h *= zoom; - evas_object_size_hint_min_set(v->image, w, h); - evas_object_size_hint_max_set(v->image, w, h); - } + + Evas_Coord w, h; + evas_object_image_size_get(elm_image_object_get(v->image), &w, &h); + w *= zoom; + h *= zoom; + evas_object_size_hint_min_set(v->image, w, h); + evas_object_size_hint_max_set(v->image, w, h); } static void @@ -160,16 +120,8 @@ _viewer_zoom_fit_apply(Ephoto_Viewer *v) Evas_Coord cw, ch, iw, ih; double zx, zy, zoom; - if (v->photocam) - { - evas_object_geometry_get(v->photocam, NULL, NULL, &cw, &ch); - elm_photocam_image_size_get(v->photocam, &iw, &ih); - } - else - { - evas_object_geometry_get(v->scroller, NULL, NULL, &cw, &ch); - evas_object_image_size_get(elm_image_object_get(v->image), &iw, &ih); - } + evas_object_geometry_get(v->scroller, NULL, NULL, &cw, &ch); + evas_object_image_size_get(elm_image_object_get(v->image), &iw, &ih); if ((cw <= 0) || (ch <= 0)) return; /* object still not resized */ EINA_SAFETY_ON_TRUE_RETURN(iw <= 0); @@ -197,12 +149,8 @@ _viewer_zoom_set(Evas_Object *obj, double zoom) if (v->fit) { - if (v->photocam) - evas_object_event_callback_del_full - (v->photocam, EVAS_CALLBACK_RESIZE, _viewer_resized, v); - else - evas_object_event_callback_del_full - (v->scroller, EVAS_CALLBACK_RESIZE, _viewer_resized, v); + evas_object_event_callback_del_full + (v->scroller, EVAS_CALLBACK_RESIZE, _viewer_resized, v); v->fit = EINA_FALSE; } } @@ -224,12 +172,8 @@ _viewer_zoom_fit(Evas_Object *obj) if (v->fit) return; v->fit = EINA_TRUE; - if (v->photocam) - evas_object_event_callback_add - (v->photocam, EVAS_CALLBACK_RESIZE, _viewer_resized, v); - else - evas_object_event_callback_add - (v->scroller, EVAS_CALLBACK_RESIZE, _viewer_resized, v); + evas_object_event_callback_add + (v->scroller, EVAS_CALLBACK_RESIZE, _viewer_resized, v); _viewer_zoom_fit_apply(v); } @@ -237,177 +181,78 @@ _viewer_zoom_fit(Evas_Object *obj) static void _orient_apply(Ephoto_Single_Browser *sb) { -#ifdef ROTATION - const char *sig; + Ephoto_Viewer *v = evas_object_data_get(sb->viewer, "viewer"); + int w, h; + EINA_SAFETY_ON_NULL_RETURN(v); + + elm_table_unpack(v->table, v->image); switch (sb->orient) { case EPHOTO_ORIENT_0: - sig = "state,rotate,0"; break; case EPHOTO_ORIENT_90: - sig = "state,rotate,90"; + elm_image_orient_set(v->image, ELM_IMAGE_ROTATE_90); break; case EPHOTO_ORIENT_180: - sig = "state,rotate,180"; + elm_image_orient_set(v->image, ELM_IMAGE_ROTATE_180); break; case EPHOTO_ORIENT_270: - sig = "state,rotate,270"; + elm_image_orient_set(v->image, ELM_IMAGE_ROTATE_270); break; case EPHOTO_ORIENT_FLIP_HORIZ: - sig = "state,flip,horiz"; + elm_image_orient_set(v->image, ELM_IMAGE_FLIP_HORIZONTAL); break; case EPHOTO_ORIENT_FLIP_VERT: - sig = "state,flip,vert"; + elm_image_orient_set(v->image, ELM_IMAGE_FLIP_VERTICAL); break; case EPHOTO_ORIENT_FLIP_HORIZ_90: - sig = "state,flip,horiz,90"; + elm_image_orient_set(v->image, ELM_IMAGE_FLIP_TRANSPOSE); break; case EPHOTO_ORIENT_FLIP_VERT_90: - sig = "state,flip,vert,90"; + elm_image_orient_set(v->image, ELM_IMAGE_FLIP_TRANSVERSE); break; default: return; } - DBG("orient: %d, signal '%s'", sb->orient, sig); - edje_object_signal_emit(sb->orient_edje, sig, "ephoto"); -#else - (void)sb; -#endif + elm_image_object_size_get(v->image, &w, &h); + evas_object_size_hint_min_set(v->image, w, h); + evas_object_size_hint_max_set(v->image, w, h); + elm_table_pack(v->table, v->image, 0, 0, 1, 1); + if (v->fit) + _viewer_zoom_fit_apply(v); + else + _viewer_zoom_set(sb->viewer, _viewer_zoom_get(sb->viewer)); + DBG("orient: %d", sb->orient); } -#ifdef ROTATION static void _rotate_counterclock(Ephoto_Single_Browser *sb) { - switch (sb->orient) - { - case EPHOTO_ORIENT_0: - sb->orient = EPHOTO_ORIENT_270; - break; - case EPHOTO_ORIENT_90: - sb->orient = EPHOTO_ORIENT_0; - break; - case EPHOTO_ORIENT_180: - sb->orient = EPHOTO_ORIENT_90; - break; - case EPHOTO_ORIENT_270: - sb->orient = EPHOTO_ORIENT_180; - break; - case EPHOTO_ORIENT_FLIP_HORIZ: - sb->orient = EPHOTO_ORIENT_FLIP_HORIZ_90; - break; - case EPHOTO_ORIENT_FLIP_VERT: - sb->orient = EPHOTO_ORIENT_FLIP_VERT_90; - break; - case EPHOTO_ORIENT_FLIP_HORIZ_90: - sb->orient = EPHOTO_ORIENT_FLIP_VERT; - break; - case EPHOTO_ORIENT_FLIP_VERT_90: - sb->orient = EPHOTO_ORIENT_FLIP_HORIZ; - break; - } + sb->orient = EPHOTO_ORIENT_270; _orient_apply(sb); } static void _rotate_clock(Ephoto_Single_Browser *sb) { - switch (sb->orient) - { - case EPHOTO_ORIENT_0: - sb->orient = EPHOTO_ORIENT_90; - break; - case EPHOTO_ORIENT_90: - sb->orient = EPHOTO_ORIENT_180; - break; - case EPHOTO_ORIENT_180: - sb->orient = EPHOTO_ORIENT_270; - break; - case EPHOTO_ORIENT_270: - sb->orient = EPHOTO_ORIENT_0; - break; - case EPHOTO_ORIENT_FLIP_HORIZ: - sb->orient = EPHOTO_ORIENT_FLIP_VERT_90; - break; - case EPHOTO_ORIENT_FLIP_VERT: - sb->orient = EPHOTO_ORIENT_FLIP_HORIZ_90; - break; - case EPHOTO_ORIENT_FLIP_HORIZ_90: - sb->orient = EPHOTO_ORIENT_FLIP_HORIZ; - break; - case EPHOTO_ORIENT_FLIP_VERT_90: - sb->orient = EPHOTO_ORIENT_FLIP_VERT; - break; - } + sb->orient = EPHOTO_ORIENT_90; _orient_apply(sb); } static void _flip_horiz(Ephoto_Single_Browser *sb) { - switch (sb->orient) - { - case EPHOTO_ORIENT_0: - sb->orient = EPHOTO_ORIENT_FLIP_HORIZ; - break; - case EPHOTO_ORIENT_90: - sb->orient = EPHOTO_ORIENT_FLIP_HORIZ_90; - break; - case EPHOTO_ORIENT_180: - sb->orient = EPHOTO_ORIENT_FLIP_VERT; - break; - case EPHOTO_ORIENT_270: - sb->orient = EPHOTO_ORIENT_FLIP_VERT_90; - break; - case EPHOTO_ORIENT_FLIP_HORIZ: - sb->orient = EPHOTO_ORIENT_0; - break; - case EPHOTO_ORIENT_FLIP_VERT: - sb->orient = EPHOTO_ORIENT_180; - break; - case EPHOTO_ORIENT_FLIP_HORIZ_90: - sb->orient = EPHOTO_ORIENT_90; - break; - case EPHOTO_ORIENT_FLIP_VERT_90: - sb->orient = EPHOTO_ORIENT_270; - break; - } + + sb->orient = EPHOTO_ORIENT_FLIP_HORIZ; _orient_apply(sb); } static void _flip_vert(Ephoto_Single_Browser *sb) { - switch (sb->orient) - { - case EPHOTO_ORIENT_0: - sb->orient = EPHOTO_ORIENT_FLIP_VERT; - break; - case EPHOTO_ORIENT_90: - sb->orient = EPHOTO_ORIENT_FLIP_VERT_90; - break; - case EPHOTO_ORIENT_180: - sb->orient = EPHOTO_ORIENT_FLIP_HORIZ; - break; - case EPHOTO_ORIENT_270: - sb->orient = EPHOTO_ORIENT_FLIP_HORIZ_90; - break; - case EPHOTO_ORIENT_FLIP_HORIZ: - sb->orient = EPHOTO_ORIENT_180; - break; - case EPHOTO_ORIENT_FLIP_VERT: - sb->orient = EPHOTO_ORIENT_0; - break; - case EPHOTO_ORIENT_FLIP_HORIZ_90: - sb->orient = EPHOTO_ORIENT_270; - break; - case EPHOTO_ORIENT_FLIP_VERT_90: - sb->orient = EPHOTO_ORIENT_90; - break; - } + sb->orient = EPHOTO_ORIENT_FLIP_VERT; _orient_apply(sb); } -#endif static void _mouse_wheel(void *data, Evas *e __UNUSED__, Evas_Object *o __UNUSED__, void *event_info) @@ -435,40 +280,6 @@ _last_entry_find(Ephoto_Single_Browser *sb) return eina_list_last_data_get(sb->ephoto->entries); } -Ephoto_Orient -ephoto_file_orient_get(const char *path) -{ -#ifndef HAVE_LIBEXIF - (void) path; - return EPHOTO_ORIENT_0; -#else - Ephoto_Orient orient = EPHOTO_ORIENT_0; - ExifData *exif; - ExifEntry *entry; - ExifByteOrder bo; - - if (!_path_is_jpeg(path)) return orient; - - exif = exif_data_new_from_file(path); - if (!exif) goto end; - bo = exif_data_get_byte_order(exif); - entry = exif_data_get_entry(exif, EXIF_TAG_ORIENTATION); - if (!entry) goto end_entry; - - orient = exif_get_short(entry->data, bo); - DBG("orient=%d", orient); - if ((orient < 1) || (orient > 8)) - { - ERR("exif orient not supported: %d", orient); - orient = EPHOTO_ORIENT_0; - } - - end_entry: - exif_data_free(exif); - end: - return orient; -#endif -} static void _ephoto_single_browser_recalc(Ephoto_Single_Browser *sb) @@ -491,8 +302,6 @@ _ephoto_single_browser_recalc(Ephoto_Single_Browser *sb) evas_object_event_callback_add (sb->viewer, EVAS_CALLBACK_MOUSE_WHEEL, _mouse_wheel, sb); ephoto_title_set(sb->ephoto, bname); - sb->orient = ephoto_file_orient_get(sb->entry->path); - _orient_apply(sb); elm_table_pack(sb->table, sb->panel, 0, 0, 1, 1); } @@ -642,7 +451,6 @@ _go_last(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__) _last_entry(sb); } -#ifdef ROTATION static void _go_rotate_counterclock(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__) { @@ -670,7 +478,6 @@ _go_flip_vert(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__ Ephoto_Single_Browser *sb = data; _flip_vert(sb); } -#endif static void _slideshow(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__) @@ -732,15 +539,14 @@ _key_down(void *data, Evas *e __UNUSED__, Evas_Object *o __UNUSED__, void *event if (!strcmp(k, "Escape")) evas_object_smart_callback_call(sb->main, "back", sb->entry); - else if (!strcmp(k, "Left") || !strcmp(k, "BackSpace")) + else if (!strcmp(k, "Left")) _prev_entry(sb); - else if (!strcmp(k, "Right") || !strcmp(k, "space")) + else if (!strcmp(k, "Right")) _next_entry(sb); else if (!strcmp(k, "Home")) _first_entry(sb); else if (!strcmp(k, "End")) _last_entry(sb); -#if ROTATION else if (!strcmp(k, "bracketleft")) { if (!shift) _rotate_counterclock(sb); @@ -751,12 +557,16 @@ _key_down(void *data, Evas *e __UNUSED__, Evas_Object *o __UNUSED__, void *event if (!shift) _rotate_clock(sb); else _flip_vert(sb); } -#endif else if (!strcmp(k, "F5")) { if (sb->entry) evas_object_smart_callback_call(sb->main, "slideshow", sb->entry); } + else if (!strcmp(k, "F11")) + { + Evas_Object *win = sb->ephoto->win; + elm_win_fullscreen_set(win, !elm_win_fullscreen_get(win)); + } } static void @@ -896,12 +706,26 @@ ephoto_single_browser_add(Ephoto *ephoto, Evas_Object *parent) elm_toolbar_item_separator_set(elm_toolbar_item_append(sb->bar, NULL, NULL, NULL, NULL), EINA_TRUE); - icon = elm_toolbar_item_append(sb->bar, "emblem-system", "Settings", _settings, sb); + icon = elm_toolbar_item_append(sb->bar, "object-rotate-left", "Rotate Left", _go_rotate_counterclock, sb); elm_toolbar_item_priority_set(icon, 50); - icon = elm_toolbar_item_append(sb->bar, "stock_about", "About", _about, sb); + icon = elm_toolbar_item_append(sb->bar, "object-rotate-right", "Rotate Right", _go_rotate_clock, sb); elm_toolbar_item_priority_set(icon, 40); + icon = elm_toolbar_item_append(sb->bar, "object-flip-horizontal", "Flip Horizontal", _go_flip_horiz, sb); + elm_toolbar_item_priority_set(icon, 30); + + icon = elm_toolbar_item_append(sb->bar, "object-flip-vertical", "Flip Vertical", _go_flip_vert, sb); + elm_toolbar_item_priority_set(icon, 20); + + elm_toolbar_item_separator_set(elm_toolbar_item_append(sb->bar, NULL, NULL, NULL, NULL), EINA_TRUE); + + icon = elm_toolbar_item_append(sb->bar, "emblem-system", "Settings", _settings, sb); + elm_toolbar_item_priority_set(icon, 10); + + icon = elm_toolbar_item_append(sb->bar, "stock_about", "About", _about, sb); + elm_toolbar_item_priority_set(icon, 0); + elm_object_content_set(sb->panel, sb->bar); evas_object_show(sb->bar); diff --git a/src/bin/ephoto_slideshow.c b/src/bin/ephoto_slideshow.c index 6b32f6d..2c48d71 100644 --- a/src/bin/ephoto_slideshow.c +++ b/src/bin/ephoto_slideshow.c @@ -93,53 +93,11 @@ ephoto_slideshow_add(Ephoto *ephoto, Evas_Object *parent) return NULL; } -static void -_image_resized(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *image, void *event_info __UNUSED__) -{ - Evas_Map *map = evas_map_new(4); - Evas_Coord cx, cy, x, y, w, h; - int orient = (long)evas_object_data_get(image, "orient"); - - evas_object_geometry_get(image, &x, &y, &w, &h); - evas_map_util_points_populate_from_geometry(map, x, y, w, h, 0); - cx = x + w / 2; - cy = y + h / 2; - - switch (orient) - { - case EPHOTO_ORIENT_0: - break; - case EPHOTO_ORIENT_90: - evas_map_util_rotate(map, 90.0, cx, cy); - evas_object_map_enable_set(image, EINA_TRUE); - evas_object_map_set(image, map); - printf("rotated 90 around %d,%d (%dx%d)\n", cx, cy, w, h); - break; - case EPHOTO_ORIENT_180: - evas_map_util_rotate(map, 180.0, cx, cy); - evas_object_map_enable_set(image, EINA_TRUE); - evas_object_map_set(image, map); - printf("rotated 180 around %d,%d (%d,%d %dx%d)\n", cx, cy, x, y, w, h); - break; - case EPHOTO_ORIENT_270: - evas_map_util_rotate(map, 270.0, cx, cy); - evas_object_map_enable_set(image, EINA_TRUE); - evas_object_map_set(image, map); - printf("rotated 270 around %d,%d (%dx%d)\n", cx, cy, w, h); - break; - default: - ERR("unknown orient %d", orient); - } - - evas_map_free(map); -} - static Evas_Object * _slideshow_item_get(void *data, Evas_Object *obj) { Ephoto_Entry *entry = data; - /* TODO use viewer from ephoto_single_browser.c */ - /* TODO consider using exif rotation, see ephoto_single_browser.c */ + const char *group = NULL; const char *ext = strrchr(entry->path, '.'); if (ext) @@ -161,11 +119,6 @@ _slideshow_item_get(void *data, Evas_Object *obj) elm_image_file_set(image, entry->path, group); elm_object_style_set(image, "shadow"); - evas_object_data_set - (image, "orient", (void*)(long)ephoto_file_orient_get(entry->path)); - evas_object_event_callback_add - (image, EVAS_CALLBACK_RESIZE, _image_resized, NULL); - return image; } @@ -198,7 +151,7 @@ ephoto_slideshow_entry_set(Evas_Object *obj, Ephoto_Entry *entry) elm_slideshow_clear(ss->slideshow); if (!entry) return; - elm_win_fullscreen_set(ss->ephoto->win, EINA_TRUE); + //elm_win_fullscreen_set(ss->ephoto->win, EINA_TRUE); EINA_LIST_FOREACH(ss->ephoto->entries, l, itr) { Elm_Object_Item *slideshow_item; diff --git a/src/bin/ephoto_thumb_browser.c b/src/bin/ephoto_thumb_browser.c index 1741162..204cd98 100644 --- a/src/bin/ephoto_thumb_browser.c +++ b/src/bin/ephoto_thumb_browser.c @@ -268,36 +268,23 @@ _key_down(void *data, Evas *e __UNUSED__, Evas_Object *o __UNUSED__, void *event { Ephoto_Thumb_Browser *tb = data; Evas_Event_Key_Down *ev = event_info; - Eina_Bool alt = evas_key_modifier_is_set(ev->modifiers, "Alt"); const char *k = ev->keyname; - if (alt) - { - if (!strcmp(k, "Up")) - { - if (strcmp(tb->ephoto->config->directory, "/")) - { - char *parent = ecore_file_dir_get - (tb->ephoto->config->directory); - if (parent) - ephoto_directory_set(tb->ephoto, parent); - free(parent); - } - } - - return; - } - if (!strcmp(k, "F5")) { Elm_Object_Item *it = elm_gengrid_selected_item_get(tb->grid); Ephoto_Entry *entry; if (it) entry = elm_object_item_data_get(it); - else entry = eina_list_nth(tb->grid_items, 0); + else entry = eina_list_nth(tb->ephoto->entries, 0); if (entry) evas_object_smart_callback_call(tb->main, "slideshow", entry); } + else if (!strcmp(k, "F11")) + { + Evas_Object *win = tb->ephoto->win; + elm_win_fullscreen_set(win, !elm_win_fullscreen_get(win)); + } }