From 50c67f7ad6b85aa0ff1675536b9f8d7e9da6423d Mon Sep 17 00:00:00 2001 From: Gustavo Sverzut Barbieri Date: Fri, 8 Oct 2010 20:21:29 +0000 Subject: [PATCH] simplify, move thumb count to theme, min limit to contents. If we used such a large border with small item sizes, the content size would be zero and thus icons did turn invisible. Limit that to 16x16. "thumbs" in group will say how many thumbnails are desired, instead of hardcoding it to 3. countless code simplifications. SVN revision: 53207 --- data/themes/default/ephoto.edc | 190 +++++++++++-------------------- src/bin/ephoto_directory_thumb.c | 147 ++++++++++++------------ 2 files changed, 141 insertions(+), 196 deletions(-) diff --git a/data/themes/default/ephoto.edc b/data/themes/default/ephoto.edc index 7c13b13..0cbef97 100644 --- a/data/themes/default/ephoto.edc +++ b/data/themes/default/ephoto.edc @@ -95,72 +95,29 @@ collections } } } - group - { - name: "/ephoto/thumb/no_border"; - parts - { - part - { - name: "border"; - type: RECT; - mouse_events: 0; - description - { - state: "default" 0.0; - color: 255 255 255 0; - rel1.offset: 18 18; - rel2.offset: -17 -17; - } - } - part - { - name: "clipper"; - type: RECT; - mouse_events: 0; - description - { - state: "default" 0.0; - visible: 1; - color: 255 255 255 255; - } - } - part - { - name: "ephoto.swallow.content"; - type: SWALLOW; - mouse_events: 1; - clip_to: "clipper"; - description - { - state: "default" 0.0; - visible: 1; - rel1.to: "border"; - rel1.offset: 8 8; - rel2.to: "border"; - rel2.offset: -9 -9; - color: 255 255 255 255; - } - } - part - { - name: "event_area"; - type: RECT; - mouse_events: 1; - description - { - state: "default" 0.0; - color: 255 255 255 0; - rel1.to: "clipper"; - rel1.relative: 0.0 0.0; - rel1.offset: 0 0; - rel2.to: "clipper"; - rel2.relative: 1.0 1.0; - rel2.offset: -1 -1; - } - } - } - } + + group { name: "/ephoto/thumb/no_border"; + parts { + part { name: "ephoto.swallow.content"; + type: SWALLOW; + mouse_events: 0; + description { state: "default" 0.0; + min: 16 16; + rel1.offset: 8 8; + rel2.offset: -9 -9; + } + } + + part { + name: "eventarea"; + type: RECT; + description { state: "default" 0.0; + color: 255 255 255 0; + } + } + } + } + group { name: "elm/gengrid/item/ephoto/default"; @@ -617,73 +574,58 @@ collections } } } - group - { - name: "/ephoto/directory/thumb/layout"; - parts - { - part { - name: "ephoto.swallow.thumb1"; + + group { name: "/ephoto/directory/thumb/layout"; + data.item: "thumbs" "3"; + parts { + part { name: "ephoto.swallow.thumb1"; type: SWALLOW; description { state: "default" 0.0; - color: 255 0 0 255; - map { - on: 0; - } - + map.on: 0; } } - part { - name: "ephoto.swallow.thumb2"; - type: SWALLOW; + part { name: "ephoto.swallow.thumb2"; + type: SWALLOW; description { state: "default" 0.0; - color: 255 0 0 255; map { - on: 1; - rotation { - z: 20; - } - } - - } - } - part { - name: "ephoto.swallow.thumb3"; - type: SWALLOW; - description { - state: "default" 0.0; - color: 255 0 0 255; - map { - on: 1; - rotation { - z: -20; - } - } - } - } - - } - programs { - program { name: "load"; - signal: "load"; - script { - new Float:val; - - custom_state(PART:"ephoto.swallow.thumb3", "default", 0.0); - custom_state(PART:"ephoto.swallow.thumb2", "default", 0.0); - val = randf(); - val = 40 * val - 20; - set_state_val(PART:"ephoto.swallow.thumb3", STATE_MAP_ROT_Z, val); - val = randf(); - val = 40 * val - 20; - set_state_val(PART:"ephoto.swallow.thumb2", STATE_MAP_ROT_Z, val); - set_state(PART:"ephoto.swallow.thumb2", "custom", 0.0); - set_state(PART:"ephoto.swallow.thumb3", "custom", 0.0); + on: 1; + rotation.z: 20; } - } - } + } + } + part { name: "ephoto.swallow.thumb3"; + type: SWALLOW; + description { + state: "default" 0.0; + map { + on: 1; + rotation.z: -20; + } + } + } + } + + programs { + program { name: "load"; + signal: "load"; + script { + new Float:val; + + custom_state(PART:"ephoto.swallow.thumb3", "default", 0.0); + custom_state(PART:"ephoto.swallow.thumb2", "default", 0.0); + val = randf(); + val = 40 * val - 20; + set_state_val(PART:"ephoto.swallow.thumb3", STATE_MAP_ROT_Z, val); + val = randf(); + val = 40 * val - 20; + set_state_val(PART:"ephoto.swallow.thumb2", STATE_MAP_ROT_Z, val); + set_state(PART:"ephoto.swallow.thumb2", "custom", 0.0); + set_state(PART:"ephoto.swallow.thumb3", "custom", 0.0); + } + } + } } } diff --git a/src/bin/ephoto_directory_thumb.c b/src/bin/ephoto_directory_thumb.c index 9f42316..d03d37f 100644 --- a/src/bin/ephoto_directory_thumb.c +++ b/src/bin/ephoto_directory_thumb.c @@ -1,8 +1,4 @@ - -#include -#include - -#include "config.h" +#include "ephoto.h" typedef struct _Directory_Thumb Directory_Thumb; @@ -10,10 +6,21 @@ struct _Directory_Thumb { Evas_Object *layout; Eio_File *file; - Eina_List *thumbs; + Eina_List *frames; const char *path; + int theme_thumb_count; }; +static void +_layout_del(void *data, Evas *e, Evas_Object *layout, void *event_info) +{ + Directory_Thumb *dt = data; + if (dt->file) eio_file_cancel(dt->file); + eina_list_free(dt->frames); + eina_stringshare_del(dt->path); + free(dt); +} + static Eina_Bool _populate_filter(void *data, const char *file) { @@ -37,113 +44,109 @@ static void _populate_end(void *data) { Directory_Thumb *dt = (Directory_Thumb*) data; - dt->file = NULL; - } - static void _populate_error(int error, void *data) { Directory_Thumb *dt = (Directory_Thumb*)data; - dt->file = NULL; - } static void _populate_main(void *data, const char *file) { - Evas_Object *thumb, *o; + Evas_Object *frame, *image; int position; Directory_Thumb *dt = data; char buf[4096]; - position = eina_list_count(dt->thumbs); + position = eina_list_count(dt->frames); - if (position > 3 ) + if (position > dt->theme_thumb_count) { - eio_file_cancel(dt->file); - return; + if (dt->file) + { + eio_file_cancel(dt->file); + dt->file = NULL; + } + return; } - thumb = elm_layout_add(dt->layout); - elm_layout_file_set(thumb, PACKAGE_DATA_DIR "/themes/default/ephoto.edj", - "/ephoto/thumb/no_border"); - - evas_object_size_hint_weight_set(thumb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_show(thumb); + frame = elm_layout_add(dt->layout); + if (!elm_layout_file_set + (frame, PACKAGE_DATA_DIR "/themes/default/ephoto.edj", "/ephoto/thumb")) + ERR("could not load group '/ephoto/thumb' from file '%s'", + PACKAGE_DATA_DIR "/themes/default/ephoto.edj"); + evas_object_size_hint_weight_set(frame, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(frame); - thumb = elm_layout_add(dt->layout); - elm_layout_file_set(thumb, PACKAGE_DATA_DIR "/themes/default/ephoto.edj", - "/ephoto/thumb"); - - evas_object_size_hint_weight_set(thumb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_show(thumb); - - o = elm_thumb_add(thumb); - elm_thumb_file_set(o, file, NULL); - elm_object_style_set(o, "ephoto"); - evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, - EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(o, EVAS_HINT_FILL, - EVAS_HINT_FILL); - - evas_object_show(o); - elm_layout_content_set(thumb, "ephoto.swallow.content", o); + image = elm_thumb_add(frame); + elm_thumb_file_set(image, file, NULL); + elm_object_style_set(image, "ephoto"); + evas_object_size_hint_weight_set(image, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(image, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_layout_content_set(frame, "ephoto.swallow.content", image); snprintf(buf, sizeof(buf), "ephoto.swallow.thumb%d", position); - elm_layout_content_set(dt->layout, buf, thumb); - - evas_object_show(thumb); - dt->thumbs = eina_list_append(dt->thumbs, thumb); + elm_layout_content_set(dt->layout, buf, frame); + dt->frames = eina_list_append(dt->frames, frame); } -Evas_Object *ephoto_directory_thumb_add(Evas_Object *parent, const char *path) +Evas_Object * +ephoto_directory_thumb_add(Evas_Object *parent, const char *path) { Directory_Thumb *dt; - Evas_Object *thumb, *o; + Evas_Object *thumb, *placeholder; + const char *s; dt = calloc(1, sizeof( Directory_Thumb)); dt->path = eina_stringshare_add(path); dt->layout = elm_layout_add(parent); - if (!elm_layout_file_set(dt->layout, PACKAGE_DATA_DIR "/themes/default/ephoto.edj", - "/ephoto/directory/thumb/layout")) - printf(" Error loading group /ephoto/directory/thumb/layout in %s\n", PACKAGE_DATA_DIR "/themes/default/ephoto.edj"); - evas_object_size_hint_weight_set(dt->layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + if (!elm_layout_file_set + (dt->layout, PACKAGE_DATA_DIR "/themes/default/ephoto.edj", + "/ephoto/directory/thumb/layout")) + ERR("could not load group '/ephoto/directory/thumb/layout' from file '%s'", + PACKAGE_DATA_DIR "/themes/default/ephoto.edj"); + evas_object_size_hint_weight_set + (dt->layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_show(dt->layout); + evas_object_data_set(dt->layout, "dt", dt); + evas_object_event_callback_add + (dt->layout, EVAS_CALLBACK_DEL, _layout_del, dt); thumb = elm_layout_add(dt->layout); - if (!elm_layout_file_set(thumb, PACKAGE_DATA_DIR "/themes/default/ephoto.edj", - "/ephoto/thumb/no_border")) - printf(" Error loading group /ephoto/thumb/no_border in %s\n", PACKAGE_DATA_DIR "/themes/default/ephoto.edj"); - + if (!elm_layout_file_set + (thumb, PACKAGE_DATA_DIR "/themes/default/ephoto.edj", + "/ephoto/thumb/no_border")) + ERR("could not load group '/ephoto/thumb/no_border' from file '%s'", + PACKAGE_DATA_DIR "/themes/default/ephoto.edj"); //evas_object_size_hint_weight_set(thumb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_show(thumb); - - o = elm_image_add(thumb); - elm_image_file_set(o, PACKAGE_DATA_DIR "/images/change_directory.png", NULL); - evas_object_show(o); - - elm_layout_content_set(thumb, "ephoto.swallow.content", o); - elm_layout_content_set(dt->layout, "ephoto.swallow.thumb1", thumb); - evas_object_show(dt->layout); - - evas_object_data_set(dt->layout, "dt", dt); + placeholder = elm_image_add(thumb); + elm_image_file_set + (placeholder, PACKAGE_DATA_DIR "/images/change_directory.png", NULL); + elm_layout_content_set(thumb, "ephoto.swallow.content", placeholder); - dt->file = eio_file_ls(path, - _populate_filter, - _populate_main, - _populate_end, - _populate_error, - dt); + s = edje_object_data_get(elm_layout_edje_get(dt->layout), "thumbs"); + if (s) + { + dt->theme_thumb_count = atoi(s); + + /* TODO: fix "Up" to be another type of directory and do not need + * to check for existence here */ + if ((dt->theme_thumb_count > 0) && (ecore_file_exists(path))) + dt->file = eio_file_ls(path, + _populate_filter, + _populate_main, + _populate_end, + _populate_error, + dt); + } - /* TODO add del callback to free dt and its member */ return dt->layout; } -