Enlightenment CVS committal

Author  : raster
Project : e17
Module  : libs/ecore

Dir     : e17/libs/ecore/src/lib/ecore_evas


Modified Files:
      Tag: SPLIT
        Ecore_Evas.h ecore_evas.c ecore_evas_fb.c ecore_evas_private.h 
        ecore_evas_x.c 


Log Message:


rotation api works.. (almost 100% - loigic holes with cursor position when
you do the rotate. it fixes up after a mouse eent.. but thats not good enuf).

===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_evas/Attic/Ecore_Evas.h,v
retrieving revision 1.1.2.12
retrieving revision 1.1.2.13
diff -u -3 -r1.1.2.12 -r1.1.2.13
--- Ecore_Evas.h        12 Feb 2003 11:27:32 -0000      1.1.2.12
+++ Ecore_Evas.h        12 Feb 2003 23:29:41 -0000      1.1.2.13
@@ -3,7 +3,7 @@
 
 /* FIXME:
  * to do soon:
- * - rotation api needs to work
+ * - on rotation cursor pos needs to update & have synthetic move
  * - iconfication api needs to work
  * - maximization api nees to work
  * - attach keyed data to an ecore_evas canvas
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_evas/Attic/ecore_evas.c,v
retrieving revision 1.1.2.13
retrieving revision 1.1.2.14
diff -u -3 -r1.1.2.13 -r1.1.2.14
--- ecore_evas.c        12 Feb 2003 11:27:32 -0000      1.1.2.13
+++ ecore_evas.c        12 Feb 2003 23:29:42 -0000      1.1.2.14
@@ -33,6 +33,12 @@
    _ecore_evas_init_count--;
    if (_ecore_evas_init_count == 0)
      {
+#ifdef BUILD_ECORE_X
+       while (_ecore_evas_x_shutdown());
+#endif
+#ifdef BUILD_ECORE_FB
+       while (_ecore_evas_fb_shutdown());
+#endif
      }
    if (_ecore_evas_init_count < 0) _ecore_evas_init_count = 0;
    return _ecore_evas_init_count;
@@ -242,8 +248,16 @@
      }
    if (w < 1) w = 1;
    if (h < 1) h = 1;
-   IFC(ee, fn_resize) (ee, w, h);
-   IFE;
+   if ((ee->rotation == 90) || (ee->rotation == 270))
+     {
+       IFC(ee, fn_resize) (ee, h, w);
+       IFE;
+     }
+   else
+     {
+       IFC(ee, fn_resize) (ee, w, h);
+       IFE;
+     }
 }
 
 void
@@ -257,8 +271,16 @@
      }
    if (w < 1) w = 1;
    if (h < 1) h = 1;
-   IFC(ee, fn_move_resize) (ee, x, y, w, h);
-   IFE;
+   if ((ee->rotation == 90) || (ee->rotation == 270))
+     {
+       IFC(ee, fn_move_resize) (ee, x, y, h, w);
+       IFE;
+     }
+   else
+     {
+       IFC(ee, fn_move_resize) (ee, x, y, w, h);
+       IFE;
+     }
 }
 
 void
@@ -270,10 +292,20 @@
                         "ecore_evas_geometry_get");
        return;
      }
-   if (x) *x = ee->x;
-   if (y) *y = ee->y;
-   if (w) *w = ee->w;
-   if (h) *h = ee->h;
+   if ((ee->rotation == 90) || (ee->rotation == 270))
+     {
+       if (x) *x = ee->x;
+       if (y) *y = ee->y;
+       if (w) *w = ee->h;
+       if (h) *h = ee->w;
+     }
+   else
+     {
+       if (x) *x = ee->x;
+       if (y) *y = ee->y;
+       if (w) *w = ee->w;
+       if (h) *h = ee->h;
+     }
 }
 
 void
@@ -285,6 +317,9 @@
                         "ecore_evas_rotation_set");
        return;
      }
+   rot = rot % 360;
+   while (rot < 0) rot += 360;
+   while (rot >= 360) rot -= 360;
    IFC(ee, fn_rotation_set) (ee, rot);
    IFE;
 }
@@ -452,8 +487,16 @@
      }
    if (w < 0) w = 0;
    if (h < 0) h = 0;
-   IFC(ee, fn_size_min_set) (ee, w, h);
-   IFE;
+   if ((ee->rotation == 90) || (ee->rotation == 270))
+     {
+       IFC(ee, fn_size_min_set) (ee, h, w);
+       IFE;
+     }
+   else
+     {
+       IFC(ee, fn_size_min_set) (ee, w, h);
+       IFE;
+     }
 }
 
 void
@@ -465,8 +508,16 @@
                         "ecore_evas_size_min_get");
        return;
      }
-   if (w) *w = ee->prop.min.w;
-   if (h) *h = ee->prop.min.h;
+   if ((ee->rotation == 90) || (ee->rotation == 270))
+     {
+       if (w) *w = ee->prop.min.h;
+       if (h) *h = ee->prop.min.w;
+     }
+   else
+     {
+       if (w) *w = ee->prop.min.w;
+       if (h) *h = ee->prop.min.h;
+     }
 }
 
 void
@@ -480,8 +531,16 @@
      }
    if (w < 0) w = 0;
    if (h < 0) h = 0;
-   IFC(ee, fn_size_max_set) (ee, w, h);
-   IFE;
+   if ((ee->rotation == 90) || (ee->rotation == 270))
+     {
+       IFC(ee, fn_size_max_set) (ee, h, w);
+       IFE;
+     }
+   else
+     {
+       IFC(ee, fn_size_max_set) (ee, w, h);
+       IFE;
+     }
 }
 
 void
@@ -493,8 +552,16 @@
                         "ecore_evas_size_max_get");
        return;
      }
-   if (w) *w = ee->prop.max.w;
-   if (h) *h = ee->prop.max.h;
+   if ((ee->rotation == 90) || (ee->rotation == 270))
+     {
+       if (w) *w = ee->prop.max.h;
+       if (h) *h = ee->prop.max.w;
+     }
+   else
+     {
+       if (w) *w = ee->prop.max.w;
+       if (h) *h = ee->prop.max.h;
+     }
 }
 
 void
@@ -508,8 +575,16 @@
      }
    if (w < 0) w = 0;
    if (h < 0) h = 0;
-   IFC(ee, fn_size_base_set) (ee, w, h);
-   IFE;
+   if ((ee->rotation == 90) || (ee->rotation == 270))
+     {
+       IFC(ee, fn_size_base_set) (ee, h, w);
+       IFE;
+     }
+   else
+     {
+       IFC(ee, fn_size_base_set) (ee, w, h);
+       IFE;
+     }
 }
 
 void
@@ -521,8 +596,16 @@
                         "ecore_evas_size_base_get");
        return;
      }
-   if (w) *w = ee->prop.base.w;
-   if (h) *h = ee->prop.base.h;
+   if ((ee->rotation == 90) || (ee->rotation == 270))
+     {
+       if (w) *w = ee->prop.base.h;
+       if (h) *h = ee->prop.base.w;
+     }
+   else
+     {
+       if (w) *w = ee->prop.base.w;
+       if (h) *h = ee->prop.base.h;
+     }
 }
 
 void
@@ -536,8 +619,16 @@
      }
    if (w < 0) w = 0;
    if (h < 0) h = 0;
-   IFC(ee, fn_size_step_set) (ee, w, h);
-   IFE;
+   if ((ee->rotation == 90) || (ee->rotation == 270))
+     {
+       IFC(ee, fn_size_step_set) (ee, h, w);
+       IFE;
+     }
+   else
+     {
+       IFC(ee, fn_size_step_set) (ee, w, h);
+       IFE;
+     }
 }
 
 void
@@ -549,8 +640,16 @@
                         "ecore_evas_size_step_get");
        return;
      }
-   if (w) *w = ee->prop.step.w;
-   if (h) *h = ee->prop.step.h;
+   if ((ee->rotation == 90) || (ee->rotation == 270))
+     {
+       if (w) *w = ee->prop.step.h;
+       if (h) *h = ee->prop.step.w;
+     }
+   else
+     {
+       if (w) *w = ee->prop.step.w;
+       if (h) *h = ee->prop.step.h;
+     }
 }
 
 void
===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_evas/Attic/ecore_evas_fb.c,v
retrieving revision 1.1.2.4
retrieving revision 1.1.2.5
diff -u -3 -r1.1.2.4 -r1.1.2.5
--- ecore_evas_fb.c     12 Feb 2003 11:27:32 -0000      1.1.2.4
+++ ecore_evas_fb.c     12 Feb 2003 23:29:43 -0000      1.1.2.5
@@ -60,11 +60,20 @@
 {
    Ecore_Evas *ee;
    Ecore_Fb_Event_Mouse_Button_Down *e;
+   int fbw, fbh;
    
    e = event;
    ee = _ecore_evas_fb_match();
    if (!ee) return 1; /* pass on event */
