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