From 47da8cd526887dc97ebc6a0b3c7a0597e06db931 Mon Sep 17 00:00:00 2001 From: Gustavo Sverzut Barbieri Date: Sun, 10 Oct 2010 18:57:48 +0000 Subject: [PATCH] zoom actions, still barebones. I was about to move to efenniht theme, but it will be some work I'd not be able to finish in time... given that we'll have enjoy, eve, envision and ephoto using the same things, it is time to consider a better replicable solution. SVN revision: 53240 --- data/themes/default/ephoto.edc | 120 ++++++++++++++++++++++++++++++--- src/bin/ephoto_main.c | 2 +- src/bin/ephoto_thumb_browser.c | 47 +++++++++++-- 3 files changed, 156 insertions(+), 13 deletions(-) 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;