-   evas_event_feed_mouse_move(ee->evas, e->x, e->y);
+   ecore_fb_size_get(&fbw, &fbh);
+   if (ee->rotation == 0)
+     evas_event_feed_mouse_move(ee->evas, e->x, e->y);
+   else if (ee->rotation == 90)
+     evas_event_feed_mouse_move(ee->evas, (fbh - ee->h) + ee->h - e->y - 1, e->x);
+   else if (ee->rotation == 180)
+     evas_event_feed_mouse_move(ee->evas, (fbw - ee->w) + ee->w - e->x - 1, (fbh - 
+ee->h) + ee->h - e->y - 1);
+   else if (ee->rotation == 270)
+     evas_event_feed_mouse_move(ee->evas, e->y, (fbw - ee->w) + ee->w - e->x - 1);
    evas_event_feed_mouse_down(ee->evas, e->button);
    return 0; /* dont pass it on */
 }
@@ -74,11 +83,20 @@
 {
    Ecore_Evas *ee;
    Ecore_Fb_Event_Mouse_Button_Up *e;
+   int fbw, fbh;
    
    e = event;
    ee = _ecore_evas_fb_match();
    if (!ee) return 1; /* pass on event */
-   evas_event_feed_mouse_move(ee->evas, e->x, e->y);
+   ecore_fb_size_get(&fbw, &fbh);
+   if (ee->rotation == 0)
+     evas_event_feed_mouse_move(ee->evas, e->x, e->y);
+   else if (ee->rotation == 90)
+     evas_event_feed_mouse_move(ee->evas, (fbh - ee->h) + ee->h - e->y - 1, e->x);
+   else if (ee->rotation == 180)
+     evas_event_feed_mouse_move(ee->evas, (fbw - ee->w) + ee->w - e->x - 1, (fbh - 
+ee->h) + ee->h - e->y - 1);
+   else if (ee->rotation == 270)
+     evas_event_feed_mouse_move(ee->evas, e->y, (fbw - ee->w) + ee->w - e->x - 1);
    evas_event_feed_mouse_up(ee->evas, e->button);
    return 0; /* dont pass it on */
 }
