From 828416e4a0dfd8f1f551c03b94fcb4a3b8980a41 Mon Sep 17 00:00:00 2001 From: Hakkyu Kim Date: Tue, 9 Nov 2021 13:01:07 +0900 Subject: [PATCH 1/7] Add window channel --- shell/platform/tizen/BUILD.gn | 1 + .../platform/tizen/channels/window_channel.cc | 97 +++++++++++++++++++ .../platform/tizen/channels/window_channel.h | 45 +++++++++ shell/platform/tizen/flutter_tizen_engine.cc | 47 ++++++--- shell/platform/tizen/flutter_tizen_engine.h | 16 ++- shell/platform/tizen/tizen_renderer.h | 6 ++ .../tizen/tizen_renderer_ecore_wl2.cc | 8 ++ .../platform/tizen/tizen_renderer_ecore_wl2.h | 1 + 8 files changed, 209 insertions(+), 12 deletions(-) create mode 100644 shell/platform/tizen/channels/window_channel.cc create mode 100644 shell/platform/tizen/channels/window_channel.h diff --git a/shell/platform/tizen/BUILD.gn b/shell/platform/tizen/BUILD.gn index ddd3dd6809cd1..e98a0a6e0c6da 100644 --- a/shell/platform/tizen/BUILD.gn +++ b/shell/platform/tizen/BUILD.gn @@ -157,6 +157,7 @@ template("embedder") { "channels/app_control_channel.cc", "channels/platform_channel_tizen.cc", "channels/settings_channel_tizen.cc", + "channels/window_channel.cc", "external_texture_surface_gl_tizen.cc", "system_utils_tizen.cc", ] diff --git a/shell/platform/tizen/channels/window_channel.cc b/shell/platform/tizen/channels/window_channel.cc new file mode 100644 index 0000000000000..756434c24190c --- /dev/null +++ b/shell/platform/tizen/channels/window_channel.cc @@ -0,0 +1,97 @@ +// Copyright 2021 Samsung Electronics Co., Ltd. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "window_channel.h" + +#include + +#include "flutter/shell/platform/common/client_wrapper/include/flutter/standard_method_codec.h" +#include "flutter/shell/platform/tizen/channels/encodable_value_holder.h" +#include "flutter/shell/platform/tizen/logger.h" + +namespace flutter { + +namespace { + +constexpr char kChannelName[] = "tizen/internal/window"; + +} // namespace + +#ifdef TIZEN_RENDERER_EVAS_GL +WindowChannel::WindowChannel(BinaryMessenger* messenger, + TizenRenderer* renderer) + : renderer_(renderer) { + channel_ = std::make_unique>( + messenger, kChannelName, &StandardMethodCodec::GetInstance()); + channel_->SetMethodCallHandler([this](const auto& call, auto result) { + this->HandleMethodCall(call, std::move(result)); + }); +} +#else +WindowChannel::WindowChannel(BinaryMessenger* messenger, + TizenRenderer* renderer, + TizenRenderer::Delegate* delegate) + : renderer_(renderer), delegate_(delegate) { + channel_ = std::make_unique>( + messenger, kChannelName, &StandardMethodCodec::GetInstance()); + channel_->SetMethodCallHandler([this](const auto& call, auto result) { + this->HandleMethodCall(call, std::move(result)); + }); +} +#endif + +WindowChannel::~WindowChannel() {} + +void WindowChannel::HandleMethodCall( + const MethodCall& method_call, + std::unique_ptr> result) { + const auto& method_name = method_call.method_name(); + + if (method_name == "getWindowGeometry") { + TizenRenderer::WindowGeometry geometry = renderer_->GetCurrentGeometry(); + EncodableMap map; + map[EncodableValue("x")] = EncodableValue(geometry.x); + map[EncodableValue("y")] = EncodableValue(geometry.y); + map[EncodableValue("width")] = EncodableValue(geometry.w); + map[EncodableValue("height")] = EncodableValue(geometry.h); + result->Success(EncodableValue(map)); + } else if (method_name == "setWindowGeometry") { +#ifdef TIZEN_RENDERER_EVAS_GL + FT_LOG(Error) << "setGeometry is not supported on wearables."; + result->Error("Not supported", + "setGeometry is not supported on wearables."); +#else + auto arguments = std::get_if(method_call.arguments()); + if (!arguments) { + result->Error("Invalid arguments"); + return; + } + EncodableValueHolder x(arguments, "x"); + EncodableValueHolder y(arguments, "y"); + EncodableValueHolder width(arguments, "width"); + EncodableValueHolder height(arguments, "height"); + + TizenRenderer::WindowGeometry geometry = renderer_->GetCurrentGeometry(); + + delegate_->OnGeometryChange(x ? *x : geometry.x, y ? *y : geometry.y, + width ? *width : geometry.w, + height ? *height : geometry.h); + result->Success(); +#endif + } else if (method_name == "getScreenSize") { + int width, height; + system_info_get_platform_int("http://tizen.org/feature/screen.width", + &width); + system_info_get_platform_int("http://tizen.org/feature/screen.height", + &height); + EncodableMap map; + map[EncodableValue("width")] = EncodableValue(width); + map[EncodableValue("height")] = EncodableValue(height); + result->Success(EncodableValue(map)); + } else { + result->NotImplemented(); + } +} + +} // namespace flutter diff --git a/shell/platform/tizen/channels/window_channel.h b/shell/platform/tizen/channels/window_channel.h new file mode 100644 index 0000000000000..e5f6500eae697 --- /dev/null +++ b/shell/platform/tizen/channels/window_channel.h @@ -0,0 +1,45 @@ +// Copyright 2021 Samsung Electronics Co., Ltd. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef EMBEDDER_WINDOW_CHANNEL_H_ +#define EMBEDDER_WINDOW_CHANNEL_H_ + +#include +#include + +#include "flutter/shell/platform/common/client_wrapper/include/flutter/binary_messenger.h" +#include "flutter/shell/platform/common/client_wrapper/include/flutter/encodable_value.h" +#include "flutter/shell/platform/common/client_wrapper/include/flutter/method_channel.h" +#include "flutter/shell/platform/tizen/tizen_renderer.h" + +namespace flutter { + +class WindowChannel { + public: +#ifdef TIZEN_RENDERER_EVAS_GL + WindowChannel(BinaryMessenger* messenger, TizenRenderer* renderer); +#else + WindowChannel(BinaryMessenger* messenger, + TizenRenderer* renderer, + TizenRenderer::Delegate* delegate); +#endif + virtual ~WindowChannel(); + + private: + void HandleMethodCall(const MethodCall& method_call, + std::unique_ptr> result); + + std::unique_ptr> channel_; + + // A reference to the renderer object managed by FlutterTizenEngine. + // This can be nullptr if the engine is running in headless mode. + TizenRenderer* renderer_; +#ifndef TIZEN_RENDERER_EVAS_GL + TizenRenderer::Delegate* delegate_; +#endif +}; + +} // namespace flutter + +#endif // EMBEDDER_WINDOW_CHANNEL_H_ diff --git a/shell/platform/tizen/flutter_tizen_engine.cc b/shell/platform/tizen/flutter_tizen_engine.cc index 24832dfdc49da..4b5286618095d 100644 --- a/shell/platform/tizen/flutter_tizen_engine.cc +++ b/shell/platform/tizen/flutter_tizen_engine.cc @@ -248,7 +248,16 @@ bool FlutterTizenEngine::RunEngine(const char* entrypoint) { #ifndef __X64_SHELL__ app_control_channel_ = std::make_unique( internal_plugin_registrar_->messenger()); -#endif + if (IsHeaded()) { +#ifdef TIZEN_RENDERER_EVAS_GL + window_channel_ = std::make_unique( + internal_plugin_registrar_->messenger(), renderer_.get()); +#else + window_channel_ = std::make_unique( + internal_plugin_registrar_->messenger(), renderer_.get(), this); +#endif // TIZEN_RENDERER_EVAS_GL + } +#endif // !__X64_SHELL__ lifecycle_channel_ = std::make_unique( internal_plugin_registrar_->messenger()); platform_channel_ = std::make_unique( @@ -343,11 +352,15 @@ void FlutterTizenEngine::SendPointerEvent(const FlutterPointerEvent& event) { embedder_api_.SendPointerEvent(engine_, &event, 1); } -void FlutterTizenEngine::SendWindowMetrics(int32_t width, +void FlutterTizenEngine::SendWindowMetrics(int32_t x, + int32_t y, + int32_t width, int32_t height, double pixel_ratio) { FlutterWindowMetricsEvent event = {}; event.struct_size = sizeof(FlutterWindowMetricsEvent); + event.left = static_cast(x); + event.top = static_cast(y); event.width = static_cast(width); event.height = static_cast(height); if (pixel_ratio == 0.0) { @@ -397,20 +410,32 @@ void FlutterTizenEngine::SetWindowOrientation(int32_t degree) { }; touch_event_handler_->rotation = degree; if (degree == 90 || degree == 270) { - renderer_->ResizeWithRotation(geometry.x, geometry.y, height, width, - degree); - SendWindowMetrics(height, width, 0.0); - } else { - renderer_->ResizeWithRotation(geometry.x, geometry.y, width, height, - degree); - SendWindowMetrics(width, height, 0.0); + std::swap(width, height); } + renderer_->ResizeWithRotation(geometry.x, geometry.y, width, height, degree); + // Window position does not change on rotation regardless of it's size. + SendWindowMetrics(geometry.x, geometry.y, width, height, 0.0); } void FlutterTizenEngine::OnOrientationChange(int32_t degree) { SetWindowOrientation(degree); } +#ifndef TIZEN_RENDERER_EVAS_GL +void FlutterTizenEngine::OnGeometryChange(int32_t x, + int32_t y, + int32_t width, + int32_t height) { + if (!renderer_->IsValid()) { + return; + } + static_cast(renderer_.get()) + ->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, uint64_t frame_start_time_nanos, uint64_t frame_target_time_nanos) { @@ -456,8 +481,8 @@ bool FlutterTizenEngine::MarkExternalTextureFrameAvailable(int64_t texture_id) { engine_, texture_id) == kSuccess); } -// The Flutter Engine calls out to this function when new platform messages are -// available. +// The Flutter Engine calls out to this function when new platform messages +// are available. // Converts a FlutterPlatformMessage to an equivalent FlutterDesktopMessage. FlutterDesktopMessage FlutterTizenEngine::ConvertToDesktopMessage( diff --git a/shell/platform/tizen/flutter_tizen_engine.h b/shell/platform/tizen/flutter_tizen_engine.h index 51bd0f9b3a6e6..62c953c47fe11 100644 --- a/shell/platform/tizen/flutter_tizen_engine.h +++ b/shell/platform/tizen/flutter_tizen_engine.h @@ -21,6 +21,7 @@ #include "flutter/shell/platform/tizen/channels/platform_view_channel.h" #include "flutter/shell/platform/tizen/channels/settings_channel.h" #include "flutter/shell/platform/tizen/channels/text_input_channel.h" +#include "flutter/shell/platform/tizen/channels/window_channel.h" #include "flutter/shell/platform/tizen/flutter_project_bundle.h" #include "flutter/shell/platform/tizen/flutter_tizen_texture_registrar.h" #include "flutter/shell/platform/tizen/key_event_handler.h" @@ -136,10 +137,20 @@ class FlutterTizenEngine : public TizenRenderer::Delegate { // Sends a window metrics update to the Flutter engine using current window // dimensions in physical - void SendWindowMetrics(int32_t width, int32_t height, double pixel_ratio); + void SendWindowMetrics(int32_t x, + int32_t y, + int32_t width, + int32_t height, + double pixel_ratio); void SetWindowOrientation(int32_t degree); void OnOrientationChange(int32_t degree) override; +#ifndef TIZEN_RENDERER_EVAS_GL + void OnGeometryChange(int32_t x, + int32_t y, + int32_t width, + int32_t height) override; +#endif void OnVsync(intptr_t baton, uint64_t frame_start_time_nanos, uint64_t frame_target_time_nanos); @@ -216,6 +227,9 @@ class FlutterTizenEngine : public TizenRenderer::Delegate { #ifndef __X64_SHELL__ // A plugin that implements Tizen app_control channels. std::unique_ptr app_control_channel_; + + // A plugin that implements the Tizen window channel. + std::unique_ptr window_channel_; #endif // A plugin that implements the Flutter keyevent channel. diff --git a/shell/platform/tizen/tizen_renderer.h b/shell/platform/tizen/tizen_renderer.h index c8dc232cb9d37..0d2dc1e4bdbb6 100644 --- a/shell/platform/tizen/tizen_renderer.h +++ b/shell/platform/tizen/tizen_renderer.h @@ -19,6 +19,12 @@ class TizenRenderer { class Delegate { public: virtual void OnOrientationChange(int32_t degree) = 0; +#ifndef TIZEN_RENDERER_EVAS_GL + virtual void OnGeometryChange(int32_t x, + int32_t y, + int32_t width, + int32_t height) = 0; +#endif }; virtual ~TizenRenderer(); diff --git a/shell/platform/tizen/tizen_renderer_ecore_wl2.cc b/shell/platform/tizen/tizen_renderer_ecore_wl2.cc index 852cbd55926af..2d1f7b8497eea 100644 --- a/shell/platform/tizen/tizen_renderer_ecore_wl2.cc +++ b/shell/platform/tizen/tizen_renderer_ecore_wl2.cc @@ -553,6 +553,14 @@ void TizenRendererEcoreWl2::SetRotate(int angle) { received_rotation_ = true; } +void TizenRendererEcoreWl2::SetGeometry(int32_t x, + int32_t y, + int32_t width, + int32_t height) { + ecore_wl2_window_geometry_set(ecore_wl2_window_, x, y, width, height); + ecore_wl2_window_position_set(ecore_wl2_window_, x, y); +} + void TizenRendererEcoreWl2::ResizeWithRotation(int32_t x, int32_t y, int32_t width, diff --git a/shell/platform/tizen/tizen_renderer_ecore_wl2.h b/shell/platform/tizen/tizen_renderer_ecore_wl2.h index df4b0c35f83c5..fe808eca392f0 100644 --- a/shell/platform/tizen/tizen_renderer_ecore_wl2.h +++ b/shell/platform/tizen/tizen_renderer_ecore_wl2.h @@ -43,6 +43,7 @@ class TizenRendererEcoreWl2 : public TizenRenderer { int32_t height, int32_t angle) override; void SetRotate(int angle) override; + void SetGeometry(int32_t x, int32_t y, int32_t width, int32_t height); void SetPreferredOrientations(const std::vector& rotations) override; bool IsSupportedExtention(const char* name) override; From 423a9c5428ca7cac6425fe4ece82c1743ca796b7 Mon Sep 17 00:00:00 2001 From: Hakkyu Kim Date: Tue, 2 Nov 2021 10:43:09 +0900 Subject: [PATCH 2/7] Obtain real screen size --- shell/platform/tizen/channels/window_channel.cc | 10 +++------- shell/platform/tizen/tizen_renderer.h | 5 +++++ shell/platform/tizen/tizen_renderer_ecore_wl2.cc | 6 ++++++ shell/platform/tizen/tizen_renderer_ecore_wl2.h | 1 + shell/platform/tizen/tizen_renderer_evas_gl.cc | 9 +++++++++ shell/platform/tizen/tizen_renderer_evas_gl.h | 1 + 6 files changed, 25 insertions(+), 7 deletions(-) diff --git a/shell/platform/tizen/channels/window_channel.cc b/shell/platform/tizen/channels/window_channel.cc index 756434c24190c..87dfc4d68d689 100644 --- a/shell/platform/tizen/channels/window_channel.cc +++ b/shell/platform/tizen/channels/window_channel.cc @@ -80,14 +80,10 @@ void WindowChannel::HandleMethodCall( result->Success(); #endif } else if (method_name == "getScreenSize") { - int width, height; - system_info_get_platform_int("http://tizen.org/feature/screen.width", - &width); - system_info_get_platform_int("http://tizen.org/feature/screen.height", - &height); + TizenRenderer::WindowGeometry geometry = renderer_->GetScreenGeometry(); EncodableMap map; - map[EncodableValue("width")] = EncodableValue(width); - map[EncodableValue("height")] = EncodableValue(height); + map[EncodableValue("width")] = EncodableValue(geometry.w); + map[EncodableValue("height")] = EncodableValue(geometry.h); result->Success(EncodableValue(map)); } else { result->NotImplemented(); diff --git a/shell/platform/tizen/tizen_renderer.h b/shell/platform/tizen/tizen_renderer.h index 0d2dc1e4bdbb6..98e0f62107a28 100644 --- a/shell/platform/tizen/tizen_renderer.h +++ b/shell/platform/tizen/tizen_renderer.h @@ -38,7 +38,12 @@ class TizenRenderer { virtual uint32_t OnGetFBO() = 0; virtual void* OnProcResolver(const char* name) = 0; + // Returns the geometry of the current window. virtual WindowGeometry GetCurrentGeometry() = 0; + + // Returns the geometry of the display screen. + virtual WindowGeometry GetScreenGeometry() = 0; + virtual int32_t GetDpi() = 0; virtual uintptr_t GetWindowId() = 0; virtual void* GetWindowHandle() = 0; diff --git a/shell/platform/tizen/tizen_renderer_ecore_wl2.cc b/shell/platform/tizen/tizen_renderer_ecore_wl2.cc index 2d1f7b8497eea..0309486305940 100644 --- a/shell/platform/tizen/tizen_renderer_ecore_wl2.cc +++ b/shell/platform/tizen/tizen_renderer_ecore_wl2.cc @@ -213,6 +213,12 @@ TizenRenderer::WindowGeometry TizenRendererEcoreWl2::GetCurrentGeometry() { return result; } +TizenRenderer::WindowGeometry TizenRendererEcoreWl2::GetScreenGeometry() { + WindowGeometry result; + ecore_wl2_display_screen_size_get(ecore_wl2_display_, &result.w, &result.h); + return result; +} + int32_t TizenRendererEcoreWl2::GetDpi() { auto* output = ecore_wl2_window_output_find(ecore_wl2_window_); if (!output) { diff --git a/shell/platform/tizen/tizen_renderer_ecore_wl2.h b/shell/platform/tizen/tizen_renderer_ecore_wl2.h index fe808eca392f0..4e079fb751bc0 100644 --- a/shell/platform/tizen/tizen_renderer_ecore_wl2.h +++ b/shell/platform/tizen/tizen_renderer_ecore_wl2.h @@ -33,6 +33,7 @@ class TizenRendererEcoreWl2 : public TizenRenderer { void* OnProcResolver(const char* name) override; WindowGeometry GetCurrentGeometry() override; + WindowGeometry GetScreenGeometry() override; int32_t GetDpi() override; uintptr_t GetWindowId() override; void* GetWindowHandle() override; diff --git a/shell/platform/tizen/tizen_renderer_evas_gl.cc b/shell/platform/tizen/tizen_renderer_evas_gl.cc index 3454555fe998c..ca456d705887a 100644 --- a/shell/platform/tizen/tizen_renderer_evas_gl.cc +++ b/shell/platform/tizen/tizen_renderer_evas_gl.cc @@ -553,6 +553,15 @@ TizenRenderer::WindowGeometry TizenRendererEvasGL::GetCurrentGeometry() { return result; } +TizenRenderer::WindowGeometry TizenRendererEvasGL::GetScreenGeometry() { + WindowGeometry result; + auto* ecore_evas = + ecore_evas_ecore_evas_get(evas_object_evas_get(evas_window_)); + ecore_evas_screen_geometry_get(ecore_evas, nullptr, nullptr, &result.w, + &result.h); + return result; +} + int32_t TizenRendererEvasGL::GetDpi() { auto* ecore_evas = ecore_evas_ecore_evas_get(evas_object_evas_get(evas_window_)); diff --git a/shell/platform/tizen/tizen_renderer_evas_gl.h b/shell/platform/tizen/tizen_renderer_evas_gl.h index 07a6e28b00f01..f7e921c295d40 100644 --- a/shell/platform/tizen/tizen_renderer_evas_gl.h +++ b/shell/platform/tizen/tizen_renderer_evas_gl.h @@ -31,6 +31,7 @@ class TizenRendererEvasGL : public TizenRenderer { void* OnProcResolver(const char* name) override; WindowGeometry GetCurrentGeometry() override; + WindowGeometry GetScreenGeometry() override; int32_t GetDpi() override; uintptr_t GetWindowId() override; void* GetWindowHandle() override; From a61f3fd7c4f6d88b0af7e7eac1e89814bd7505dd Mon Sep 17 00:00:00 2001 From: Hakkyu Kim Date: Tue, 2 Nov 2021 11:48:02 +0900 Subject: [PATCH 3/7] Rename some namings Also: - remove unused include - sort channels alphabetically - sort channel initializations alphabetically --- .../platform/tizen/channels/window_channel.cc | 8 ++--- .../platform/tizen/channels/window_channel.h | 1 - shell/platform/tizen/flutter_tizen_engine.cc | 29 +++++++++---------- shell/platform/tizen/flutter_tizen_engine.h | 8 +++-- shell/platform/tizen/tizen_renderer.cc | 2 +- shell/platform/tizen/tizen_renderer.h | 10 +++---- .../tizen/tizen_renderer_ecore_wl2.cc | 10 +++---- .../platform/tizen/tizen_renderer_ecore_wl2.h | 6 ++-- .../platform/tizen/tizen_renderer_evas_gl.cc | 10 +++---- shell/platform/tizen/tizen_renderer_evas_gl.h | 6 ++-- shell/platform/tizen/touch_event_handler.cc | 2 +- 11 files changed, 46 insertions(+), 46 deletions(-) diff --git a/shell/platform/tizen/channels/window_channel.cc b/shell/platform/tizen/channels/window_channel.cc index 87dfc4d68d689..b9dd4509303b9 100644 --- a/shell/platform/tizen/channels/window_channel.cc +++ b/shell/platform/tizen/channels/window_channel.cc @@ -49,7 +49,7 @@ void WindowChannel::HandleMethodCall( const auto& method_name = method_call.method_name(); if (method_name == "getWindowGeometry") { - TizenRenderer::WindowGeometry geometry = renderer_->GetCurrentGeometry(); + TizenRenderer::Geometry geometry = renderer_->GetWindowGeometry(); EncodableMap map; map[EncodableValue("x")] = EncodableValue(geometry.x); map[EncodableValue("y")] = EncodableValue(geometry.y); @@ -72,15 +72,15 @@ void WindowChannel::HandleMethodCall( EncodableValueHolder width(arguments, "width"); EncodableValueHolder height(arguments, "height"); - TizenRenderer::WindowGeometry geometry = renderer_->GetCurrentGeometry(); + TizenRenderer::Geometry geometry = renderer_->GetWindowGeometry(); delegate_->OnGeometryChange(x ? *x : geometry.x, y ? *y : geometry.y, width ? *width : geometry.w, height ? *height : geometry.h); result->Success(); #endif - } else if (method_name == "getScreenSize") { - TizenRenderer::WindowGeometry geometry = renderer_->GetScreenGeometry(); + } else if (method_name == "getScreenGeometry") { + TizenRenderer::Geometry geometry = renderer_->GetScreenGeometry(); EncodableMap map; map[EncodableValue("width")] = EncodableValue(geometry.w); map[EncodableValue("height")] = EncodableValue(geometry.h); diff --git a/shell/platform/tizen/channels/window_channel.h b/shell/platform/tizen/channels/window_channel.h index e5f6500eae697..717731ec4893c 100644 --- a/shell/platform/tizen/channels/window_channel.h +++ b/shell/platform/tizen/channels/window_channel.h @@ -6,7 +6,6 @@ #define EMBEDDER_WINDOW_CHANNEL_H_ #include -#include #include "flutter/shell/platform/common/client_wrapper/include/flutter/binary_messenger.h" #include "flutter/shell/platform/common/client_wrapper/include/flutter/encodable_value.h" diff --git a/shell/platform/tizen/flutter_tizen_engine.cc b/shell/platform/tizen/flutter_tizen_engine.cc index 4b5286618095d..14457dec62ae3 100644 --- a/shell/platform/tizen/flutter_tizen_engine.cc +++ b/shell/platform/tizen/flutter_tizen_engine.cc @@ -90,9 +90,8 @@ void FlutterTizenEngine::InitializeRenderer(int32_t x, int32_t width, int32_t height, bool transparent, - bool focusable, - bool top_level) { - TizenRenderer::WindowGeometry geometry = {x, y, width, height}; + bool focusable) { + TizenRenderer::Geometry geometry = {x, y, width, height}; #ifdef TIZEN_RENDERER_EVAS_GL renderer_ = std::make_unique( @@ -248,16 +247,7 @@ bool FlutterTizenEngine::RunEngine(const char* entrypoint) { #ifndef __X64_SHELL__ app_control_channel_ = std::make_unique( internal_plugin_registrar_->messenger()); - if (IsHeaded()) { -#ifdef TIZEN_RENDERER_EVAS_GL - window_channel_ = std::make_unique( - internal_plugin_registrar_->messenger(), renderer_.get()); -#else - window_channel_ = std::make_unique( - internal_plugin_registrar_->messenger(), renderer_.get(), this); -#endif // TIZEN_RENDERER_EVAS_GL - } -#endif // !__X64_SHELL__ +#endif lifecycle_channel_ = std::make_unique( internal_plugin_registrar_->messenger()); platform_channel_ = std::make_unique( @@ -276,6 +266,15 @@ bool FlutterTizenEngine::RunEngine(const char* entrypoint) { text_input_channel_ = std::make_unique( internal_plugin_registrar_->messenger(), std::make_unique(this)); +#ifndef __X64_SHELL__ +#ifdef TIZEN_RENDERER_EVAS_GL + window_channel_ = std::make_unique( + internal_plugin_registrar_->messenger(), renderer_.get()); +#else + window_channel_ = std::make_unique( + internal_plugin_registrar_->messenger(), renderer_.get(), this); +#endif // TIZEN_RENDERER_EVAS_GL +#endif // !__X64_SHELL__ key_event_handler_ = std::make_unique(this); touch_event_handler_ = std::make_unique(this); @@ -390,7 +389,7 @@ void FlutterTizenEngine::SetWindowOrientation(int32_t degree) { renderer_->SetRotate(degree); // Compute renderer transformation based on the angle of rotation. double rad = (360 - degree) * M_PI / 180; - auto geometry = renderer_->GetCurrentGeometry(); + auto geometry = renderer_->GetWindowGeometry(); double width = geometry.w; double height = geometry.h; @@ -413,7 +412,7 @@ void FlutterTizenEngine::SetWindowOrientation(int32_t degree) { std::swap(width, height); } renderer_->ResizeWithRotation(geometry.x, geometry.y, width, height, degree); - // Window position does not change on rotation regardless of it's size. + // Window position does not change on rotation regardless of its orientation. SendWindowMetrics(geometry.x, geometry.y, width, height, 0.0); } diff --git a/shell/platform/tizen/flutter_tizen_engine.h b/shell/platform/tizen/flutter_tizen_engine.h index 62c953c47fe11..7fbb5dd5bc520 100644 --- a/shell/platform/tizen/flutter_tizen_engine.h +++ b/shell/platform/tizen/flutter_tizen_engine.h @@ -227,9 +227,6 @@ class FlutterTizenEngine : public TizenRenderer::Delegate { #ifndef __X64_SHELL__ // A plugin that implements Tizen app_control channels. std::unique_ptr app_control_channel_; - - // A plugin that implements the Tizen window channel. - std::unique_ptr window_channel_; #endif // A plugin that implements the Flutter keyevent channel. @@ -253,6 +250,11 @@ class FlutterTizenEngine : public TizenRenderer::Delegate { // A plugin that implements the Flutter textinput channel. std::unique_ptr text_input_channel_; +#ifndef __X64_SHELL__ + // A plugin that implements the Tizen window channel. + std::unique_ptr window_channel_; +#endif + // The event loop for the main thread that allows for delayed task execution. std::unique_ptr event_loop_; diff --git a/shell/platform/tizen/tizen_renderer.cc b/shell/platform/tizen/tizen_renderer.cc index e04082634fb84..314f75f05adac 100644 --- a/shell/platform/tizen/tizen_renderer.cc +++ b/shell/platform/tizen/tizen_renderer.cc @@ -6,7 +6,7 @@ namespace flutter { -TizenRenderer::TizenRenderer(WindowGeometry geometry, +TizenRenderer::TizenRenderer(Geometry geometry, bool transparent, bool focusable, bool top_level, diff --git a/shell/platform/tizen/tizen_renderer.h b/shell/platform/tizen/tizen_renderer.h index 98e0f62107a28..894f766f7b898 100644 --- a/shell/platform/tizen/tizen_renderer.h +++ b/shell/platform/tizen/tizen_renderer.h @@ -12,7 +12,7 @@ namespace flutter { class TizenRenderer { public: - struct WindowGeometry { + struct Geometry { int32_t x{0}, y{0}, w{0}, h{0}; }; @@ -39,10 +39,10 @@ class TizenRenderer { virtual void* OnProcResolver(const char* name) = 0; // Returns the geometry of the current window. - virtual WindowGeometry GetCurrentGeometry() = 0; + virtual Geometry GetWindowGeometry() = 0; // Returns the geometry of the display screen. - virtual WindowGeometry GetScreenGeometry() = 0; + virtual Geometry GetScreenGeometry() = 0; virtual int32_t GetDpi() = 0; virtual uintptr_t GetWindowId() = 0; @@ -58,13 +58,13 @@ class TizenRenderer { virtual bool IsSupportedExtention(const char* name) = 0; protected: - explicit TizenRenderer(WindowGeometry geometry, + explicit TizenRenderer(Geometry geometry, bool transparent, bool focusable, bool top_level, Delegate& delegate); - WindowGeometry initial_geometry_; + Geometry initial_geometry_; bool transparent_; bool focusable_; bool top_level_; diff --git a/shell/platform/tizen/tizen_renderer_ecore_wl2.cc b/shell/platform/tizen/tizen_renderer_ecore_wl2.cc index 0309486305940..e1cc46a506d79 100644 --- a/shell/platform/tizen/tizen_renderer_ecore_wl2.cc +++ b/shell/platform/tizen/tizen_renderer_ecore_wl2.cc @@ -11,7 +11,7 @@ namespace flutter { -TizenRendererEcoreWl2::TizenRendererEcoreWl2(WindowGeometry geometry, +TizenRendererEcoreWl2::TizenRendererEcoreWl2(Geometry geometry, bool transparent, bool focusable, bool top_level, @@ -206,15 +206,15 @@ void* TizenRendererEcoreWl2::OnProcResolver(const char* name) { return nullptr; } -TizenRenderer::WindowGeometry TizenRendererEcoreWl2::GetCurrentGeometry() { - WindowGeometry result; +TizenRenderer::Geometry TizenRendererEcoreWl2::GetWindowGeometry() { + Geometry result; ecore_wl2_window_geometry_get(ecore_wl2_window_, &result.x, &result.y, &result.w, &result.h); return result; } -TizenRenderer::WindowGeometry TizenRendererEcoreWl2::GetScreenGeometry() { - WindowGeometry result; +TizenRenderer::Geometry TizenRendererEcoreWl2::GetScreenGeometry() { + Geometry result; ecore_wl2_display_screen_size_get(ecore_wl2_display_, &result.w, &result.h); return result; } diff --git a/shell/platform/tizen/tizen_renderer_ecore_wl2.h b/shell/platform/tizen/tizen_renderer_ecore_wl2.h index 4e079fb751bc0..fd859ca43a74b 100644 --- a/shell/platform/tizen/tizen_renderer_ecore_wl2.h +++ b/shell/platform/tizen/tizen_renderer_ecore_wl2.h @@ -18,7 +18,7 @@ namespace flutter { class TizenRendererEcoreWl2 : public TizenRenderer { public: - explicit TizenRendererEcoreWl2(WindowGeometry geometry, + explicit TizenRendererEcoreWl2(Geometry geometry, bool transparent, bool focusable, bool top_level, @@ -32,8 +32,8 @@ class TizenRendererEcoreWl2 : public TizenRenderer { uint32_t OnGetFBO() override; void* OnProcResolver(const char* name) override; - WindowGeometry GetCurrentGeometry() override; - WindowGeometry GetScreenGeometry() override; + Geometry GetWindowGeometry() override; + Geometry GetScreenGeometry() override; int32_t GetDpi() override; uintptr_t GetWindowId() override; void* GetWindowHandle() override; diff --git a/shell/platform/tizen/tizen_renderer_evas_gl.cc b/shell/platform/tizen/tizen_renderer_evas_gl.cc index ca456d705887a..50f071ca1af61 100644 --- a/shell/platform/tizen/tizen_renderer_evas_gl.cc +++ b/shell/platform/tizen/tizen_renderer_evas_gl.cc @@ -16,7 +16,7 @@ EVAS_GL_GLOBAL_GLES3_DEFINE(); namespace flutter { -TizenRendererEvasGL::TizenRendererEvasGL(WindowGeometry geometry, +TizenRendererEvasGL::TizenRendererEvasGL(Geometry geometry, bool transparent, bool focusable, bool top_level, @@ -546,15 +546,15 @@ void* TizenRendererEvasGL::OnProcResolver(const char* name) { return nullptr; } -TizenRenderer::WindowGeometry TizenRendererEvasGL::GetCurrentGeometry() { - WindowGeometry result; +TizenRenderer::Geometry TizenRendererEvasGL::GetWindowGeometry() { + Geometry result; evas_object_geometry_get(evas_window_, &result.x, &result.y, &result.w, &result.h); return result; } -TizenRenderer::WindowGeometry TizenRendererEvasGL::GetScreenGeometry() { - WindowGeometry result; +TizenRenderer::Geometry TizenRendererEvasGL::GetScreenGeometry() { + Geometry result; auto* ecore_evas = ecore_evas_ecore_evas_get(evas_object_evas_get(evas_window_)); ecore_evas_screen_geometry_get(ecore_evas, nullptr, nullptr, &result.w, diff --git a/shell/platform/tizen/tizen_renderer_evas_gl.h b/shell/platform/tizen/tizen_renderer_evas_gl.h index f7e921c295d40..4806e63954fb0 100644 --- a/shell/platform/tizen/tizen_renderer_evas_gl.h +++ b/shell/platform/tizen/tizen_renderer_evas_gl.h @@ -16,7 +16,7 @@ namespace flutter { class TizenRendererEvasGL : public TizenRenderer { public: - explicit TizenRendererEvasGL(WindowGeometry geometry, + explicit TizenRendererEvasGL(Geometry geometry, bool transparent, bool focusable, bool top_level, @@ -30,8 +30,8 @@ class TizenRendererEvasGL : public TizenRenderer { uint32_t OnGetFBO() override; void* OnProcResolver(const char* name) override; - WindowGeometry GetCurrentGeometry() override; - WindowGeometry GetScreenGeometry() override; + Geometry GetWindowGeometry() override; + Geometry GetScreenGeometry() override; int32_t GetDpi() override; uintptr_t GetWindowId() override; void* GetWindowHandle() override; diff --git a/shell/platform/tizen/touch_event_handler.cc b/shell/platform/tizen/touch_event_handler.cc index 70b8276e93a20..f684411187d4d 100644 --- a/shell/platform/tizen/touch_event_handler.cc +++ b/shell/platform/tizen/touch_event_handler.cc @@ -39,7 +39,7 @@ void TouchEventHandler::SendFlutterPointerEvent(FlutterPointerPhase phase, size_t timestamp, int device_id = 0) { // Correct errors caused by window rotation. - auto geometry = engine_->renderer()->GetCurrentGeometry(); + auto geometry = engine_->renderer()->GetWindowGeometry(); double width = geometry.w; double height = geometry.h; double new_x = x, new_y = y; From 84e3413d14d7532f06fccbcbf50720f2db36d478 Mon Sep 17 00:00:00 2001 From: Hakkyu Kim Date: Tue, 2 Nov 2021 12:09:33 +0900 Subject: [PATCH 4/7] Move SetGeometry to TizenRender to remove macros Also: - call `result->NotImplemented()` instead of `result->Error()` on unsupported window resizing. --- shell/platform/tizen/channels/window_channel.cc | 5 ++--- shell/platform/tizen/flutter_tizen_engine.cc | 5 +---- shell/platform/tizen/flutter_tizen_engine.h | 2 -- shell/platform/tizen/tizen_renderer.h | 6 ++++-- shell/platform/tizen/tizen_renderer_ecore_wl2.h | 7 +++++-- shell/platform/tizen/tizen_renderer_evas_gl.cc | 7 +++++++ shell/platform/tizen/tizen_renderer_evas_gl.h | 6 +++++- 7 files changed, 24 insertions(+), 14 deletions(-) diff --git a/shell/platform/tizen/channels/window_channel.cc b/shell/platform/tizen/channels/window_channel.cc index b9dd4509303b9..3c0b1221e8ca6 100644 --- a/shell/platform/tizen/channels/window_channel.cc +++ b/shell/platform/tizen/channels/window_channel.cc @@ -58,9 +58,8 @@ void WindowChannel::HandleMethodCall( result->Success(EncodableValue(map)); } else if (method_name == "setWindowGeometry") { #ifdef TIZEN_RENDERER_EVAS_GL - FT_LOG(Error) << "setGeometry is not supported on wearables."; - result->Error("Not supported", - "setGeometry is not supported on wearables."); + FT_LOG(Error) << "setWindowGeometry is not supported on evas_gl."; + result->NotImplemented(); #else auto arguments = std::get_if(method_call.arguments()); if (!arguments) { diff --git a/shell/platform/tizen/flutter_tizen_engine.cc b/shell/platform/tizen/flutter_tizen_engine.cc index 14457dec62ae3..673838734e18f 100644 --- a/shell/platform/tizen/flutter_tizen_engine.cc +++ b/shell/platform/tizen/flutter_tizen_engine.cc @@ -420,7 +420,6 @@ void FlutterTizenEngine::OnOrientationChange(int32_t degree) { SetWindowOrientation(degree); } -#ifndef TIZEN_RENDERER_EVAS_GL void FlutterTizenEngine::OnGeometryChange(int32_t x, int32_t y, int32_t width, @@ -428,12 +427,10 @@ void FlutterTizenEngine::OnGeometryChange(int32_t x, if (!renderer_->IsValid()) { return; } - static_cast(renderer_.get()) - ->SetGeometry(x, y, width, height); + 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, uint64_t frame_start_time_nanos, diff --git a/shell/platform/tizen/flutter_tizen_engine.h b/shell/platform/tizen/flutter_tizen_engine.h index 7fbb5dd5bc520..4423053e0a831 100644 --- a/shell/platform/tizen/flutter_tizen_engine.h +++ b/shell/platform/tizen/flutter_tizen_engine.h @@ -145,12 +145,10 @@ class FlutterTizenEngine : public TizenRenderer::Delegate { void SetWindowOrientation(int32_t degree); void OnOrientationChange(int32_t degree) override; -#ifndef TIZEN_RENDERER_EVAS_GL void OnGeometryChange(int32_t x, int32_t y, int32_t width, int32_t height) override; -#endif void OnVsync(intptr_t baton, uint64_t frame_start_time_nanos, uint64_t frame_target_time_nanos); diff --git a/shell/platform/tizen/tizen_renderer.h b/shell/platform/tizen/tizen_renderer.h index 894f766f7b898..89cf5157152ca 100644 --- a/shell/platform/tizen/tizen_renderer.h +++ b/shell/platform/tizen/tizen_renderer.h @@ -19,12 +19,10 @@ class TizenRenderer { class Delegate { public: virtual void OnOrientationChange(int32_t degree) = 0; -#ifndef TIZEN_RENDERER_EVAS_GL virtual void OnGeometryChange(int32_t x, int32_t y, int32_t width, int32_t height) = 0; -#endif }; virtual ~TizenRenderer(); @@ -49,6 +47,10 @@ class TizenRenderer { virtual void* GetWindowHandle() = 0; virtual void SetRotate(int angle) = 0; + virtual void SetGeometry(int32_t x, + int32_t y, + int32_t width, + int32_t height) = 0; virtual void ResizeWithRotation(int32_t x, int32_t y, int32_t width, diff --git a/shell/platform/tizen/tizen_renderer_ecore_wl2.h b/shell/platform/tizen/tizen_renderer_ecore_wl2.h index fd859ca43a74b..c9316d68b533e 100644 --- a/shell/platform/tizen/tizen_renderer_ecore_wl2.h +++ b/shell/platform/tizen/tizen_renderer_ecore_wl2.h @@ -38,13 +38,16 @@ class TizenRendererEcoreWl2 : public TizenRenderer { uintptr_t GetWindowId() override; void* GetWindowHandle() override; + void SetRotate(int angle) override; + void SetGeometry(int32_t x, + int32_t y, + int32_t width, + int32_t height) override; void ResizeWithRotation(int32_t x, int32_t y, int32_t width, int32_t height, int32_t angle) override; - void SetRotate(int angle) override; - void SetGeometry(int32_t x, int32_t y, int32_t width, int32_t height); void SetPreferredOrientations(const std::vector& rotations) override; bool IsSupportedExtention(const char* name) override; diff --git a/shell/platform/tizen/tizen_renderer_evas_gl.cc b/shell/platform/tizen/tizen_renderer_evas_gl.cc index 50f071ca1af61..445c8d6bcd2ec 100644 --- a/shell/platform/tizen/tizen_renderer_evas_gl.cc +++ b/shell/platform/tizen/tizen_renderer_evas_gl.cc @@ -739,6 +739,13 @@ void TizenRendererEvasGL::SetRotate(int angle) { received_rotation_ = true; } +void TizenRendererEvasGL::SetGeometry(int32_t x, + int32_t y, + int32_t width, + int32_t height) { + FT_UNIMPLEMENTED(); +} + void TizenRendererEvasGL::ResizeWithRotation(int32_t x, int32_t y, int32_t width, diff --git a/shell/platform/tizen/tizen_renderer_evas_gl.h b/shell/platform/tizen/tizen_renderer_evas_gl.h index 4806e63954fb0..22f868cc44173 100644 --- a/shell/platform/tizen/tizen_renderer_evas_gl.h +++ b/shell/platform/tizen/tizen_renderer_evas_gl.h @@ -36,12 +36,16 @@ class TizenRendererEvasGL : public TizenRenderer { uintptr_t GetWindowId() override; void* GetWindowHandle() override; + void SetRotate(int angle) override; + void SetGeometry(int32_t x, + int32_t y, + int32_t width, + int32_t height) override; void ResizeWithRotation(int32_t x, int32_t y, int32_t width, int32_t height, int32_t angle) override; - void SetRotate(int angle) override; void SetPreferredOrientations(const std::vector& rotations) override; bool IsSupportedExtention(const char* name) override; From 4a95961d19d9bf6a5a244323ece3f4b14ff06b04 Mon Sep 17 00:00:00 2001 From: Hakkyu Kim Date: Tue, 2 Nov 2021 22:55:47 +0900 Subject: [PATCH 5/7] Finish resolving previous conflict --- shell/platform/tizen/flutter_tizen_engine.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/shell/platform/tizen/flutter_tizen_engine.cc b/shell/platform/tizen/flutter_tizen_engine.cc index 673838734e18f..eba5f274f4f2b 100644 --- a/shell/platform/tizen/flutter_tizen_engine.cc +++ b/shell/platform/tizen/flutter_tizen_engine.cc @@ -90,7 +90,8 @@ void FlutterTizenEngine::InitializeRenderer(int32_t x, int32_t width, int32_t height, bool transparent, - bool focusable) { + bool focusable, + bool top_level) { TizenRenderer::Geometry geometry = {x, y, width, height}; #ifdef TIZEN_RENDERER_EVAS_GL From 5edc8368dbe85cb4e8df9ccbd3b56e61ae0fe858 Mon Sep 17 00:00:00 2001 From: Hakkyu Kim Date: Wed, 3 Nov 2021 11:20:14 +0900 Subject: [PATCH 6/7] Suppress unused private field warning Also: - Add `explicit` to `WindowChannel` constructor. - Disable `OnGeometryChange` for evas_gl. - Remove unused include. --- .../platform/tizen/channels/window_channel.cc | 18 +++--------------- shell/platform/tizen/channels/window_channel.h | 12 +++--------- shell/platform/tizen/flutter_tizen_engine.cc | 11 +++++------ 3 files changed, 11 insertions(+), 30 deletions(-) diff --git a/shell/platform/tizen/channels/window_channel.cc b/shell/platform/tizen/channels/window_channel.cc index 3c0b1221e8ca6..418cea93913ac 100644 --- a/shell/platform/tizen/channels/window_channel.cc +++ b/shell/platform/tizen/channels/window_channel.cc @@ -2,14 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunused-private-field" #include "window_channel.h" - -#include +#pragma clang diagnostic pop #include "flutter/shell/platform/common/client_wrapper/include/flutter/standard_method_codec.h" #include "flutter/shell/platform/tizen/channels/encodable_value_holder.h" #include "flutter/shell/platform/tizen/logger.h" - namespace flutter { namespace { @@ -18,17 +18,6 @@ constexpr char kChannelName[] = "tizen/internal/window"; } // namespace -#ifdef TIZEN_RENDERER_EVAS_GL -WindowChannel::WindowChannel(BinaryMessenger* messenger, - TizenRenderer* renderer) - : renderer_(renderer) { - channel_ = std::make_unique>( - messenger, kChannelName, &StandardMethodCodec::GetInstance()); - channel_->SetMethodCallHandler([this](const auto& call, auto result) { - this->HandleMethodCall(call, std::move(result)); - }); -} -#else WindowChannel::WindowChannel(BinaryMessenger* messenger, TizenRenderer* renderer, TizenRenderer::Delegate* delegate) @@ -39,7 +28,6 @@ WindowChannel::WindowChannel(BinaryMessenger* messenger, this->HandleMethodCall(call, std::move(result)); }); } -#endif WindowChannel::~WindowChannel() {} diff --git a/shell/platform/tizen/channels/window_channel.h b/shell/platform/tizen/channels/window_channel.h index 717731ec4893c..a052f47c6f232 100644 --- a/shell/platform/tizen/channels/window_channel.h +++ b/shell/platform/tizen/channels/window_channel.h @@ -16,13 +16,9 @@ namespace flutter { class WindowChannel { public: -#ifdef TIZEN_RENDERER_EVAS_GL - WindowChannel(BinaryMessenger* messenger, TizenRenderer* renderer); -#else - WindowChannel(BinaryMessenger* messenger, - TizenRenderer* renderer, - TizenRenderer::Delegate* delegate); -#endif + explicit WindowChannel(BinaryMessenger* messenger, + TizenRenderer* renderer, + TizenRenderer::Delegate* delegate); virtual ~WindowChannel(); private: @@ -34,9 +30,7 @@ class WindowChannel { // A reference to the renderer object managed by FlutterTizenEngine. // This can be nullptr if the engine is running in headless mode. TizenRenderer* renderer_; -#ifndef TIZEN_RENDERER_EVAS_GL TizenRenderer::Delegate* delegate_; -#endif }; } // namespace flutter diff --git a/shell/platform/tizen/flutter_tizen_engine.cc b/shell/platform/tizen/flutter_tizen_engine.cc index eba5f274f4f2b..b5abfa2bbef90 100644 --- a/shell/platform/tizen/flutter_tizen_engine.cc +++ b/shell/platform/tizen/flutter_tizen_engine.cc @@ -268,14 +268,9 @@ bool FlutterTizenEngine::RunEngine(const char* entrypoint) { internal_plugin_registrar_->messenger(), std::make_unique(this)); #ifndef __X64_SHELL__ -#ifdef TIZEN_RENDERER_EVAS_GL - window_channel_ = std::make_unique( - internal_plugin_registrar_->messenger(), renderer_.get()); -#else window_channel_ = std::make_unique( internal_plugin_registrar_->messenger(), renderer_.get(), this); -#endif // TIZEN_RENDERER_EVAS_GL -#endif // !__X64_SHELL__ +#endif key_event_handler_ = std::make_unique(this); touch_event_handler_ = std::make_unique(this); @@ -425,12 +420,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, From 392298838aa1ae10734471f5ecd3e52381e30b8e Mon Sep 17 00:00:00 2001 From: Hakkyu Kim Date: Wed, 3 Nov 2021 15:18:46 +0900 Subject: [PATCH 7/7] Explicitly initialize with zeros --- shell/platform/tizen/channels/window_channel.cc | 1 + shell/platform/tizen/tizen_renderer_ecore_wl2.cc | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/shell/platform/tizen/channels/window_channel.cc b/shell/platform/tizen/channels/window_channel.cc index 418cea93913ac..9bf430af56d3e 100644 --- a/shell/platform/tizen/channels/window_channel.cc +++ b/shell/platform/tizen/channels/window_channel.cc @@ -10,6 +10,7 @@ #include "flutter/shell/platform/common/client_wrapper/include/flutter/standard_method_codec.h" #include "flutter/shell/platform/tizen/channels/encodable_value_holder.h" #include "flutter/shell/platform/tizen/logger.h" + namespace flutter { namespace { diff --git a/shell/platform/tizen/tizen_renderer_ecore_wl2.cc b/shell/platform/tizen/tizen_renderer_ecore_wl2.cc index e1cc46a506d79..89d72425bad00 100644 --- a/shell/platform/tizen/tizen_renderer_ecore_wl2.cc +++ b/shell/platform/tizen/tizen_renderer_ecore_wl2.cc @@ -214,7 +214,7 @@ TizenRenderer::Geometry TizenRendererEcoreWl2::GetWindowGeometry() { } TizenRenderer::Geometry TizenRendererEcoreWl2::GetScreenGeometry() { - Geometry result; + Geometry result = {}; ecore_wl2_display_screen_size_get(ecore_wl2_display_, &result.w, &result.h); return result; }