From 29dbf797ecbcbd8802aae5b469bc5f9818b228af Mon Sep 17 00:00:00 2001 From: Boram Bae Date: Thu, 2 Dec 2021 14:55:29 +0900 Subject: [PATCH 1/6] Enable window channel on evas gl renderer Signed-off-by: Boram Bae --- .../platform/tizen/channels/window_channel.cc | 9 +++-- shell/platform/tizen/flutter_tizen_engine.cc | 4 --- shell/platform/tizen/tizen_renderer.h | 3 +- .../tizen/tizen_renderer_ecore_wl2.cc | 1 + .../platform/tizen/tizen_renderer_evas_gl.cc | 34 ++++++++++++++++++- 5 files changed, 40 insertions(+), 11 deletions(-) diff --git a/shell/platform/tizen/channels/window_channel.cc b/shell/platform/tizen/channels/window_channel.cc index 9bf430af56d3e..d5898f5d994aa 100644 --- a/shell/platform/tizen/channels/window_channel.cc +++ b/shell/platform/tizen/channels/window_channel.cc @@ -46,10 +46,10 @@ void WindowChannel::HandleMethodCall( map[EncodableValue("height")] = EncodableValue(geometry.h); result->Success(EncodableValue(map)); } else if (method_name == "setWindowGeometry") { -#ifdef TIZEN_RENDERER_EVAS_GL - FT_LOG(Error) << "setWindowGeometry is not supported on evas_gl."; - result->NotImplemented(); -#else + if (!renderer_->IsUserGeometrySupported()) { + result->Error("User geometry is not supported."); + return; + } auto arguments = std::get_if(method_call.arguments()); if (!arguments) { result->Error("Invalid arguments"); @@ -66,7 +66,6 @@ void WindowChannel::HandleMethodCall( width ? *width : geometry.w, height ? *height : geometry.h); result->Success(); -#endif } else if (method_name == "getScreenGeometry") { TizenRenderer::Geometry geometry = renderer_->GetScreenGeometry(); EncodableMap map; diff --git a/shell/platform/tizen/flutter_tizen_engine.cc b/shell/platform/tizen/flutter_tizen_engine.cc index edd9e823bdc39..c8e53ac441d02 100644 --- a/shell/platform/tizen/flutter_tizen_engine.cc +++ b/shell/platform/tizen/flutter_tizen_engine.cc @@ -419,16 +419,12 @@ void FlutterTizenEngine::OnGeometryChange(int32_t x, int32_t y, int32_t width, int32_t height) { -#ifdef TIZEN_RENDERER_EVAS_GL - FT_UNIMPLEMENTED(); -#else if (!renderer_->IsValid()) { return; } renderer_->SetGeometry(x, y, width, height); renderer_->ResizeWithRotation(x, y, width, height, 0); SendWindowMetrics(x, y, width, height, 0.0); -#endif } void FlutterTizenEngine::OnVsync(intptr_t baton, diff --git a/shell/platform/tizen/tizen_renderer.h b/shell/platform/tizen/tizen_renderer.h index 18e391daa9fe3..804179f1bdcdc 100644 --- a/shell/platform/tizen/tizen_renderer.h +++ b/shell/platform/tizen/tizen_renderer.h @@ -28,7 +28,7 @@ class TizenRenderer { virtual ~TizenRenderer(); bool IsValid() { return is_valid_; } - + bool IsUserGeometrySupported() { return is_user_geometry_supported_; } virtual bool OnMakeCurrent() = 0; virtual bool OnClearCurrent() = 0; virtual bool OnMakeResourceCurrent() = 0; @@ -73,6 +73,7 @@ class TizenRenderer { Delegate& delegate_; bool is_valid_ = false; + bool is_user_geometry_supported_ = false; bool received_rotation_ = false; }; diff --git a/shell/platform/tizen/tizen_renderer_ecore_wl2.cc b/shell/platform/tizen/tizen_renderer_ecore_wl2.cc index 69517e4cf4a4a..960ddf25b365b 100644 --- a/shell/platform/tizen/tizen_renderer_ecore_wl2.cc +++ b/shell/platform/tizen/tizen_renderer_ecore_wl2.cc @@ -318,6 +318,7 @@ bool TizenRendererEcoreWl2::SetupEcoreWlWindow(int32_t width, int32_t height) { ecore_wl2_window_position_set(ecore_wl2_window_, x, y); ecore_wl2_window_aux_hint_add(ecore_wl2_window_, 0, "wm.policy.win.user.geometry", "1"); + is_user_geometry_supported_ = true; if (transparent_) { ecore_wl2_window_alpha_set(ecore_wl2_window_, EINA_TRUE); diff --git a/shell/platform/tizen/tizen_renderer_evas_gl.cc b/shell/platform/tizen/tizen_renderer_evas_gl.cc index ae6386e08421a..77628b152c28e 100644 --- a/shell/platform/tizen/tizen_renderer_evas_gl.cc +++ b/shell/platform/tizen/tizen_renderer_evas_gl.cc @@ -10,6 +10,7 @@ EVAS_GL_GLOBAL_GLES3_DEFINE(); #include "flutter/shell/platform/tizen/logger.h" +#include #ifndef __X64_SHELL__ #include #endif @@ -664,6 +665,20 @@ Evas_Object* TizenRendererEvasGL::SetupEvasWindow(int32_t* width, EFL_UTIL_NOTIFICATION_LEVEL_TOP); } #endif + char* value = nullptr; + int ret = 0; + ret = system_info_get_platform_string( + "http://tizen.org/feature/platform.version", &value); + if (ret == SYSTEM_INFO_ERROR_NONE) { + std::string version_str(value); + free(value); + float version = std::stof(version_str); + if (version >= 5.5) { + elm_win_aux_hint_add(evas_window_, "wm.policy.win.user.geometry", "1"); + is_user_geometry_supported_ = true; + } + } + auto* ecore_evas = ecore_evas_ecore_evas_get(evas_object_evas_get(evas_window_)); @@ -743,7 +758,24 @@ void TizenRendererEvasGL::SetGeometry(int32_t x, int32_t y, int32_t width, int32_t height) { - FT_UNIMPLEMENTED(); + evas_object_move(evas_window_, x, y); + evas_object_resize(evas_window_, width, height); + + evas_object_resize(graphics_adapter_, width, height); + + evas_object_image_native_surface_set(graphics_adapter_, nullptr); + + evas_gl_surface_destroy(evas_gl_, gl_surface_); + evas_gl_surface_destroy(evas_gl_, gl_resource_surface_); + + evas_object_image_size_set(graphics_adapter_, width, height); + gl_surface_ = evas_gl_surface_create(evas_gl_, gl_config_, width, height); + gl_resource_surface_ = evas_gl_pbuffer_surface_create(evas_gl_, gl_config_, + width, height, nullptr); + + Evas_Native_Surface ns; + evas_gl_native_surface_get(evas_gl_, gl_surface_, &ns); + evas_object_image_native_surface_set(graphics_adapter_, &ns); } void TizenRendererEvasGL::ResizeWithRotation(int32_t x, From 473df21ae601a1cf70b4a9b1bd4c4cb81419fdf8 Mon Sep 17 00:00:00 2001 From: Boram Bae Date: Thu, 2 Dec 2021 15:07:36 +0900 Subject: [PATCH 2/6] Fix x64 shell build break Signed-off-by: Boram Bae --- shell/platform/tizen/tizen_renderer_evas_gl.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shell/platform/tizen/tizen_renderer_evas_gl.cc b/shell/platform/tizen/tizen_renderer_evas_gl.cc index 77628b152c28e..499af4afb011e 100644 --- a/shell/platform/tizen/tizen_renderer_evas_gl.cc +++ b/shell/platform/tizen/tizen_renderer_evas_gl.cc @@ -10,8 +10,8 @@ EVAS_GL_GLOBAL_GLES3_DEFINE(); #include "flutter/shell/platform/tizen/logger.h" -#include #ifndef __X64_SHELL__ +#include #include #endif @@ -664,7 +664,6 @@ Evas_Object* TizenRendererEvasGL::SetupEvasWindow(int32_t* width, efl_util_set_notification_window_level(evas_window_, EFL_UTIL_NOTIFICATION_LEVEL_TOP); } -#endif char* value = nullptr; int ret = 0; ret = system_info_get_platform_string( @@ -678,6 +677,7 @@ Evas_Object* TizenRendererEvasGL::SetupEvasWindow(int32_t* width, is_user_geometry_supported_ = true; } } +#endif auto* ecore_evas = ecore_evas_ecore_evas_get(evas_object_evas_get(evas_window_)); From 59b341c37aaa9e486a01d538f2284135b4d4a871 Mon Sep 17 00:00:00 2001 From: Boram Bae Date: Thu, 2 Dec 2021 15:40:14 +0900 Subject: [PATCH 3/6] Comment out elm_win_aux_hint_add related stuff * It cannot pass our symbol checker(Tizne 4.0). Signed-off-by: Boram Bae --- shell/platform/tizen/tizen_renderer_evas_gl.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/shell/platform/tizen/tizen_renderer_evas_gl.cc b/shell/platform/tizen/tizen_renderer_evas_gl.cc index 499af4afb011e..574071c436f4f 100644 --- a/shell/platform/tizen/tizen_renderer_evas_gl.cc +++ b/shell/platform/tizen/tizen_renderer_evas_gl.cc @@ -664,6 +664,8 @@ Evas_Object* TizenRendererEvasGL::SetupEvasWindow(int32_t* width, efl_util_set_notification_window_level(evas_window_, EFL_UTIL_NOTIFICATION_LEVEL_TOP); } + // Please uncomment below when Tizen 5.5 or later was chosen as default + /* char* value = nullptr; int ret = 0; ret = system_info_get_platform_string( @@ -677,6 +679,7 @@ Evas_Object* TizenRendererEvasGL::SetupEvasWindow(int32_t* width, is_user_geometry_supported_ = true; } } + */ #endif auto* ecore_evas = From f0b7ed1207d0648c7b3bc5cf2a0625f070875449 Mon Sep 17 00:00:00 2001 From: Boram Bae Date: Thu, 2 Dec 2021 16:43:53 +0900 Subject: [PATCH 4/6] Disable setWindowGeometry on evas gl * Enable this feature when Tizen 5.5 or later becomes the default. Signed-off-by: Boram Bae --- .../platform/tizen/channels/window_channel.cc | 9 +++++---- shell/platform/tizen/tizen_renderer.h | 2 -- .../tizen/tizen_renderer_ecore_wl2.cc | 1 - .../platform/tizen/tizen_renderer_evas_gl.cc | 19 +++---------------- 4 files changed, 8 insertions(+), 23 deletions(-) diff --git a/shell/platform/tizen/channels/window_channel.cc b/shell/platform/tizen/channels/window_channel.cc index d5898f5d994aa..9bf430af56d3e 100644 --- a/shell/platform/tizen/channels/window_channel.cc +++ b/shell/platform/tizen/channels/window_channel.cc @@ -46,10 +46,10 @@ void WindowChannel::HandleMethodCall( map[EncodableValue("height")] = EncodableValue(geometry.h); result->Success(EncodableValue(map)); } else if (method_name == "setWindowGeometry") { - if (!renderer_->IsUserGeometrySupported()) { - result->Error("User geometry is not supported."); - return; - } +#ifdef TIZEN_RENDERER_EVAS_GL + FT_LOG(Error) << "setWindowGeometry is not supported on evas_gl."; + result->NotImplemented(); +#else auto arguments = std::get_if(method_call.arguments()); if (!arguments) { result->Error("Invalid arguments"); @@ -66,6 +66,7 @@ void WindowChannel::HandleMethodCall( width ? *width : geometry.w, height ? *height : geometry.h); result->Success(); +#endif } else if (method_name == "getScreenGeometry") { TizenRenderer::Geometry geometry = renderer_->GetScreenGeometry(); EncodableMap map; diff --git a/shell/platform/tizen/tizen_renderer.h b/shell/platform/tizen/tizen_renderer.h index 804179f1bdcdc..a9763f5554fab 100644 --- a/shell/platform/tizen/tizen_renderer.h +++ b/shell/platform/tizen/tizen_renderer.h @@ -28,7 +28,6 @@ class TizenRenderer { virtual ~TizenRenderer(); bool IsValid() { return is_valid_; } - bool IsUserGeometrySupported() { return is_user_geometry_supported_; } virtual bool OnMakeCurrent() = 0; virtual bool OnClearCurrent() = 0; virtual bool OnMakeResourceCurrent() = 0; @@ -73,7 +72,6 @@ class TizenRenderer { Delegate& delegate_; bool is_valid_ = false; - bool is_user_geometry_supported_ = false; bool received_rotation_ = false; }; diff --git a/shell/platform/tizen/tizen_renderer_ecore_wl2.cc b/shell/platform/tizen/tizen_renderer_ecore_wl2.cc index 960ddf25b365b..69517e4cf4a4a 100644 --- a/shell/platform/tizen/tizen_renderer_ecore_wl2.cc +++ b/shell/platform/tizen/tizen_renderer_ecore_wl2.cc @@ -318,7 +318,6 @@ bool TizenRendererEcoreWl2::SetupEcoreWlWindow(int32_t width, int32_t height) { ecore_wl2_window_position_set(ecore_wl2_window_, x, y); ecore_wl2_window_aux_hint_add(ecore_wl2_window_, 0, "wm.policy.win.user.geometry", "1"); - is_user_geometry_supported_ = true; if (transparent_) { ecore_wl2_window_alpha_set(ecore_wl2_window_, EINA_TRUE); diff --git a/shell/platform/tizen/tizen_renderer_evas_gl.cc b/shell/platform/tizen/tizen_renderer_evas_gl.cc index 574071c436f4f..a0476167feac1 100644 --- a/shell/platform/tizen/tizen_renderer_evas_gl.cc +++ b/shell/platform/tizen/tizen_renderer_evas_gl.cc @@ -664,22 +664,9 @@ Evas_Object* TizenRendererEvasGL::SetupEvasWindow(int32_t* width, efl_util_set_notification_window_level(evas_window_, EFL_UTIL_NOTIFICATION_LEVEL_TOP); } - // Please uncomment below when Tizen 5.5 or later was chosen as default - /* - char* value = nullptr; - int ret = 0; - ret = system_info_get_platform_string( - "http://tizen.org/feature/platform.version", &value); - if (ret == SYSTEM_INFO_ERROR_NONE) { - std::string version_str(value); - free(value); - float version = std::stof(version_str); - if (version >= 5.5) { - elm_win_aux_hint_add(evas_window_, "wm.policy.win.user.geometry", "1"); - is_user_geometry_supported_ = true; - } - } - */ + // Please uncomment below and enable setWindowGeometry of window channel when + // Tizen 5.5 or later was chosen as default. + // elm_win_aux_hint_add(evas_window_, "wm.policy.win.user.geometry", "1"); #endif auto* ecore_evas = From b10a5463a3b8296a72636bbc9fe0770e26961600 Mon Sep 17 00:00:00 2001 From: Boram Bae Date: Thu, 2 Dec 2021 16:49:14 +0900 Subject: [PATCH 5/6] Cleanup minor things Signed-off-by: Boram Bae --- shell/platform/tizen/flutter_tizen_engine.cc | 4 ++++ shell/platform/tizen/tizen_renderer.h | 1 + shell/platform/tizen/tizen_renderer_evas_gl.cc | 1 - 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/shell/platform/tizen/flutter_tizen_engine.cc b/shell/platform/tizen/flutter_tizen_engine.cc index c8e53ac441d02..edd9e823bdc39 100644 --- a/shell/platform/tizen/flutter_tizen_engine.cc +++ b/shell/platform/tizen/flutter_tizen_engine.cc @@ -419,12 +419,16 @@ void FlutterTizenEngine::OnGeometryChange(int32_t x, int32_t y, int32_t width, int32_t height) { +#ifdef TIZEN_RENDERER_EVAS_GL + FT_UNIMPLEMENTED(); +#else if (!renderer_->IsValid()) { return; } renderer_->SetGeometry(x, y, width, height); renderer_->ResizeWithRotation(x, y, width, height, 0); SendWindowMetrics(x, y, width, height, 0.0); +#endif } void FlutterTizenEngine::OnVsync(intptr_t baton, diff --git a/shell/platform/tizen/tizen_renderer.h b/shell/platform/tizen/tizen_renderer.h index a9763f5554fab..18e391daa9fe3 100644 --- a/shell/platform/tizen/tizen_renderer.h +++ b/shell/platform/tizen/tizen_renderer.h @@ -28,6 +28,7 @@ class TizenRenderer { virtual ~TizenRenderer(); bool IsValid() { return is_valid_; } + virtual bool OnMakeCurrent() = 0; virtual bool OnClearCurrent() = 0; virtual bool OnMakeResourceCurrent() = 0; diff --git a/shell/platform/tizen/tizen_renderer_evas_gl.cc b/shell/platform/tizen/tizen_renderer_evas_gl.cc index a0476167feac1..054d43cf421fe 100644 --- a/shell/platform/tizen/tizen_renderer_evas_gl.cc +++ b/shell/platform/tizen/tizen_renderer_evas_gl.cc @@ -11,7 +11,6 @@ EVAS_GL_GLOBAL_GLES3_DEFINE(); #include "flutter/shell/platform/tizen/logger.h" #ifndef __X64_SHELL__ -#include #include #endif From da11e0914b37b296606ce2d81980519d5a8d85fe Mon Sep 17 00:00:00 2001 From: Boram Bae Date: Thu, 9 Dec 2021 18:12:27 +0900 Subject: [PATCH 6/6] Apply suggested changes Signed-off-by: Boram Bae --- shell/platform/tizen/tizen_renderer_evas_gl.cc | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/shell/platform/tizen/tizen_renderer_evas_gl.cc b/shell/platform/tizen/tizen_renderer_evas_gl.cc index 054d43cf421fe..4d03ed7d9f5e0 100644 --- a/shell/platform/tizen/tizen_renderer_evas_gl.cc +++ b/shell/platform/tizen/tizen_renderer_evas_gl.cc @@ -751,7 +751,6 @@ void TizenRendererEvasGL::SetGeometry(int32_t x, evas_object_resize(evas_window_, width, height); evas_object_resize(graphics_adapter_, width, height); - evas_object_image_native_surface_set(graphics_adapter_, nullptr); evas_gl_surface_destroy(evas_gl_, gl_surface_); @@ -762,9 +761,9 @@ void TizenRendererEvasGL::SetGeometry(int32_t x, gl_resource_surface_ = evas_gl_pbuffer_surface_create(evas_gl_, gl_config_, width, height, nullptr); - Evas_Native_Surface ns; - evas_gl_native_surface_get(evas_gl_, gl_surface_, &ns); - evas_object_image_native_surface_set(graphics_adapter_, &ns); + Evas_Native_Surface native_surface; + evas_gl_native_surface_get(evas_gl_, gl_surface_, &native_surface); + evas_object_image_native_surface_set(graphics_adapter_, &native_surface); } void TizenRendererEvasGL::ResizeWithRotation(int32_t x,