summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafael Antognolli <rafael.antognolli@intel.com>2013-04-24 15:21:44 -0300
committerRafael Antognolli <rafael.antognolli@intel.com>2013-04-24 15:24:37 -0300
commit0745e46d122ad58a57507f6aef3242e75fe9cfaa (patch)
tree278eaf7c7baaf7e7bf3dd6ef168399d78fdd0c9e
parentf2b1039e05378087f69b0e112dea3396abf94829 (diff)
downloadefl-0745e46d122ad58a57507f6aef3242e75fe9cfaa.tar.gz
ecore_evas/wayland: Add support for rotation on wayland_egl backend.
Also move the common code for rotation_set from the shm engine to wayland_common.
-rw-r--r--src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c88
-rw-r--r--src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c35
-rw-r--r--src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_private.h1
-rw-r--r--src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c98
-rw-r--r--src/modules/evas/engines/wayland_egl/evas_engine.c5
5 files changed, 130 insertions, 97 deletions
diff --git a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c
index 146d607263..805c3cf8c4 100644
--- a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c
+++ b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c
@@ -253,6 +253,94 @@ _ecore_evas_wl_common_cb_window_configure(void *data EINA_UNUSED, int type EINA_
return ECORE_CALLBACK_PASS_ON;
}
+void
+_ecore_evas_wl_common_rotation_set(Ecore_Evas *ee, int rotation, int resize)
+{
+ Ecore_Evas_Engine_Wl_Data *wdata;
+ int rot_dif;
+
+ wdata = ee->engine.data;
+
+ 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;
+ int ww, hh;
+
+ if (!resize)
+ {
+ if (!ee->prop.fullscreen)
+ {
+ int fw, fh;
+ evas_output_framespace_get(ee->evas, NULL, NULL, &fw, &fh);
+ ecore_wl_window_resize(wdata->win, ee->h + fh, ee->w + fw, 0);
+ ecore_wl_window_update_size(wdata->win, ee->h + fh, ee->w + fw);
+ evas_output_size_set(ee->evas, ee->req.w + fw, ee->req.h + fh);
+ evas_output_viewport_set(ee->evas, 0, 0, ee->req.w + fw, ee->req.h + fh);
+ }
+ else
+ {
+ evas_output_size_set(ee->evas, ee->req.w, ee->req.h);
+ evas_output_viewport_set(ee->evas, 0, 0, ee->req.w, ee->req.h);
+ if (ee->func.fn_resize) ee->func.fn_resize(ee);
+ }
+ if ((ee->rotation == 90) || (ee->rotation == 270))
+ evas_damage_rectangle_add(ee->evas, 0, 0, ee->req.h, ee->req.w);
+ else
+ evas_damage_rectangle_add(ee->evas, 0, 0, ee->req.w, ee->req.h);
+ ww = ee->h;
+ hh = ee->w;
+ ee->w = ww;
+ ee->h = hh;
+ ee->req.w = ww;
+ ee->req.h = hh;
+ }
+ 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);
+ }
+ if (ee->func.fn_resize) ee->func.fn_resize(ee);
+ 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);
+ }
+ 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);
+ _ecore_evas_mouse_move_process(ee, ee->mouse.x, ee->mouse.y,
+ ecore_loop_time_get());
+ }
+ else
+ {
+ ee->rotation = rotation;
+ _ecore_evas_mouse_move_process(ee, ee->mouse.x, ee->mouse.y,
+ ecore_loop_time_get());
+ if (ee->func.fn_resize) ee->func.fn_resize(ee);
+
+ 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);
+ }
+}
+
int
_ecore_evas_wl_common_init(void)
{
diff --git a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c
index cbad243525..fb8d19a223 100644
--- a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c
+++ b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c
@@ -15,6 +15,7 @@ static void _ecore_evas_wl_show(Ecore_Evas *ee);
static void _ecore_evas_wl_hide(Ecore_Evas *ee);
static void _ecore_evas_wl_alpha_set(Ecore_Evas *ee, int alpha);
static void _ecore_evas_wl_transparent_set(Ecore_Evas *ee, int transparent);
+static void _ecore_evas_wl_rotation_set(Ecore_Evas *ee, int rotation, int resize);
static Ecore_Evas_Engine_Func _ecore_wl_engine_func =
{
@@ -37,7 +38,7 @@ static Ecore_Evas_Engine_Func _ecore_wl_engine_func =
NULL, // managed_move
_ecore_evas_wl_resize,
NULL, // move_resize
- NULL, // rotation_set
+ _ecore_evas_wl_rotation_set,
NULL, // shaped_set
_ecore_evas_wl_show,
_ecore_evas_wl_hide,
@@ -263,8 +264,16 @@ _ecore_evas_wl_resize(Ecore_Evas *ee, int w, int h)
orig_h = h;
evas_output_framespace_get(ee->evas, NULL, NULL, &fw, &fh);
- w += fw;
- h += fh;
+ if ((ee->rotation == 90) || (ee->rotation == 270))
+ {
+ w += fh;
+ h += fw;
+ }
+ else
+ {
+ w += fw;
+ h += fh;
+ }
}
if ((ee->w != w) || (ee->h != h))
@@ -313,6 +322,26 @@ _ecore_evas_wl_resize(Ecore_Evas *ee, int w, int h)
}
}
+static void
+_ecore_evas_wl_rotation_set(Ecore_Evas *ee, int rotation, int resize)
+{
+ Evas_Engine_Info_Wayland_Egl *einfo;
+ LOGFN(__FILE__, __LINE__, __FUNCTION__);
+
+ if (ee->rotation == rotation) return;
+
+ einfo = (Evas_Engine_Info_Wayland_Egl *)evas_engine_info_get(ee->evas);
+ if (!einfo)
+ return;
+ einfo->info.rotation = rotation;
+ if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
+ {
+ ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
+ }
+
+ _ecore_evas_wl_common_rotation_set(ee, rotation, resize);
+}
+
static void
_ecore_evas_wl_show(Ecore_Evas *ee)
{
diff --git a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_private.h b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_private.h
index 7ecb098fb5..df6957f338 100644
--- a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_private.h
+++ b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_private.h
@@ -68,6 +68,7 @@ void _ecore_evas_wl_common_screen_geometry_get(const Ecore_Evas *ee, int *x, int
void _ecore_evas_wl_common_screen_dpi_get(const Ecore_Evas *ee, int *xdpi, int *ydpi);
void _ecore_evas_wl_common_state_change(void *data);
void _ecore_evas_wl_common_render_updates(void *data, Evas *evas, void *event);
+void _ecore_evas_wl_common_rotation_set(Ecore_Evas *ee, int rotation, int resize);
Evas_Object * _ecore_evas_wl_common_frame_add(Evas *evas);
void _ecore_evas_wl_common_frame_border_size_set(Evas_Object *obj, int fx, int fy, int fw, int fh);
diff --git a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c
index 01b50fa649..3070697acc 100644
--- a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c
+++ b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c
@@ -354,9 +354,6 @@ static void
_ecore_evas_wl_rotation_set(Ecore_Evas *ee, int rotation, int resize)
{
Evas_Engine_Info_Wayland_Shm *einfo;
- Ecore_Evas_Engine_Wl_Data *wdata;
- int rot_dif;
-
LOGFN(__FILE__, __LINE__, __FUNCTION__);
if (ee->rotation == rotation) return;
@@ -365,97 +362,12 @@ _ecore_evas_wl_rotation_set(Ecore_Evas *ee, int rotation, int resize)
if (!einfo)
return;
einfo->info.rotation = rotation;
+ if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
+ {
+ ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
+ }
- wdata = ee->engine.data;
-
- 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;
- int ww, hh;
-
- if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
- {
- ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
- }
-
- if (!resize)
- {
- // wdata->configure_coming = 1;
- if (!ee->prop.fullscreen)
- {
- int fw, fh;
- evas_output_framespace_get(ee->evas, NULL, NULL, &fw, &fh);
- ecore_wl_window_resize(wdata->win, ee->h + fh, ee->w + fw, 0);
- ecore_wl_window_update_size(wdata->win, ee->h + fh, ee->w + fw);
- evas_output_size_set(ee->evas, ee->req.w + fw, ee->req.h + fh);
- evas_output_viewport_set(ee->evas, 0, 0, ee->req.w + fw, ee->req.h + fh);
- }
- else
- {
- evas_output_size_set(ee->evas, ee->req.w, ee->req.h);
- evas_output_viewport_set(ee->evas, 0, 0, ee->req.w, ee->req.h);
- if (ee->func.fn_resize) ee->func.fn_resize(ee);
- }
- if ((ee->rotation == 90) || (ee->rotation == 270))
- evas_damage_rectangle_add(ee->evas, 0, 0, ee->req.h, ee->req.w);
- else
- evas_damage_rectangle_add(ee->evas, 0, 0, ee->req.w, ee->req.h);
- ww = ee->h;
- hh = ee->w;
- ee->w = ww;
- ee->h = hh;
- ee->req.w = ww;
- ee->req.h = hh;
- }
- 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);
- }
- if (ee->func.fn_resize) ee->func.fn_resize(ee);
- 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);
- }
- 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);
- _ecore_evas_mouse_move_process(ee, ee->mouse.x, ee->mouse.y,
- ecore_loop_time_get());
- }
- else
- {
- if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
- {
- ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
- }
- ee->rotation = rotation;
- // _ecore_evas_mouse_move_process(ee, ee->mouse.x, ee->mouse.y,
- // ecore_x_current_time_get());
- if (ee->func.fn_resize) ee->func.fn_resize(ee);
-
- 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);
- }
+ _ecore_evas_wl_common_rotation_set(ee, rotation, resize);
}
static void
diff --git a/src/modules/evas/engines/wayland_egl/evas_engine.c b/src/modules/evas/engines/wayland_egl/evas_engine.c
index 776bdfb0bc..56cac55889 100644
--- a/src/modules/evas/engines/wayland_egl/evas_engine.c
+++ b/src/modules/evas/engines/wayland_egl/evas_engine.c
@@ -894,7 +894,10 @@ eng_output_resize(void *data, int w, int h)
else
dy = 0;
- wl_egl_window_resize(re->win->win, w, h, dx, dy);
+ if ((re->win->rot == 90) || (re->win->rot == 270))
+ wl_egl_window_resize(re->win->win, h, w, dy, dx);
+ else
+ wl_egl_window_resize(re->win->win, w, h, dx, dy);
}
evas_gl_common_context_resize(re->win->gl_context, w, h, re->win->rot);