Enlightenment CVS committal

Author  : dj2
Project : e17
Module  : libs/ewl

Dir     : e17/libs/ewl/src/lib


Modified Files:
        ewl_enums.h ewl_image.c ewl_image.h 


Log Message:
- add rephorms image rotation and flip code to ewl. you can now do things
  like ewl_image_flip(img, EWL_ORIENTATION_HORIZONTAL) or
  ewl_image_rotate(img, EWL_ROTATE_CW_90) 

===================================================================
RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_enums.h,v
retrieving revision 1.56
retrieving revision 1.57
diff -u -3 -r1.56 -r1.57
--- ewl_enums.h 26 Sep 2006 18:33:47 -0000      1.56
+++ ewl_enums.h 10 Oct 2006 21:32:16 -0000      1.57
@@ -721,6 +721,24 @@
 typedef enum Ewl_Text_Wrap Ewl_Text_Wrap;
 
 /**
+ * @enum Ewl_Rotate
+ * The rotate values
+ */
+enum Ewl_Rotate
+{
+       EWL_ROTATE_CW_90,
+       EWL_ROTATE_180,
+       EWL_ROTATE_CW_270,
+       EWL_ROTATE_CC_90,
+       EWL_ROTATE_CC_270
+};
+
+/**
+ * The Ewl_Rotate
+ */
+typedef enum Ewl_Rotate Ewl_Rotate;
+
+/**
  * @}
  */ 
 #endif                         /* __EWL_ENUMS_H__ */
===================================================================
RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_image.c,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -3 -r1.49 -r1.50
--- ewl_image.c 9 Oct 2006 06:21:17 -0000       1.49
+++ ewl_image.c 10 Oct 2006 21:32:16 -0000      1.50
@@ -15,6 +15,9 @@
 static Ewl_Image_Type  ewl_image_type_get(const char *i);
 static void ewl_image_thumbnail_cb_destroy(Ewl_Widget *w, void *ev, void 
*data);
 
