66
77#include " flutter/shell/platform/tizen/tizen_log.h"
88
9- TizenRendererEcoreWl::TizenRendererEcoreWl (int32_t x, int32_t y, int32_t w,
10- int32_t h) {
9+ TizenRendererEcoreWl::TizenRendererEcoreWl (TizenRenderer::Delegate &delegate,
10+ int32_t x, int32_t y, int32_t w,
11+ int32_t h)
12+ : TizenRenderer(delegate) {
1113 InitializeRenderer (x, y, w, h);
1214}
15+
1316TizenRendererEcoreWl::~TizenRendererEcoreWl () { DestoryRenderer (); }
1417
1518bool TizenRendererEcoreWl::SetupDisplay () {
@@ -25,12 +28,14 @@ bool TizenRendererEcoreWl::SetupDisplay() {
2528 }
2629 return true ;
2730}
31+
2832bool TizenRendererEcoreWl::SetupEcoreWlWindow (int32_t x, int32_t y, int32_t w,
2933 int32_t h) {
3034 if (w == 0 || h == 0 ) {
3135 FT_LOGE (" Failed to create because of the wrong size" );
3236 return false ;
3337 }
38+
3439 ecore_wl_window_ = ecore_wl_window_new (
3540 nullptr , x, y, w, h, ECORE_WL_WINDOW_BUFFER_TYPE_EGL_WINDOW);
3641 FT_LOGD (" ecore_wl_window_: %p" , ecore_wl_window_);
@@ -43,8 +48,44 @@ bool TizenRendererEcoreWl::SetupEcoreWlWindow(int32_t x, int32_t y, int32_t w,
4348 ecore_wl_window_aux_hint_add (ecore_wl_window_, 0 ,
4449 " wm.policy.win.user.geometry" , " 1" );
4550 ecore_wl_window_show (ecore_wl_window_);
51+ int rotations[4 ] = {0 , 90 , 180 , 270 };
52+ ecore_wl_window_rotation_available_rotations_set (
53+ ecore_wl_window_, rotations, sizeof (rotations) / sizeof (int ));
54+ ecore_event_handler_add (ECORE_WL_EVENT_WINDOW_ROTATE, RotationEventCb, this );
4655 return true ;
4756}
57+
58+ Eina_Bool TizenRendererEcoreWl::RotationEventCb (void *data, int type,
59+ void *event) {
60+ auto *self = reinterpret_cast <TizenRendererEcoreWl *>(data);
61+ Ecore_Wl_Event_Window_Rotate *ev =
62+ reinterpret_cast <Ecore_Wl_Event_Window_Rotate *>(event);
63+ self->delegate_ .OnRotationChange (ev->angle );
64+ return ECORE_CALLBACK_PASS_ON;
65+ }
66+
67+ void TizenRendererEcoreWl::Show () { ecore_wl_window_show (ecore_wl_window_); }
68+ void TizenRendererEcoreWl::SetRotate (int degree) {
69+ ecore_wl_window_rotation_set (ecore_wl_window_, degree);
70+ received_rotation = true ;
71+ }
72+
73+ void TizenRendererEcoreWl::ResizeWithRotation (int32_t x, int32_t y,
74+ int32_t width, int32_t height,
75+ int32_t degree) {
76+ wl_egl_window_set_buffer_transform (wl_egl_window_, degree / 90 );
77+ wl_egl_window_set_window_transform (wl_egl_window_, degree / 90 );
78+
79+ if ((degree == 90 ) || (degree == 270 ))
80+ wl_egl_window_resize (wl_egl_window_, height, width, x, y);
81+ else
82+ wl_egl_window_resize (wl_egl_window_, width, height, x, y);
83+ }
84+
85+ void TizenRendererEcoreWl::SendRotationChangeDone () {
86+ ecore_wl_window_rotation_change_done_send (ecore_wl_window_);
87+ }
88+
4889bool TizenRendererEcoreWl::SetupEglWindow (int32_t w, int32_t h) {
4990 wl_egl_window_ =
5091 wl_egl_window_create (ecore_wl_window_surface_get (ecore_wl_window_), w, h);
@@ -54,9 +95,11 @@ bool TizenRendererEcoreWl::SetupEglWindow(int32_t w, int32_t h) {
5495 }
5596 return true ;
5697}
98+
5799EGLDisplay TizenRendererEcoreWl::GetEGLDisplay () {
58100 return eglGetDisplay ((EGLNativeDisplayType)wl_display_);
59101}
102+
60103EGLNativeWindowType TizenRendererEcoreWl::GetEGLNativeWindowType () {
61104 return (EGLNativeWindowType)wl_egl_window_;
62105}
@@ -67,12 +110,14 @@ void TizenRendererEcoreWl::DestoryEglWindow() {
67110 wl_egl_window_ = nullptr ;
68111 }
69112}
113+
70114void TizenRendererEcoreWl::DestoryEcoreWlWindow () {
71115 if (ecore_wl_window_) {
72116 ecore_wl_window_free (ecore_wl_window_);
73117 ecore_wl_window_ = nullptr ;
74118 }
75119}
120+
76121void TizenRendererEcoreWl::ShutdownDisplay () { ecore_wl_shutdown (); }
77122
78123TizenRenderer::TizenWindowGeometry TizenRendererEcoreWl::GetGeometry () {
@@ -82,19 +127,6 @@ TizenRenderer::TizenWindowGeometry TizenRendererEcoreWl::GetGeometry() {
82127 return result;
83128}
84129
85- void TizenRendererEcoreWl::ResizeWithRotation (int32_t dx, int32_t dy,
86- int32_t width, int32_t height,
87- int32_t degree) {
88- wl_egl_window_resize (wl_egl_window_, width, height, dx, dy);
89- wl_egl_window_rotation rotations[4 ] = {ROTATION_0, ROTATION_90, ROTATION_180,
90- ROTATION_270};
91- int index = 0 ;
92- if (degree > 0 ) {
93- index = (degree / 90 ) % 4 ;
94- }
95- wl_egl_window_set_rotation (wl_egl_window_, rotations[index]);
96- }
97-
98130int TizenRendererEcoreWl::GetEcoreWindowId () {
99131 return ecore_wl_window_id_get (ecore_wl_window_);
100132}
0 commit comments