@@ -88,18 +106,40 @@
 {
    Ecore_Evas *ee;
    Ecore_Fb_Event_Mouse_Move *e;
+   int fbw, fbh;
    
    e = event;
    ee = _ecore_evas_fb_match();
    if (!ee) return 1; /* pass on event */
+   ecore_fb_size_get(&fbw, &fbh);
    if (ee->prop.cursor.object)
      {
        evas_object_show(ee->prop.cursor.object);
-       evas_object_move(ee->prop.cursor.object, 
-                        e->x - ee->prop.cursor.hot.x,
-                        e->y - ee->prop.cursor.hot.y);
+        if (ee->rotation == 0)
+         evas_object_move(ee->prop.cursor.object,
+                          e->x - ee->prop.cursor.hot.x,
+                          e->y - ee->prop.cursor.hot.y);
+       else if (ee->rotation == 90)
+         evas_object_move(ee->prop.cursor.object,
+                          (fbh - ee->h) + ee->h - e->y - 1 - ee->prop.cursor.hot.x,
+                          e->x - ee->prop.cursor.hot.y);
+       else if (ee->rotation == 180)
+         evas_object_move(ee->prop.cursor.object,
+                          (fbw - ee->w) + ee->w - e->x - 1 - ee->prop.cursor.hot.x,
+                          (fbh - ee->h) + ee->h - e->y - 1 - ee->prop.cursor.hot.y);
+       else if (ee->rotation == 270)
+         evas_object_move(ee->prop.cursor.object,
+                          e->y - ee->prop.cursor.hot.x,
+                          (fbw - ee->w) + ee->w - e->x - 1 - ee->prop.cursor.hot.y);
      }
-   evas_event_feed_mouse_move(ee->evas, e->x, e->y);
+   if (ee->rotation == 0)
+     evas_event_feed_mouse_move(ee->evas, e->x, e->y);
+   else if (ee->rotation == 90)
+     evas_event_feed_mouse_move(ee->evas, (fbh - ee->h) + ee->h - e->y - 1, e->x);
+   else if (ee->rotation == 180)
+     evas_event_feed_mouse_move(ee->evas, (fbw - ee->w) + ee->w - e->x - 1, (fbh - 
+ee->h) + ee->h - e->y - 1);
+   else if (ee->rotation == 270)
+     evas_event_feed_mouse_move(ee->evas, e->y, (fbw - ee->w) + ee->w - e->x - 1);
    return 0; /* dont pass it on */
 }
 
