return ECORE_CALLBACK_PASS_ON;
}
+static Eina_Bool
+_ecore_evas_wl_common_cb_output_transform(void *data, int type EINA_UNUSED, void *event)
+{
+ Ecore_Evas *ee = data;
+ Ecore_Wl_Event_Output_Transform *ev = event;
+ Ecore_Evas_Engine_Wl_Data *wdata;
+ Ecore_Wl_Output *output;
+
+ if (!ee) return ECORE_CALLBACK_PASS_ON;
+ if (!(wdata = ee->engine.data)) return ECORE_CALLBACK_PASS_ON;
+
+ output = ecore_wl_window_output_find(wdata->win);
+ if (output != ev->output) return ECORE_CALLBACK_PASS_ON;
+
+ /* do something */
+
+ return ECORE_CALLBACK_PASS_ON;
+}
+
static void
_rotation_do(Ecore_Evas *ee, int rotation, int resize)
{
if (!ee) return;
wdata = ee->engine.data;
+ if (wdata->output_transform_hdl)
+ ecore_event_handler_del(wdata->output_transform_hdl);
if (wdata->anim_callback)
wl_callback_destroy(wdata->anim_callback);
if (wdata->win) ecore_wl_window_free(wdata->win);
}
}
+void
+_ecore_evas_wl_common_output_transform_register(Ecore_Evas *ee)
+{
+ Ecore_Evas_Engine_Wl_Data *wdata;
+
+ if (!ee) return;
+ if (!(wdata = ee->engine.data)) return;
+ if (wdata->output_transform_hdl) return;
+
+ wdata->output_transform_hdl =
+ ecore_event_handler_add(ECORE_WL_EVENT_OUTPUT_TRANSFORM,
+ _ecore_evas_wl_common_cb_output_transform, ee);
+}
+
static void
_ecore_evas_wayland_alpha_do(Ecore_Evas *ee, int alpha)
{
ECORE_WL_WINDOW_BUFFER_TYPE_EGL_WINDOW);
ee->prop.window = ecore_wl_window_id_get(wdata->win);
+ _ecore_evas_wl_common_output_transform_register(ee);
+
if (wdata->win)
ecore_wl_window_rotation_changed_callback_set
(wdata->win, ee, _ecore_evas_wl_common_wm_rot_cb_angle_changed);
unsigned char below : 1;
} state;
struct wl_callback *anim_callback;
+
+ Ecore_Event_Handler *output_transform_hdl;
+ short output_rotation;
};
Ecore_Evas_Interface_Wayland *_ecore_evas_wl_interface_new(void);
int _ecore_evas_wl_common_render(Ecore_Evas *ee);
void _ecore_evas_wl_common_screen_geometry_get(const Ecore_Evas *ee, int *x, int *y, int *w, int *h);
void _ecore_evas_wl_common_screen_dpi_get(const Ecore_Evas *ee, int *xdpi, int *ydpi);
+void _ecore_evas_wl_common_output_transform_register(Ecore_Evas *ee);
void _ecore_evas_wl_common_render_flush_pre(void *data, Evas *evas EINA_UNUSED, void *event);
void _ecore_evas_wl_common_render_flush_post(void *data, Evas *evas EINA_UNUSED, void *event);
void _ecore_evas_wl_common_render_updates(void *data, Evas *evas, void *event);
ECORE_WL_WINDOW_BUFFER_TYPE_SHM);
ee->prop.window = ecore_wl_window_id_get(wdata->win);
+ _ecore_evas_wl_common_output_transform_register(ee);
+
if (wdata->win)
ecore_wl_window_rotation_changed_callback_set
(wdata->win, ee, _ecore_evas_wl_common_wm_rot_cb_angle_changed);