forked from enlightenment/efl
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.
This commit is contained in:
parent
f2b1039e05
commit
0745e46d12
|
@ -253,6 +253,94 @@ _ecore_evas_wl_common_cb_window_configure(void *data EINA_UNUSED, int type EINA_
|
||||||
return ECORE_CALLBACK_PASS_ON;
|
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
|
int
|
||||||
_ecore_evas_wl_common_init(void)
|
_ecore_evas_wl_common_init(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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_hide(Ecore_Evas *ee);
|
||||||
static void _ecore_evas_wl_alpha_set(Ecore_Evas *ee, int alpha);
|
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_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 =
|
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
|
NULL, // managed_move
|
||||||
_ecore_evas_wl_resize,
|
_ecore_evas_wl_resize,
|
||||||
NULL, // move_resize
|
NULL, // move_resize
|
||||||
NULL, // rotation_set
|
_ecore_evas_wl_rotation_set,
|
||||||
NULL, // shaped_set
|
NULL, // shaped_set
|
||||||
_ecore_evas_wl_show,
|
_ecore_evas_wl_show,
|
||||||
_ecore_evas_wl_hide,
|
_ecore_evas_wl_hide,
|
||||||
|
@ -263,8 +264,16 @@ _ecore_evas_wl_resize(Ecore_Evas *ee, int w, int h)
|
||||||
orig_h = h;
|
orig_h = h;
|
||||||
|
|
||||||
evas_output_framespace_get(ee->evas, NULL, NULL, &fw, &fh);
|
evas_output_framespace_get(ee->evas, NULL, NULL, &fw, &fh);
|
||||||
w += fw;
|
if ((ee->rotation == 90) || (ee->rotation == 270))
|
||||||
h += fh;
|
{
|
||||||
|
w += fh;
|
||||||
|
h += fw;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
w += fw;
|
||||||
|
h += fh;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((ee->w != w) || (ee->h != h))
|
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
|
static void
|
||||||
_ecore_evas_wl_show(Ecore_Evas *ee)
|
_ecore_evas_wl_show(Ecore_Evas *ee)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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_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_state_change(void *data);
|
||||||
void _ecore_evas_wl_common_render_updates(void *data, Evas *evas, void *event);
|
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);
|
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);
|
void _ecore_evas_wl_common_frame_border_size_set(Evas_Object *obj, int fx, int fy, int fw, int fh);
|
||||||
|
|
|
@ -354,9 +354,6 @@ static void
|
||||||
_ecore_evas_wl_rotation_set(Ecore_Evas *ee, int rotation, int resize)
|
_ecore_evas_wl_rotation_set(Ecore_Evas *ee, int rotation, int resize)
|
||||||
{
|
{
|
||||||
Evas_Engine_Info_Wayland_Shm *einfo;
|
Evas_Engine_Info_Wayland_Shm *einfo;
|
||||||
Ecore_Evas_Engine_Wl_Data *wdata;
|
|
||||||
int rot_dif;
|
|
||||||
|
|
||||||
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
||||||
|
|
||||||
if (ee->rotation == rotation) return;
|
if (ee->rotation == rotation) return;
|
||||||
|
@ -365,97 +362,12 @@ _ecore_evas_wl_rotation_set(Ecore_Evas *ee, int rotation, int resize)
|
||||||
if (!einfo)
|
if (!einfo)
|
||||||
return;
|
return;
|
||||||
einfo->info.rotation = rotation;
|
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;
|
_ecore_evas_wl_common_rotation_set(ee, rotation, resize);
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -894,7 +894,10 @@ eng_output_resize(void *data, int w, int h)
|
||||||
else
|
else
|
||||||
dy = 0;
|
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);
|
evas_gl_common_context_resize(re->win->gl_context, w, h, re->win->rot);
|
||||||
|
|
Loading…
Reference in New Issue