@@ -132,24 +172,6 @@
    return _ecore_evas_init_count;
 }
 
-static int
-_ecore_evas_fb_shutdown(void)
-{
-   _ecore_evas_init_count--;
-   if (_ecore_evas_init_count == 0)
-     {
-       int i;
-   
-       while (ecore_evases) ecore_evas_free(ecore_evases);
-       for (i = 0; i < 5; i++)
-         ecore_event_handler_del(ecore_evas_event_handlers[i]);
-       ecore_idle_enterer_del(ecore_evas_idle_enterer);
-       ecore_evas_idle_enterer = NULL;
-     }
-   if (_ecore_evas_init_count < 0) _ecore_evas_init_count = 0;
-   return _ecore_evas_init_count;
-}
-
 static void
 _ecore_evas_fb_free(Ecore_Evas *ee)
 {
@@ -183,6 +205,58 @@
 }
 
 static void
+_ecore_evas_rotation_set(Ecore_Evas *ee, int rotation)
+{
+   Evas_Engine_Info_FB *einfo;
+   int rot_dif;
+   
+   if (ee->rotation == rotation) return;
+   einfo = (Evas_Engine_Info_FB *)evas_engine_info_get(ee->evas);
+   if (!einfo) return;
+   rot_dif = ee->rotation - rotation;
+   if (rot_dif < 0) rot_dif = -rot_dif;
+   if (rot_dif != 180)
+     {
+       
+       einfo->info.rotation = rotation;
+       evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
+       if (!ee->prop.fullscreen)
+         {
+            int tmp;
+            
+            tmp = ee->w;
+            ee->w = ee->h;
+            ee->h = tmp;
+         }
+       else
+         {
+            if ((rotation == 0) || (rotation == 180))
+              {
+                 evas_output_size_set(ee->evas, ee->w, ee->h);
+                 evas_output_viewport_set(ee->evas, 0, 0, ee->w, ee->h);
+              }
+            else
+              {
+                 evas_output_size_set(ee->evas, ee->h, ee->w);
+                 evas_output_viewport_set(ee->evas, 0, 0, ee->h, ee->w);
+              }
+         }
+       ee->rotation = rotation;
+     }
+   else
+     {
+       einfo->info.rotation = rotation;
+       evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
+       ee->rotation = rotation;
+     }
+   if ((ee->rotation == 90) || (ee->rotation == 270))
+     evas_damage_rectangle_add(ee->evas, 0, 0, ee->h, ee->w);
+   else
+     evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
+   if (ee->func.fn_resize) ee->func.fn_resize(ee);
+}
+
+static void
 _ecore_evas_cursor_set(Ecore_Evas *ee, const char *file, int layer, int hot_x, int 
hot_y)
 {
    int x, y;
@@ -263,6 +337,24 @@
      }
 }
     
+int
+_ecore_evas_fb_shutdown(void)
+{
+   _ecore_evas_init_count--;
+   if (_ecore_evas_init_count == 0)
+     {
+       int i;
+   
+       while (ecore_evases) ecore_evas_free(ecore_evases);
+       for (i = 0; i < 5; i++)
+         ecore_event_handler_del(ecore_evas_event_handlers[i]);
+       ecore_idle_enterer_del(ecore_evas_idle_enterer);
+       ecore_evas_idle_enterer = NULL;
+     }
+   if (_ecore_evas_init_count < 0) _ecore_evas_init_count = 0;
+   return _ecore_evas_init_count;
+}
+
 static const Ecore_Evas_Engine_Func _ecore_fb_engine_func =
 {
    _ecore_evas_fb_free,
@@ -279,7 +371,7 @@
      NULL,
      _ecore_evas_resize,
      _ecore_evas_move_resize,
-     NULL,
+     _ecore_evas_rotation_set,
      NULL,
      NULL,
      NULL,
===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_evas/Attic/ecore_evas_private.h,v
retrieving revision 1.1.2.11
retrieving revision 1.1.2.12
diff -u -3 -r1.1.2.11 -r1.1.2.12
--- ecore_evas_private.h        12 Feb 2003 11:27:32 -0000      1.1.2.11
+++ ecore_evas_private.h        12 Feb 2003 23:29:43 -0000      1.1.2.12
@@ -134,4 +134,11 @@
    Ecore_Evas_Engine engine;
 };
 
