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