From 9236d613b95308147b9272c56d075aa308245dbc Mon Sep 17 00:00:00 2001 From: titan Date: Thu, 1 Oct 2009 17:45:35 +0000 Subject: [PATCH] Fix a bug on resizing. SVN revision: 42838 --- src/bin/ephoto.h | 2 - src/bin/ephoto_image_browser.c | 35 +--------- src/bin/ephoto_main.c | 3 +- src/bin/ephoto_table.c | 114 ++++++++++++++------------------- 4 files changed, 54 insertions(+), 100 deletions(-) diff --git a/src/bin/ephoto.h b/src/bin/ephoto.h index 1684862..8bbe28d 100644 --- a/src/bin/ephoto.h +++ b/src/bin/ephoto.h @@ -62,7 +62,6 @@ void ephoto_table_pack(Evas_Object *obj, char *image); void ephoto_table_viewport_set(Evas_Object *obj, int w, int h); void ephoto_table_next_page(Evas_Object *obj); void ephoto_table_prev_page(Evas_Object *obj); -void reshow_table_items(Evas_Object *obj); typedef struct _Ephoto Ephoto; struct _Ephoto @@ -72,7 +71,6 @@ struct _Ephoto Ethumb_Client *thumb_cli; Evas_Object *bg; Evas_Object *image_browser; - Evas_Object *image_browser_tbl; Evas_Object *flow; Evas_Object *sel; Eina_List *images; diff --git a/src/bin/ephoto_image_browser.c b/src/bin/ephoto_image_browser.c index 7d599ad..a48d7d1 100644 --- a/src/bin/ephoto_image_browser.c +++ b/src/bin/ephoto_image_browser.c @@ -1,7 +1,5 @@ #include "ephoto.h" -static void move_left(void *data, Evas_Object *obj, const char *emission, const char *source); -static void move_right(void *data, Evas_Object *obj, const char *emission, const char *source); static int get_thumbnails(void *data); static Ecore_Idler *idler; static DIR *direc; @@ -10,54 +8,27 @@ static DIR *direc; void add_image_browser(void) { Evas_Object *o; - int x, y, w, h; - - o = edje_object_add(em->e); - edje_object_file_set(o, PACKAGE_DATA_DIR "/themes/default/ephoto.edj", "/ephoto/image/browser"); - em->image_browser = o; - - edje_object_part_geometry_get(em->bg, "ephoto.swallow.content", &x, &y, &w, &h); o = ephoto_table_add(em->e); ephoto_table_padding_set(o, 20, 20); - edje_object_part_swallow(em->image_browser, "ephoto.swallow.content", o); - em->image_browser_tbl = o; - - edje_object_signal_callback_add(em->image_browser, "mouse,up,1", "move_left", move_left, NULL); - - edje_object_signal_callback_add(em->image_browser, "mouse,up,1", "move_right", move_right, NULL); + em->image_browser = o; } void show_image_browser(void) { int w, h; evas_object_show(em->image_browser); - evas_object_show(em->image_browser_tbl); edje_object_part_swallow(em->bg, "ephoto.swallow.content", em->image_browser); edje_object_part_geometry_get(em->bg, "ephoto.swallow.content", 0, 0, &w, &h); - reshow_table_items(em->image_browser_tbl); - ephoto_table_viewport_set(em->image_browser_tbl, w, h); + ephoto_table_viewport_set(em->image_browser, w, h); } void hide_image_browser(void) { evas_object_hide(em->image_browser); - evas_object_hide(em->image_browser_tbl); edje_object_part_unswallow(em->bg, em->image_browser); } -static void move_left(void *data, Evas_Object *obj, const char *emission, const char *source) -{ - ephoto_table_prev_page(em->image_browser_tbl); - printf("Left\n"); -} - -static void move_right(void *data, Evas_Object *obj, const char *emission, const char *source) -{ - ephoto_table_next_page(em->image_browser_tbl); - printf("Right\n"); -} - /*Get a list of images and begin to thumbnail them*/ /*They will be passed to create_thumbnail for creation*/ void populate_thumbnails(void) @@ -99,7 +70,7 @@ static int get_thumbnails(void *data) if (!strncmp(type, "image", 5)) { em->images = eina_list_append(em->images, strdup(path)); - ephoto_table_pack(em->image_browser_tbl, strdup(path)); + ephoto_table_pack(em->image_browser, strdup(path)); } } } diff --git a/src/bin/ephoto_main.c b/src/bin/ephoto_main.c index 296c797..0c1d468 100644 --- a/src/bin/ephoto_main.c +++ b/src/bin/ephoto_main.c @@ -44,7 +44,8 @@ window_shown(void *data, Evas *e, Evas_Object *obj, void *event_info) /*The window has been closed, free and quit*/ static void window_close(Ecore_Evas *ee) { - evas_object_del(em->image_browser_tbl); + evas_object_del(em->image_browser); + evas_object_del(em->flow); if (em->images) eina_list_free(em->images); free(em); diff --git a/src/bin/ephoto_table.c b/src/bin/ephoto_table.c index 3eaa8a6..0e692c6 100644 --- a/src/bin/ephoto_table.c +++ b/src/bin/ephoto_table.c @@ -42,11 +42,25 @@ static void _table_smart_color_set(Evas_Object *obj, int r, int g, int b, int a) static void _table_smart_clip_set(Evas_Object *obj, Evas_Object *clip); static void _table_smart_clip_unset(Evas_Object *obj); +static void move_left(void *data, Evas_Object *obj, const char *emission, const char *source); +static void move_right(void *data, Evas_Object *obj, const char *emission, const char *source); static void connect_callback(void *data, Ethumb_Client *client, Eina_Bool success); static void thumb_generated(void *data, Ethumb_Client *client, int id, const char *file, const char *key, const char *thumb_path, const char *thumb_key, Eina_Bool success); +static void move_left(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + ephoto_table_prev_page(em->image_browser); + printf("Left\n"); +} + +static void move_right(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + ephoto_table_next_page(em->image_browser); + printf("Right\n"); +} + static void connect_callback(void *data, Ethumb_Client *client, Eina_Bool success) { printf("Connected to ethumb client: %d\n", success); @@ -118,28 +132,12 @@ static void image_clicked(void *data, Evas *e, Evas_Object *obj, void *event_inf Smart_Data *sd; ev = event_info; - sd = evas_object_smart_data_get(em->image_browser_tbl); + sd = evas_object_smart_data_get(em->image_browser); if (ev->flags == EVAS_BUTTON_DOUBLE_CLICK) { edje_object_signal_emit(em->image_browser, "ephoto.browser.hidden", "ephoto"); node = evas_object_data_get(obj, "image"); - if (sd->items) - { - Eina_List *iterator; - Evas_Object *o, *i;; - - iterator = sd->items; - - while(eina_list_data_get(iterator)) - { - o = eina_list_data_get(iterator); - i = edje_object_part_swallow_get(o, "ephoto.swallow.content"); - edje_object_signal_emit(i, "ephoto.thumb.hidden", "ephoto"); - edje_object_signal_emit(o, "ephoto.thumb.hidden", "ephoto"); - iterator = eina_list_next(iterator); - } - } hide_image_browser(); show_flow_view(node, sd->images); return; @@ -153,32 +151,6 @@ static void image_clicked(void *data, Evas *e, Evas_Object *obj, void *event_inf em->sel = obj; } -void reshow_table_items(Evas_Object *obj) -{ - Smart_Data *sd; - - sd = evas_object_smart_data_get(obj); - if (!sd) - return; - if (sd->items) - { - Eina_List *iterator; - Evas_Object *o, *i;; - - iterator = sd->items; - - while(eina_list_data_get(iterator)) - { - o = eina_list_data_get(iterator); - i = edje_object_part_swallow_get(o, "ephoto.swallow.content"); - edje_object_signal_emit(i, "ephoto.thumb.visible", "ephoto"); - edje_object_signal_emit(o, "ephoto.thumb.visible", "ephoto"); - iterator = eina_list_next(iterator); - } - } -} - - Evas_Object *ephoto_table_add(Evas *e) { _table_smart_init(); @@ -194,6 +166,7 @@ void ephoto_table_padding_set(Evas_Object *obj, int paddingw, int paddingh) return; sd->paddingw = paddingw; sd->paddingh = paddingh; + sd->items_per_page = (sd->visiblew / (sd->item_w+sd->paddingw)) * (sd->visibleh / (sd->item_h+sd->paddingh)); } void ephoto_table_pack(Evas_Object *obj, char *image) @@ -205,7 +178,6 @@ void ephoto_table_pack(Evas_Object *obj, char *image) const char *thumb; sd = evas_object_smart_data_get(obj); - sd->images = eina_list_append(sd->images, strdup(image)); @@ -220,15 +192,15 @@ void ephoto_table_pack(Evas_Object *obj, char *image) pages++; sd->total_pages = pages; snprintf(text, PATH_MAX, "Page: %d of %d", sd->current_page, sd->total_pages); - edje_object_part_text_set(em->image_browser, "ephoto.text.object", text); + edje_object_part_text_set(sd->obj, "ephoto.text.object", text); return; } img = edje_object_add(em->e); edje_object_file_set(img, PACKAGE_DATA_DIR "/themes/default/ephoto.edj", "/ephoto/thumb/shadow"); - evas_object_move(img, sd->tw, sd->th); evas_object_show(img); + evas_object_move(img, sd->tw, sd->th); edje_object_signal_emit(img, "ephoto.thumb.visible", "ephoto"); evas_object_data_set(img, "image", eina_list_nth_list(sd->images, eina_list_count(sd->images)-1)); @@ -276,11 +248,10 @@ void ephoto_table_viewport_set(Evas_Object *obj, int w, int h) if ((sd->visiblew == w) && (sd->visibleh == h)) return; sd->visiblew = w; - sd->visibleh = h; - evas_object_resize(sd->obj, w, h); - evas_object_resize(em->image_browser, w, h); - sd->items_per_page = (sd->visiblew / sd->item_w) * (sd->visibleh / sd->item_h); - if (!eina_list_count(sd->items)) + sd->visibleh = h; + sd->items_per_page = (sd->visiblew / (sd->item_w+sd->paddingw)) * (sd->visibleh / (sd->item_h+sd->paddingh)); + evas_object_resize(sd->obj, sd->visiblew, sd->visibleh); + if (!eina_list_count(sd->images)) return; pages = eina_list_count(sd->images)/sd->items_per_page; @@ -292,7 +263,7 @@ void ephoto_table_viewport_set(Evas_Object *obj, int w, int h) else sd->total_pages = pages; snprintf(text, PATH_MAX, "Page: %d of %d", sd->current_page, sd->total_pages); - edje_object_part_text_set(em->image_browser, "ephoto.text.object", text); + edje_object_part_text_set(sd->obj, "ephoto.text.object", text); _table_smart_reconfigure(sd); } @@ -367,7 +338,7 @@ static void _table_smart_change_page(Smart_Data *sd, int direction) return; snprintf(text, PATH_MAX, "Page: %d of %d", sd->current_page, sd->total_pages); - edje_object_part_text_set(em->image_browser, "ephoto.text.object", text); + edje_object_part_text_set(sd->obj, "ephoto.text.object", text); for (j = 0; j <= sd->items_per_page; j++) { @@ -595,7 +566,6 @@ static void _table_smart_reconfigure(Smart_Data *sd) iteratorb = eina_list_next(iteratorb); } } - return; } @@ -620,7 +590,6 @@ static void _table_smart_init(void) NULL, NULL }; - em->thumb_cli = ethumb_client_connect(connect_callback, NULL, NULL); _smart = evas_smart_class_new(&sc); } } @@ -635,8 +604,8 @@ static void _table_smart_add(Evas_Object *obj) if (!sd) return; - evas_object_geometry_get(em->image_browser, 0, 0, &w, &h); - + edje_object_part_geometry_get(em->bg, "ephoto.swallow.content", 0, 0, &w, &h); + sd->visiblew = w; sd->visibleh = h; sd->tw = 60; @@ -652,16 +621,21 @@ static void _table_smart_add(Evas_Object *obj) sd->visible_items = 0; sd->total_pages = 1; - sd->obj = evas_object_rectangle_add(em->e); - evas_object_color_set(sd->obj, 255, 255, 255, 0); + sd->obj = edje_object_add(em->e); + edje_object_file_set(sd->obj, PACKAGE_DATA_DIR "/themes/default/ephoto.edj", "/ephoto/image/browser"); evas_object_smart_data_set(obj, sd); + edje_object_signal_callback_add(sd->obj, "mouse,up,1", "move_left", move_left, NULL); + + edje_object_signal_callback_add(sd->obj, "mouse,up,1", "move_right", move_right, NULL); + img = edje_object_add(em->e); edje_object_file_set(img, PACKAGE_DATA_DIR "/themes/default/ephoto.edj", "/ephoto/thumb/shadow"); edje_object_size_min_get(img, &sd->item_w, &sd->item_h); evas_object_del(img); - sd->items_per_page = (sd->visiblew / sd->item_w) * (sd->visibleh / sd->item_h); + sd->items_per_page = (sd->visiblew / sd->item_w+sd->paddingw) * (sd->visibleh / sd->item_h+sd->paddingh); + em->thumb_cli = ethumb_client_connect(connect_callback, NULL, NULL); } static void _table_smart_del(Evas_Object *obj) @@ -709,19 +683,19 @@ static void _table_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h) if (!sd) return; - evas_object_geometry_get(em->image_browser, 0, 0, &ibw, &ibh); + evas_object_geometry_get(sd->obj, 0, 0, &ibw, &ibh); if ((w == sd->w) && (h == sd->h)) return; sd->w = w; sd->h = h; evas_object_resize(sd->obj, w, h); - if (!eina_list_count(sd->items)) + if (!eina_list_count(sd->images)) return; if ((ibw == sd->visiblew) && (ibh == sd->visibleh)) return; else - ephoto_table_viewport_set(obj, ibw, ibh); + ephoto_table_viewport_set(obj, w, h); } static void _table_smart_show(Evas_Object *obj) @@ -731,18 +705,28 @@ static void _table_smart_show(Evas_Object *obj) sd = evas_object_smart_data_get(obj); if (!sd) return; - evas_object_show(sd->obj); + _table_smart_reconfigure(sd); } static void _table_smart_hide(Evas_Object *obj) { + Eina_List *iterator; + Evas_Object *o; Smart_Data *sd; sd = evas_object_smart_data_get(obj); if (!sd) return; - + iterator = sd->items; + while (eina_list_data_get(iterator)) + { + + o = eina_list_data_get(iterator); + edje_object_signal_emit(o, "ephoto.thumb.hidden", "ephoto"); + evas_object_hide(o); + iterator = eina_list_next(iterator); + } evas_object_hide(sd->obj); }