+#ifdef BUILD_ECORE_X
+int _ecore_evas_x_shutdown(void);
+#endif
+#ifdef BUILD_ECORE_FB
+int _ecore_evas_fb_shutdown(void);
+#endif
+
 #endif
===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_evas/Attic/ecore_evas_x.c,v
retrieving revision 1.1.2.4
retrieving revision 1.1.2.5
diff -u -3 -r1.1.2.4 -r1.1.2.5
--- ecore_evas_x.c      12 Feb 2003 11:27:32 -0000      1.1.2.4
+++ ecore_evas_x.c      12 Feb 2003 23:29:43 -0000      1.1.2.5
@@ -110,8 +110,15 @@
    e = event;
    ee = _ecore_evas_x_match(e->win);
    if (!ee) return 1; /* pass on event */
-   _ecore_evas_modifer_locks_update(ee, e->modifiers);   
-   evas_event_feed_mouse_move(ee->evas, e->x, e->y);
+   _ecore_evas_modifer_locks_update(ee, e->modifiers);
+   if (ee->rotation == 0)
+     evas_event_feed_mouse_move(ee->evas, e->x, e->y);
+   else if (ee->rotation == 90)
+     evas_event_feed_mouse_move(ee->evas, ee->h - e->y - 1, e->x);
+   else if (ee->rotation == 180)
+     evas_event_feed_mouse_move(ee->evas, ee->w - e->x - 1, ee->h - e->y - 1);
+   else if (ee->rotation == 270)
+     evas_event_feed_mouse_move(ee->evas, e->y, ee->w - e->x - 1);
    evas_event_feed_mouse_down(ee->evas, e->button);
    return 0; /* dont pass it on */
 }
@@ -126,8 +133,15 @@
    ee = _ecore_evas_x_match(e->win);
    if (!ee) return 1; /* pass on event */
    _ecore_evas_modifer_locks_update(ee, e->modifiers);   
-   evas_event_feed_mouse_move(ee->evas, e->x, e->y);
-   evas_event_feed_mouse_up(ee->evas, e->button);
+   if (ee->rotation == 0)
+     evas_event_feed_mouse_move(ee->evas, e->x, e->y);
+   else if (ee->rotation == 90)
+     evas_event_feed_mouse_move(ee->evas, ee->h - e->y - 1, e->x);
+   else if (ee->rotation == 180)
+     evas_event_feed_mouse_move(ee->evas, ee->w - e->x - 1, ee->h - e->y - 1);
+   else if (ee->rotation == 270)
+     evas_event_feed_mouse_move(ee->evas, e->y, ee->w - e->x - 1); 
+  evas_event_feed_mouse_up(ee->evas, e->button);
    return 0; /* dont pass it on */
 }
 
@@ -143,12 +157,32 @@
    if (ee->prop.cursor.object)
      {
        evas_object_show(ee->prop.cursor.object);
-       evas_object_move(ee->prop.cursor.object, 
-                        e->x - ee->prop.cursor.hot.x,
-                        e->y - ee->prop.cursor.hot.y);
+       if (ee->rotation == 0)
+         evas_object_move(ee->prop.cursor.object, 
+                          e->x - ee->prop.cursor.hot.x,
+                          e->y - ee->prop.cursor.hot.y);
+       else if (ee->rotation == 90)
+         evas_object_move(ee->prop.cursor.object, 
+                          ee->h - e->y - 1 - ee->prop.cursor.hot.x,
+                          e->x - ee->prop.cursor.hot.y);
+       else if (ee->rotation == 180)
+         evas_object_move(ee->prop.cursor.object, 
+                          ee->w - e->x - 1 - ee->prop.cursor.hot.x,
+                          ee->h - e->y - 1 - ee->prop.cursor.hot.y);
+       else if (ee->rotation == 270)
+         evas_object_move(ee->prop.cursor.object, 
+                          e->y - ee->prop.cursor.hot.x,
+                          ee->w - e->x - 1 - ee->prop.cursor.hot.y);
      }
    _ecore_evas_modifer_locks_update(ee, e->modifiers);   
