Enlightenment CVS committal Author : codewarrior Project : e17 Module : proto
Dir : e17/proto/exhibit/src/bin Modified Files: exhibit.h exhibit_image.c exhibit_image.h exhibit_main.c exhibit_menus.c Log Message: zoom zoooom! - add zoom in / out / 1:1 to buttons and menus. =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/exhibit/src/bin/exhibit.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- exhibit.h 14 Dec 2005 11:33:30 -0000 1.1 +++ exhibit.h 14 Dec 2005 15:02:33 -0000 1.2 @@ -15,6 +15,7 @@ #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> +#include <math.h> #include "config.h" @@ -62,6 +63,8 @@ char *dir; char cur_path[PATH_MAX]; + + int zoom; struct { int down; @@ -83,6 +86,8 @@ #define WINDOW_WIDTH 700 #define WINDOW_HEIGHT 500 #define VIEWABLES 3 +#define ZOOM_MAX 16 +#define ZOOM_MIN -16 #include "exhibit_menus.h" #include "exhibit_file.h" =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/exhibit/src/bin/exhibit_image.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- exhibit_image.c 14 Dec 2005 11:51:50 -0000 1.2 +++ exhibit_image.c 14 Dec 2005 15:02:33 -0000 1.3 @@ -23,10 +23,10 @@ else if(ev->button == 3) { e->menu = etk_menu_new(); - _ex_menu_item_new(EX_MENU_ITEM_NORMAL, _("Zoom in"), EX_IMAGE_ZOOM_IN, ETK_MENU_SHELL(e->menu), NULL, NULL); - _ex_menu_item_new(EX_MENU_ITEM_NORMAL, _("Zoom out"), EX_IMAGE_ZOOM_OUT, ETK_MENU_SHELL(e->menu), NULL, NULL); - _ex_menu_item_new(EX_MENU_ITEM_NORMAL, _("Zoom 1:1"), EX_IMAGE_ONE_TO_ONE, ETK_MENU_SHELL(e->menu), NULL, NULL); - _ex_menu_item_new(EX_MENU_ITEM_NORMAL, _("Fit to window"), EX_IMAGE_FIT_TO_WINDOW, ETK_MENU_SHELL(e->menu), NULL, NULL); + _ex_menu_item_new(EX_MENU_ITEM_NORMAL, _("Zoom in"), EX_IMAGE_ZOOM_IN, ETK_MENU_SHELL(e->menu), ETK_CALLBACK(_ex_menu_zoom_in_cb), e); + _ex_menu_item_new(EX_MENU_ITEM_NORMAL, _("Zoom out"), EX_IMAGE_ZOOM_OUT, ETK_MENU_SHELL(e->menu), ETK_CALLBACK(_ex_menu_zoom_out_cb), e); + _ex_menu_item_new(EX_MENU_ITEM_NORMAL, _("Zoom 1:1"), EX_IMAGE_ONE_TO_ONE, ETK_MENU_SHELL(e->menu), ETK_CALLBACK(_ex_menu_zoom_one_to_one_cb), e); + _ex_menu_item_new(EX_MENU_ITEM_NORMAL, _("Fit to window"), EX_IMAGE_FIT_TO_WINDOW, ETK_MENU_SHELL(e->menu), ETK_CALLBACK(_ex_menu_fit_to_window_cb), e); etk_menu_popup(e->menu); } } @@ -394,3 +394,32 @@ exit(0); } } + +void +_ex_image_zoom(Etk_Image *im, int zoom) +{ + unsigned int *data; + int w, h; + int x, y; + unsigned int *p1, *p2, *tmp; + + if(im->use_edje) + return; + + etk_image_size_get(im, &w, &h); + if(zoom > 0) + { + w *= zoom; + h *= zoom; + } + else if(zoom < 0) + { + w /= abs(zoom); + h /= abs(zoom); + } + + evas_object_resize(im->image_object, w, h); + evas_object_image_fill_set(im->image_object, 0, 0, w, h); + etk_widget_size_request_set(im, w, h); + etk_widget_redraw_queue(im); +} =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/exhibit/src/bin/exhibit_image.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- exhibit_image.h 14 Dec 2005 11:33:30 -0000 1.1 +++ exhibit_image.h 14 Dec 2005 15:02:33 -0000 1.2 @@ -10,5 +10,6 @@ void _ex_image_blur(Etk_Image *im); void _ex_image_sharpen(Etk_Image *im); void _ex_image_save(Etk_Image *im); +void _ex_image_zoom(Etk_Image *im, int zoom); #endif =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/exhibit/src/bin/exhibit_main.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- exhibit_main.c 14 Dec 2005 11:51:50 -0000 1.2 +++ exhibit_main.c 14 Dec 2005 15:02:33 -0000 1.3 @@ -1,5 +1,11 @@ #include "exhibit.h" +#define EX_BUTTON_GET_RETURN(o) \ + Etk_Button *item; \ + if (!(item = ETK_BUTTON(o))) \ + return; + + extern Evas_List *thumb_list; char *viewables[] = @@ -12,6 +18,68 @@ Evas_List *event_handlers; void +_ex_main_button_zoom_in_cb(Etk_Object *obj, void *data) +{ + Exhibit *e; + Etk_Tree_Row *r; + EX_BUTTON_GET_RETURN(obj); + + e = data; + r = etk_tree_selected_row_get(ETK_TREE(e->itree)); + if(!r) return; + + if(e->zoom == ZOOM_MAX) + e->zoom = ZOOM_MAX; + else + e->zoom += 2; + + _ex_image_zoom(ETK_IMAGE(e->image), e->zoom); +} + +void +_ex_main_button_zoom_out_cb(Etk_Object *obj, void *data) +{ + Exhibit *e; + Etk_Tree_Row *r; + EX_BUTTON_GET_RETURN(obj); + + e = data; + r = etk_tree_selected_row_get(ETK_TREE(e->itree)); + if(!r) return; + + if(e->zoom <= ZOOM_MIN) + e->zoom = ZOOM_MIN; + else + e->zoom -= 2; + + _ex_image_zoom(ETK_IMAGE(e->image), e->zoom); +} + +void +_ex_main_button_zoom_one_to_one_cb(Etk_Object *obj, void *data) +{ + Exhibit *e; + Etk_Tree_Row *r; + EX_BUTTON_GET_RETURN(obj); + + e = data; + r = etk_tree_selected_row_get(ETK_TREE(e->itree)); + if(!r) return; + + e->zoom = 0; + + _ex_image_zoom(ETK_IMAGE(e->image), e->zoom); + +} + +void +_ex_main_button_fit_to_window_cb(Etk_Object *obj, void *data) +{ + EX_BUTTON_GET_RETURN(obj); + printf("fit to window\n"); +} + +void _ex_main_itree_item_clicked_cb(Etk_Object *object, Etk_Tree_Row *row, void *data) { Etk_Tree *tree; @@ -24,6 +92,7 @@ Exhibit *e; e = data; + e->zoom = 0; tree = ETK_TREE(object); etk_tree_row_fields_get(row, etk_tree_nth_col_get(tree, 0), NULL, &icol_string, etk_tree_nth_col_get(tree, 1),NULL); @@ -38,14 +107,18 @@ etk_image_set_from_edje(ETK_IMAGE(e->image), icol_string, "desktop/background"); } else - etk_image_set_from_file(ETK_IMAGE(e->image), icol_string); + { + etk_image_set_from_file(ETK_IMAGE(e->image), icol_string); + etk_image_size_get(ETK_IMAGE(e->image), &w, &h); + etk_widget_size_request_set(ETK_WIDGET(e->image), w, h); + } bytes = ecore_file_size(icol_string); snprintf(size, sizeof(size), "%d K", (int)(bytes/1024)); etk_statusbar_pop(ETK_STATUSBAR(e->statusbar[0]), 0); etk_statusbar_push(ETK_STATUSBAR(e->statusbar[0]), size, 0); - etk_image_size_get(ETK_IMAGE(e->image), &w, &h); + etk_image_size_get(ETK_IMAGE(e->image), &w, &h); snprintf(size, sizeof(size), "( %d x %d )", w, h); etk_statusbar_pop(ETK_STATUSBAR(e->statusbar[1]), 0); etk_statusbar_push(ETK_STATUSBAR(e->statusbar[1]), size, 0); @@ -390,36 +463,44 @@ e->zoom_in[0] = etk_button_new(); e->zoom_in[1] = etk_image_new_from_edje(PACKAGE_DATA_DIR"/images/images.edj", "zoom_in"); + etk_widget_pass_events_set(e->zoom_in[1], TRUE); etk_widget_size_request_set(e->zoom_in[1], 33, 27); //etk_button_image_set(ETK_BUTTON(button), ETK_IMAGE(e->zoom_in[1])); etk_container_add(ETK_CONTAINER(e->zoom_in[0]), e->zoom_in[1]); + etk_signal_connect("clicked", ETK_OBJECT(e->zoom_in[0]), ETK_CALLBACK(_ex_main_button_zoom_in_cb), e); etk_table_attach(ETK_TABLE(e->table), e->zoom_in[0], 0, 0, 1, 1, 0, 0, ETK_FILL_POLICY_NONE); e->zoom_out[0] = etk_button_new(); e->zoom_out[1] = etk_image_new_from_edje(PACKAGE_DATA_DIR"/images/images.edj", "zoom_out"); + etk_widget_pass_events_set(e->zoom_out[1], TRUE); etk_widget_size_request_set(e->zoom_out[1], 33, 27); //etk_button_image_set(ETK_BUTTON(e->zoom_out[0]), ETK_IMAGE(e->zoom_out[1])); etk_container_add(ETK_CONTAINER(e->zoom_out[0]), e->zoom_out[1]); + etk_signal_connect("clicked", ETK_OBJECT(e->zoom_out[0]), ETK_CALLBACK(_ex_main_button_zoom_out_cb), e); etk_table_attach(ETK_TABLE(e->table), e->zoom_out[0], 1, 1, 1, 1, 0, 0, ETK_FILL_POLICY_NONE); e->fit[0] = etk_button_new(); e->fit[1] = etk_image_new_from_edje(PACKAGE_DATA_DIR"/images/images.edj", "fit_to_window"); + etk_widget_pass_events_set(e->fit[1], TRUE); etk_widget_size_request_set(e->fit[1], 33, 27); //etk_button_image_set(ETK_BUTTON(button), ETK_IMAGE(e->fit[1])); etk_container_add(ETK_CONTAINER(e->fit[0]), e->fit[1]); + etk_signal_connect("clicked", ETK_OBJECT(e->original[0]), ETK_CALLBACK(_ex_main_button_fit_to_window_cb), e); etk_table_attach(ETK_TABLE(e->table), e->fit[0], 2, 2, 1, 1, 0, 0, ETK_FILL_POLICY_NONE); e->original[0] = etk_button_new(); e->original[1] = etk_image_new_from_edje(PACKAGE_DATA_DIR"/images/images.edj", "one_to_one"); + etk_widget_pass_events_set(e->original[1], TRUE); etk_widget_size_request_set(e->original[1], 33, 27); //etk_button_image_set(ETK_BUTTON(e->original[0]), ETK_IMAGE(e->original[1])); etk_container_add(ETK_CONTAINER(e->original[0]), e->original[1]); + etk_signal_connect("clicked", ETK_OBJECT(e->original[0]), ETK_CALLBACK(_ex_main_button_zoom_one_to_one_cb), e); etk_table_attach(ETK_TABLE(e->table), e->original[0], 3, 3, 1, 1, 0, 0, ETK_FILL_POLICY_NONE); =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/exhibit/src/bin/exhibit_menus.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- exhibit_menus.c 14 Dec 2005 12:00:43 -0000 1.2 +++ exhibit_menus.c 14 Dec 2005 15:02:33 -0000 1.3 @@ -230,22 +230,56 @@ void _ex_menu_zoom_in_cb(Etk_Object *obj, void *data) { + Exhibit *e; + Etk_Tree_Row *r; EX_MENU_ITEM_GET_RETURN(obj); - printf("zoom in\n"); + + e = data; + r = etk_tree_selected_row_get(ETK_TREE(e->itree)); + if(!r) return; + + if(e->zoom == ZOOM_MAX) + e->zoom = ZOOM_MAX; + else + e->zoom += 2; + + _ex_image_zoom(ETK_IMAGE(e->image), e->zoom); } void _ex_menu_zoom_out_cb(Etk_Object *obj, void *data) { + Exhibit *e; + Etk_Tree_Row *r; EX_MENU_ITEM_GET_RETURN(obj); - printf("zoom out\n"); + + e = data; + r = etk_tree_selected_row_get(ETK_TREE(e->itree)); + if(!r) return; + + if(e->zoom <= ZOOM_MIN) + e->zoom = ZOOM_MIN; + else + e->zoom -= 2; + + _ex_image_zoom(ETK_IMAGE(e->image), e->zoom); } void _ex_menu_zoom_one_to_one_cb(Etk_Object *obj, void *data) { + Exhibit *e; + Etk_Tree_Row *r; EX_MENU_ITEM_GET_RETURN(obj); - printf("zoom one to one\n"); + + e = data; + r = etk_tree_selected_row_get(ETK_TREE(e->itree)); + if(!r) return; + + e->zoom = 0; + + _ex_image_zoom(ETK_IMAGE(e->image), e->zoom); + } void ------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Do you grep through log files for problems? Stop! Download the new AJAX search engine that makes searching your log files as easy as surfing the web. DOWNLOAD SPLUNK! http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs