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

Reply via email to