-   evas_event_feed_mouse_move(ee->evas, e->x, e->y);
+   if (ee->rotation == 0)
+     evas_event_feed_mouse_move(ee->evas, e->x, e->y);
+   else if (ee->rotation == 90)
+     evas_event_feed_mouse_move(ee->evas, ee->h - e->y - 1, e->x);
+   else if (ee->rotation == 180)
+     evas_event_feed_mouse_move(ee->evas, ee->w - e->x - 1, ee->h - e->y - 1);
+   else if (ee->rotation == 270)
+     evas_event_feed_mouse_move(ee->evas, e->y, ee->w - e->x - 1);
    return 0; /* dont pass it on */
 }
 
@@ -164,14 +198,34 @@
    if (ee->prop.cursor.object)
      {
        evas_object_show(ee->prop.cursor.object);
-       evas_object_move(ee->prop.cursor.object, 
-                        e->x - ee->prop.cursor.hot.x,
-                        e->y - ee->prop.cursor.hot.y);
+       if (ee->rotation == 0)
+         evas_object_move(ee->prop.cursor.object, 
+                          e->x - ee->prop.cursor.hot.x,
+                          e->y - ee->prop.cursor.hot.y);
+       else if (ee->rotation == 90)
+         evas_object_move(ee->prop.cursor.object, 
+                          ee->h - e->y - 1 - ee->prop.cursor.hot.x,
+                          e->x - ee->prop.cursor.hot.y);
+       else if (ee->rotation == 180)
+         evas_object_move(ee->prop.cursor.object, 
+                          ee->w - e->x - 1 - ee->prop.cursor.hot.x,
+                          ee->h - e->y - 1 - ee->prop.cursor.hot.y);
+       else if (ee->rotation == 270)
+         evas_object_move(ee->prop.cursor.object, 
+                          e->y - ee->prop.cursor.hot.x,
+                          ee->w - e->x - 1 - ee->prop.cursor.hot.y);
      }
    if (ee->func.fn_mouse_in) ee->func.fn_mouse_in(ee);
    _ecore_evas_modifer_locks_update(ee, e->modifiers);
    evas_event_feed_mouse_in(ee->evas);
-   evas_event_feed_mouse_move(ee->evas, e->x, e->y);   
+   if (ee->rotation == 0)
+     evas_event_feed_mouse_move(ee->evas, e->x, e->y);
+   else if (ee->rotation == 90)
+     evas_event_feed_mouse_move(ee->evas, ee->h - e->y - 1, e->x);
+   else if (ee->rotation == 180)
+     evas_event_feed_mouse_move(ee->evas, ee->w - e->x - 1, ee->h - e->y - 1);
+   else if (ee->rotation == 270)
+     evas_event_feed_mouse_move(ee->evas, e->y, ee->w - e->x - 1);
    return 0; /* dont pass it on */
 }
 
@@ -185,7 +239,14 @@
    ee = _ecore_evas_x_match(e->win);
    if (!ee) return 1; /* pass on event */
    _ecore_evas_modifer_locks_update(ee, e->modifiers);   
-   evas_event_feed_mouse_move(ee->evas, e->x, e->y);   
+   if (ee->rotation == 0)
+     evas_event_feed_mouse_move(ee->evas, e->x, e->y);
+   else if (ee->rotation == 90)
+     evas_event_feed_mouse_move(ee->evas, ee->h - e->y - 1, e->x);
+   else if (ee->rotation == 180)
+     evas_event_feed_mouse_move(ee->evas, ee->w - e->x - 1, ee->h - e->y - 1);
+   else if (ee->rotation == 270)
+     evas_event_feed_mouse_move(ee->evas, e->y, ee->w - e->x - 1);
    evas_event_feed_mouse_out(ee->evas);
    if (ee->func.fn_mouse_out) ee->func.fn_mouse_out(ee);
    if (ee->prop.cursor.object) evas_object_hide(ee->prop.cursor.object);
