diff --git a/data/themes/default/ephoto.edc b/data/themes/default/ephoto.edc index 4a87669..da08ce0 100644 --- a/data/themes/default/ephoto.edc +++ b/data/themes/default/ephoto.edc @@ -1,8 +1,3 @@ -fonts -{ - font: "Vera.ttf" "default"; -} - externals { external: "elm"; } @@ -726,7 +721,7 @@ collections group { name: "ephoto/main/layout"; data.item: "initial_size" "480 800"; parts { - part { name: "ephoto.swallow.content"; + part { name: "ephoto.swallow.thumb_browser"; type: SWALLOW; description { state: "default" 0.0; } @@ -801,11 +796,120 @@ collections part { name: "ephoto.thumb.swallow"; type: SWALLOW; - description { - state: "default" 0.0; + description { state: "default" 0.0; rel1 { to: "ephoto.location"; relative: 0.0 1.0; } + rel2 { to_y: "iconbar.bg"; + relative: 1.0 0.0; + } + } + } + + part { name: "iconbar.bg"; + type: RECT; + description { state: "default" 0.0; + rel1 { relative: 0.0 1.0; + offset: 0 -64; + } + } + } + + part { name: "zoom_in_area"; + type: RECT; + description { state: "default" 0.0; + color: 0 0 0 0; + rel1.to: "zoom_in"; + rel2.to: "zoom_in"; + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + visible: 0; /* no events */ + } + } + part { name: "zoom_in"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + color: 255 0 0 255; + rel1 { to_y: "iconbar.bg"; + relative: 0.0 0.0; + } + rel2.relative: 0.2 1.0; + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + color: 0 0 0 255; + } + } + programs { + program { + signal: "mouse,clicked,*"; + source: "zoom_in_area"; + action: SIGNAL_EMIT "zoom_in,clicked" "ephoto"; + } + program { + signal: "zoom_in,disable"; + source: "ephoto"; + action: STATE_SET "disabled" 0.0; + target: "zoom_in"; + target: "zoom_in_area"; + } + program { + signal: "zoom_in,enable"; + source: "ephoto"; + action: STATE_SET "default" 0.0; + target: "zoom_in"; + target: "zoom_in_area"; + } + } + + part { name: "zoom_out_area"; + type: RECT; + description { state: "default" 0.0; + color: 0 0 0 0; + rel1.to: "zoom_out"; + rel2.to: "zoom_out"; + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + visible: 0; /* no events */ + } + } + part { name: "zoom_out"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + color: 0 255 0 255; + rel1 { to_y: "iconbar.bg"; + relative: 0.2 0.0; + } + rel2.relative: 0.4 1.0; + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + color: 0 0 0 255; + } + } + programs { + program { + signal: "mouse,clicked,*"; + source: "zoom_out_area"; + action: SIGNAL_EMIT "zoom_out,clicked" "ephoto"; + } + program { + signal: "zoom_out,disable"; + source: "ephoto"; + action: STATE_SET "disabled" 0.0; + target: "zoom_out"; + target: "zoom_out_area"; + } + program { + signal: "zoom_out,enable"; + source: "ephoto"; + action: STATE_SET "default" 0.0; + target: "zoom_out"; + target: "zoom_out_area"; } } } diff --git a/src/bin/ephoto_main.c b/src/bin/ephoto_main.c index 1579e53..f2966ee 100644 --- a/src/bin/ephoto_main.c +++ b/src/bin/ephoto_main.c @@ -109,7 +109,7 @@ ephoto_window_add(const char *path) return NULL; } elm_layout_content_set - (ephoto->layout, "ephoto.swallow.content", ephoto->thumb_browser); + (ephoto->layout, "ephoto.swallow.thumb_browser", ephoto->thumb_browser); ed = elm_layout_edje_get(ephoto->layout); edje_object_size_min_get(ed, &mw, &mh); diff --git a/src/bin/ephoto_thumb_browser.c b/src/bin/ephoto_thumb_browser.c index 83e7fe3..a5ecb97 100644 --- a/src/bin/ephoto_thumb_browser.c +++ b/src/bin/ephoto_thumb_browser.c @@ -1,7 +1,8 @@ #include "ephoto.h" -#define SLIDER_MAX 512 -#define SLIDER_MIN 128 +#define ZOOM_MAX 512 +#define ZOOM_MIN 128 +#define ZOOM_STEP 32 #define PARENT_DIR "Up" @@ -256,6 +257,40 @@ _changed_dir(void *data, Evas_Object *o, const char *emission, const char *sourc ephoto_thumb_browser_directory_set(tb->layout, p.s); } +static void +_zoom_set(Ephoto_Thumb_Browser *tb, int zoom) +{ + if (zoom > ZOOM_MAX) zoom = ZOOM_MAX; + else if (zoom < ZOOM_MIN) zoom = ZOOM_MIN; + + ephoto_thumb_size_set(tb->ephoto, zoom); + elm_gengrid_item_size_set(tb->grid, zoom, zoom); + + if (zoom == ZOOM_MIN) + edje_object_signal_emit(tb->edje, "zoom_out,disable", "ephoto"); + else + edje_object_signal_emit(tb->edje, "zoom_out,enable", "ephoto"); + + if (zoom == ZOOM_MAX) + edje_object_signal_emit(tb->edje, "zoom_in,disable", "ephoto"); + else + edje_object_signal_emit(tb->edje, "zoom_in,enable", "ephoto"); +} + +static void +_zoom_in(void *data, Evas_Object *o, const char *emission, const char *source) +{ + Ephoto_Thumb_Browser *tb = data; + _zoom_set(tb, tb->ephoto->config->thumb_size + ZOOM_STEP); +} + +static void +_zoom_out(void *data, Evas_Object *o, const char *emission, const char *source) +{ + Ephoto_Thumb_Browser *tb = data; + _zoom_set(tb, tb->ephoto->config->thumb_size - ZOOM_STEP); +} + static void _layout_del(void *data, Evas *e, Evas_Object *o, void *event_info) { @@ -282,6 +317,10 @@ ephoto_thumb_browser_add(Ephoto *ephoto, Evas_Object *parent) evas_object_data_set(layout, "thumb_browser", tb); edje_object_signal_callback_add (tb->edje, "location,changed", "ephoto", _changed_dir, tb); + edje_object_signal_callback_add + (tb->edje, "zoom_out,clicked", "ephoto", _zoom_out, tb); + edje_object_signal_callback_add + (tb->edje, "zoom_in,clicked", "ephoto", _zoom_in, tb); if (!elm_layout_file_set(layout, THEME_FILE, "ephoto/browser/layout")) { @@ -296,8 +335,6 @@ ephoto_thumb_browser_add(Ephoto *ephoto, Evas_Object *parent) elm_gengrid_align_set(tb->grid, 0.5, 0.5); elm_gengrid_bounce_set(tb->grid, EINA_FALSE, EINA_TRUE); - elm_gengrid_item_size_set - (tb->grid, tb->ephoto->config->thumb_size, tb->ephoto->config->thumb_size); evas_object_size_hint_align_set (tb->grid, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_weight_set @@ -306,6 +343,8 @@ ephoto_thumb_browser_add(Ephoto *ephoto, Evas_Object *parent) evas_object_smart_callback_add (tb->grid, "selected", _ephoto_thumb_selected, tb); + _zoom_set(tb, tb->ephoto->config->thumb_size); + elm_layout_content_set(tb->layout, "ephoto.thumb.swallow", tb->grid); return layout;