+static void ewl_image_rotate_180(Ewl_Image *img);
+static void ewl_image_rotate_90(Ewl_Image *img, int cc);
+
 /**
  * @return Returns a pointer to a new image widget on success, NULL on failure.
  * @brief Load an image widget with specified image contents
@@ -475,6 +478,97 @@
 }
 
 /**
+ * @param img: The image to flip
+ * @param orient: The orientation to flip
+ * @return Returns no value
+ * @brief Flips the given image in the given direction
+ */
+void
+ewl_image_flip(Ewl_Image *img, Ewl_Orientation orient)
+{
+       int ix, iy, ox, oy, mx, my, i, j, w, h;
+       int *ia, *ib, *oa, *ob, s;
+       unsigned int *in;
+       unsigned int tmp;
+
+       DENTER_FUNCTION(DLEVEL_STABLE);
+       DCHECK_PARAM_PTR("img", img);
+       DCHECK_TYPE("img", img, EWL_IMAGE_TYPE);
+
+       evas_object_image_size_get(img->image, &w, &h);
+       in = evas_object_image_data_get(img->image, TRUE);
+
+       if (orient == EWL_ORIENTATION_VERTICAL) 
+       {
+               mx = w;
+               my = h / 2;
+               ia = &iy;
+               ib = &ix;
+               oa = &oy;
+               ob = &ox;
+               s = h;
+       }
+       else
+       {
+               mx = w / 2;
+               my = h;
+               ia = &ix;
+               ib = &iy;
+               oa = &ox;
+               ob = &oy;
+               s = w;
+       }
+
+       for (iy = 0; iy < my; iy++) 
+       {
+               for (ix = 0; ix < mx; ix++) 
+               {
+                       *oa = s - 1 - *ia;
+                       *ob = *ib;
+
+                       i = iy * w + ix;
+                       j = oy * w + ox;
+
+                       tmp = in[j];
+                       in[j] = in[i];
+                       in[i] = tmp;
+               }
+       }
+
+       evas_object_image_data_set(img->image, in);
+       evas_object_image_data_update_add(img->image, 0, 0, w, h);
+
+       DLEAVE_FUNCTION(DLEVEL_STABLE);
+}
+
+/**
+ * @param i: The image to rotate
+ * @param rotate: The amount to rotate the image
+ * @return Returns no value
+ * @brief Rotates the given image by the given @a rotate value
+ */
+void
+ewl_image_rotate(Ewl_Image *i, Ewl_Rotate rotate)
+{
+       DENTER_FUNCTION(DLEVEL_STABLE);
+       DCHECK_PARAM_PTR("i", i);
+       DCHECK_TYPE("i", i, EWL_IMAGE_TYPE);
+
+       if (rotate == EWL_ROTATE_180)
+               ewl_image_rotate_180(i);
+
+       else if ((rotate == EWL_ROTATE_CW_90) ||
+                       (rotate == EWL_ROTATE_CC_270))
+               ewl_image_rotate_90(i, FALSE);
+
+       else
+               ewl_image_rotate_90(i, TRUE);
+
+
+       DLEAVE_FUNCTION(DLEVEL_STABLE);
+}
+
+/**
  * @param i: the image to thumbnail
  * @return Returns a thumbnailed image widget on success, NULL on failure.
  * @brief Create a widget representing a thumbnailed version of the image.
@@ -1017,6 +1111,103 @@
                evas_event_feed_mouse_move(emb->evas, ev->x, ev->y, 
                                (unsigned int)((unsigned long 
long)(ecore_time_get() * 1000.0) & 0xffffffff), 
                                NULL);
+
+       DLEAVE_FUNCTION(DLEVEL_STABLE);
+}
+
+static void
+ewl_image_rotate_90(Ewl_Image *img, int cc)
+{
+       int i, j, w = 0, h = 0, ix, iy, ox, oy, os, ow, oh;
+       int *ia, *ib, *oa, *ob;
+       unsigned int *in, *out;
+ 
+       DENTER_FUNCTION(DLEVEL_STABLE);
+       DCHECK_PARAM_PTR("img", img);
+       DCHECK_TYPE("img", img, EWL_IMAGE_TYPE);
+
+       evas_object_image_size_get(img->image, &w, &h);
+       in = evas_object_image_data_get(img->image, FALSE);
+
+       out = malloc(w * h * sizeof(unsigned int));
+
+       ow = h;
+       oh = w;
+
+       /* these pointers pull the invarient conditional out of the loop */
+       if (cc)
+       {
+               oa = &oy;
+               ob = &ox;
+               ia = &iy;
+               ib = &ix;
+               os = oh;
+       }
+       else
+       {
+               oa = &ox;
+               ob = &oy;
+               ia = &ix;
+               ib = &iy;
+               os = ow;
+       }
+
+       for (i = 0; i < (w * h); i++)
+       {
+               ix = i % w;
+               iy = i / w;
+
+               /* rotate */
+               *oa = os - 1 - *ib;
+               *ob = *ia;
+
+               /* convert back to array index */
+               j = oy * ow + ox;
+
+               out[j] = in[i];
+       }
+
+       img->ow = ow;
+       img->oh = oh;
+
+       evas_object_image_size_set(img->image, ow, oh);
+       evas_object_image_data_set(img->image, out);
+       evas_object_image_data_update_add(img->image, 0, 0, ow, oh);
+
+       ewl_object_preferred_inner_size_set(EWL_OBJECT(img), ow, oh);
+
+       DLEAVE_FUNCTION(DLEVEL_STABLE);
+}
+
+static void
+ewl_image_rotate_180(Ewl_Image *img)
+{
+       int ix, iy, ox, oy, i, j, size, w, h;
+       unsigned int *in, tmp;
+
+       DENTER_FUNCTION(DLEVEL_STABLE);
+       DCHECK_PARAM_PTR("img", img);
+       DCHECK_TYPE("img", img, EWL_IMAGE_TYPE);
+
+       evas_object_image_size_get(img->image, &w, &h);
+       in = evas_object_image_data_get(img->image, TRUE);
+
+       size = w * h / 2;
+       for (i = 0; i < size; i++) 
+       {
+               ix = i % w;
+               iy = i / w;
+               ox = w - 1 - ix;
+               oy = h - 1 - iy;
+               j = oy * w + ox;
+
+               tmp = in[j];
+               in[j] = in[i];
+               in[i] = tmp;
+       }
+
+       evas_object_image_data_set(img->image, in);
+       evas_object_image_data_update_add(img->image, 0, 0, w, h);
 
        DLEAVE_FUNCTION(DLEVEL_STABLE);
 }
===================================================================
RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_image.h,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -3 -r1.27 -r1.28
--- ewl_image.h 30 Sep 2006 18:41:01 -0000      1.27
+++ ewl_image.h 10 Oct 2006 21:32:16 -0000      1.28
@@ -122,6 +122,9 @@
 void            ewl_image_constrain_set(Ewl_Image *i, unsigned int size);
 unsigned int    ewl_image_constrain_get(Ewl_Image *i);
 
+void            ewl_image_flip(Ewl_Image *img, Ewl_Orientation orient);
+void            ewl_image_rotate(Ewl_Image *i, Ewl_Rotate rotate);
+
 Ewl_Widget      *ewl_image_thumbnail_get(Ewl_Image *i);
 
 Ewl_Widget      *ewl_image_thumbnail_new(void);



-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to