@@ -245,7 +306,28 @@
        ee->engine.x.damages = tmpr;
      }
    else
-     evas_damage_rectangle_add(ee->evas, e->x, e->y, e->w, e->h);
+     {
+       if (ee->rotation == 0)
+         evas_damage_rectangle_add(ee->evas, 
+                                   e->x, 
+                                   e->y, 
+                                   e->w, e->h);
+       else if (ee->rotation == 90)
+         evas_damage_rectangle_add(ee->evas, 
+                                   ee->h - e->y - e->h, 
+                                   e->x, 
+                                   e->h, e->w);
+       else if (ee->rotation == 180)
+         evas_damage_rectangle_add(ee->evas, 
+                                   ee->w - e->x - e->w, 
+                                   ee->h - e->y - e->h, 
+                                   e->w, e->h);
+       else if (ee->rotation == 270)
+         evas_damage_rectangle_add(ee->evas, 
+                                   e->y, 
+                                   ee->w - e->x - e->w, 
+                                   e->h, e->w);
+     }
    return 0; /* dont pass it on */
 }
 
@@ -288,8 +370,16 @@
        ee->h = e->h;
        if (e->win == ee->engine.x.win_container)
          ecore_x_window_resize(ee->engine.x.win, ee->w, ee->h);
-       evas_output_size_set(ee->evas, ee->w, ee->h);
-       evas_output_viewport_set(ee->evas, 0, 0, ee->w, ee->h);
+       if ((ee->rotation == 90) || (ee->rotation == 270))
+         {
+            evas_output_size_set(ee->evas, ee->h, ee->w);
+            evas_output_viewport_set(ee->evas, 0, 0, ee->h, ee->w);
+         }
+       else
+         {
+            evas_output_size_set(ee->evas, ee->w, ee->h);
+            evas_output_viewport_set(ee->evas, 0, 0, ee->w, ee->h);
+         }
        if (ee->prop.avoid_damage)
          {
             ecore_evas_avoid_damage_set(ee, 0);
@@ -372,10 +462,34 @@
                  
                  r = l->data;
                  tmpr = XCreateRegion();
-                 xr.x = r->x;
-                 xr.y = r->y;
-                 xr.width = r->w;
-                 xr.height = r->h;
+                 if (ee->rotation == 0)
+                   {
+                      xr.x = r->x;
+                      xr.y = r->y;
+                      xr.width = r->w;
+                      xr.height = r->h;
+                   }
+                 else if (ee->rotation == 90)
+                   {
+                      xr.x = r->y;
+                      xr.y = ee->h - r->x - r->w;
+                      xr.width = r->h;
+                      xr.height = r->w;
+                   }
+                 else if (ee->rotation == 180)
+                   {
+                      xr.x = ee->w - r->x - r->w;
+                      xr.y = ee->h - r->y - r->h;
+                      xr.width = r->w;
+                      xr.height = r->h;
+                   }
+                 else if (ee->rotation == 270)
+                   {
+                      xr.x = ee->w - r->y - r->h;
+                      xr.y = r->x;
+                      xr.width = r->h;
+                      xr.height = r->w;
+                   }
                  XUnionRectWithRegion(&xr, ee->engine.x.damages, tmpr);
                  XDestroyRegion(ee->engine.x.damages);
                  ee->engine.x.damages = tmpr;
@@ -442,24 +556,6 @@
    return _ecore_evas_init_count;
 }
 
-static int
-_ecore_evas_x_shutdown(void)
-{
-   _ecore_evas_init_count--;
-   if (_ecore_evas_init_count == 0)
-     {
-       int i;
-   
-       while (ecore_evases) ecore_evas_free(ecore_evases);
-       for (i = 0; i < 15; i++)
-         ecore_event_handler_del(ecore_evas_event_handlers[i]);
-       ecore_idle_enterer_del(ecore_evas_idle_enterer);
-       ecore_evas_idle_enterer = NULL;
-     }
-   if (_ecore_evas_init_count < 0) _ecore_evas_init_count = 0;
-   return _ecore_evas_init_count;
-}
-
 static void
 _ecore_evas_x_free(Ecore_Evas *ee)
 {
@@ -505,6 +601,65 @@
 }
 
 static void
+_ecore_evas_rotation_set(Ecore_Evas *ee, int rotation)
+{
+   Evas_Engine_Info_Software_X11 *einfo;
+   int rot_dif;
+   
+   if (ee->rotation == rotation) return;   
+   einfo = (Evas_Engine_Info_Software_X11 *)evas_engine_info_get(ee->evas);
+   if (!einfo) return;
+   rot_dif = ee->rotation - rotation;
+   if (rot_dif < 0) rot_dif = -rot_dif;
+   if (rot_dif != 180)
+     {
+       int minw, minh, maxw, maxh, basew, baseh, stepw, steph;
+       
+       einfo->info.rotation = rotation;
+       evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
+       if (!ee->prop.fullscreen)
+         ecore_x_window_resize(ee->engine.x.win_container, ee->h, ee->w);
+       else
+         {
+            int w, h;
+            
+            ecore_x_window_size_get(ee->engine.x.win_container, &w, &h);
+            ecore_x_window_resize(ee->engine.x.win_container, h, w);
+            if ((rotation == 0) || (rotation == 180))
+              {
+                 evas_output_size_set(ee->evas, ee->w, ee->h);
+                 evas_output_viewport_set(ee->evas, 0, 0, ee->w, ee->h);
+              }
+            else
+              {
+                 evas_output_size_set(ee->evas, ee->h, ee->w);
+                 evas_output_viewport_set(ee->evas, 0, 0, ee->h, ee->w);
+              }
+         }
+       ecore_evas_size_min_get(ee, &minw, &minh);
+       ecore_evas_size_max_get(ee, &maxw, &maxh);
+       ecore_evas_size_base_get(ee, &basew, &baseh);
+       ecore_evas_size_step_get(ee, &stepw, &steph);
+       ee->rotation = rotation;
+       ecore_evas_size_min_set(ee, minh, minw);
+       ecore_evas_size_max_set(ee, maxh, maxw);
+       ecore_evas_size_base_set(ee, baseh, basew);
+       ecore_evas_size_step_set(ee, steph, stepw);
+     }
+   else
+     {
+       einfo->info.rotation = rotation;
+       evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
+       ee->rotation = rotation;
+     }
+   if ((ee->rotation == 90) || (ee->rotation == 270))
+     evas_damage_rectangle_add(ee->evas, 0, 0, ee->h, ee->w);
+   else
+     evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
+   if (ee->func.fn_resize) ee->func.fn_resize(ee);     
+}
+
+static void
 _ecore_evas_shaped_set(Ecore_Evas *ee, int shaped)
 {
    Evas_Engine_Info_Software_X11 *einfo;
@@ -766,7 +921,10 @@
             ee->engine.x.gc = ecore_x_gc_new(ee->engine.x.pmap);
             einfo->info.drawable = ee->engine.x.pmap;
             evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
-            evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
+            if ((ee->rotation == 90) || (ee->rotation == 270))
+              evas_damage_rectangle_add(ee->evas, 0, 0, ee->h, ee->w);
+            else
+              evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
          }
        else
          {
@@ -780,6 +938,24 @@
      }
 }
 
+int
+_ecore_evas_x_shutdown(void)
+{
+   _ecore_evas_init_count--;
+   if (_ecore_evas_init_count == 0)
+     {
+       int i;
+   
+       while (ecore_evases) ecore_evas_free(ecore_evases);
+       for (i = 0; i < 15; i++)
+         ecore_event_handler_del(ecore_evas_event_handlers[i]);
+       ecore_idle_enterer_del(ecore_evas_idle_enterer);
+       ecore_evas_idle_enterer = NULL;
+     }
+   if (_ecore_evas_init_count < 0) _ecore_evas_init_count = 0;
+   return _ecore_evas_init_count;
+}
+
 static const Ecore_Evas_Engine_Func _ecore_x_engine_func =
 {
    _ecore_evas_x_free,
@@ -796,7 +972,7 @@
      _ecore_evas_move,
      _ecore_evas_resize,
      _ecore_evas_move_resize,
-     NULL,
+     _ecore_evas_rotation_set,
      _ecore_evas_shaped_set,
      _ecore_evas_show,
      _ecore_evas_hide,
@@ -818,7 +994,6 @@
      _ecore_evas_fullscreen_set,
      _ecore_evas_avoid_damage_set     
 };
-
 #endif
 
 Ecore_Evas *




-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to