From 223b4bd1238251799ea68b97f08767b5824abb94 Mon Sep 17 00:00:00 2001 From: MuHong Byun Date: Mon, 12 Jul 2021 07:31:50 +0900 Subject: [PATCH] Add native window handle to platform view (#136) * Add native window handle to platform view * This is a preparation to independently handle something (e.g. imf) in platform view. Signed-off-by: MuHong Byun --- shell/platform/tizen/flutter_tizen.cc | 1 + .../tizen/public/flutter_platform_view.h | 40 ++++++++++++------- shell/platform/tizen/tizen_renderer.h | 1 + .../tizen/tizen_renderer_ecore_wl2.cc | 4 ++ .../platform/tizen/tizen_renderer_ecore_wl2.h | 1 + .../platform/tizen/tizen_renderer_evas_gl.cc | 4 ++ shell/platform/tizen/tizen_renderer_evas_gl.h | 1 + 7 files changed, 37 insertions(+), 15 deletions(-) diff --git a/shell/platform/tizen/flutter_tizen.cc b/shell/platform/tizen/flutter_tizen.cc index bfb29faa2a32c..e43a79d552de8 100644 --- a/shell/platform/tizen/flutter_tizen.cc +++ b/shell/platform/tizen/flutter_tizen.cc @@ -143,6 +143,7 @@ void FlutterRegisterViewFactory( FlutterDesktopPluginRegistrarRef registrar, const char* view_type, std::unique_ptr view_factory) { + view_factory->SetWindow(registrar->engine->renderer->GetWindowHandle()); registrar->engine->platform_view_channel->ViewFactories().insert( std::pair>( view_type, std::move(view_factory))); diff --git a/shell/platform/tizen/public/flutter_platform_view.h b/shell/platform/tizen/public/flutter_platform_view.h index fc2cae96ffd8e..b4540cb59e938 100644 --- a/shell/platform/tizen/public/flutter_platform_view.h +++ b/shell/platform/tizen/public/flutter_platform_view.h @@ -16,15 +16,18 @@ using ByteMessage = std::vector; class PlatformView { public: - PlatformView(flutter::PluginRegistrar* registrar, int viewId) - : registrar_(registrar), - viewId_(viewId), - textureId_(0), - isFocused_(false) {} + PlatformView(flutter::PluginRegistrar* registrar, + int view_id, + void* platform_window) + : platform_window_(platform_window), + registrar_(registrar), + view_id_(view_id), + texture_id_(0), + is_focused_(false) {} virtual ~PlatformView() {} - int GetViewId() { return viewId_; } - int GetTextureId() { return textureId_; } - void SetTextureId(int textureId) { textureId_ = textureId; } + int GetViewId() { return view_id_; } + int GetTextureId() { return texture_id_; } + void SetTextureId(int texture_id) { texture_id_ = texture_id; } flutter::PluginRegistrar* GetPluginRegistrar() { return registrar_; } virtual void Dispose() = 0; virtual void Resize(double width, double height) = 0; @@ -36,8 +39,8 @@ class PlatformView { double dy) = 0; virtual void SetDirection(int direction) = 0; virtual void ClearFocus() = 0; - void SetFocus(bool f) { isFocused_ = f; } - bool IsFocused() { return isFocused_; } + void SetFocus(bool f) { is_focused_ = f; } + bool IsFocused() { return is_focused_; } // Key input event virtual void DispatchKeyDownEvent(Ecore_Event_Key* key) = 0; @@ -47,11 +50,14 @@ class PlatformView { virtual void SetSoftwareKeyboardContext(Ecore_IMF_Context* context) = 0; + protected: + void* platform_window_; + private: flutter::PluginRegistrar* registrar_; - int viewId_; - int textureId_; - bool isFocused_; + int view_id_; + int texture_id_; + bool is_focused_; }; class PlatformViewFactory { @@ -64,11 +70,15 @@ class PlatformViewFactory { const flutter::MessageCodec& GetCodec() { return codec_; } - virtual PlatformView* Create(int viewId, + virtual PlatformView* Create(int view_id, double width, double height, - const ByteMessage& createParams) = 0; + const ByteMessage& parameters) = 0; virtual void Dispose() = 0; + void SetWindow(void* platform_window) { platform_window_ = platform_window; } + + protected: + void* platform_window_; private: flutter::PluginRegistrar* registrar_; diff --git a/shell/platform/tizen/tizen_renderer.h b/shell/platform/tizen/tizen_renderer.h index f9b793cb8f37f..1866d2446891f 100644 --- a/shell/platform/tizen/tizen_renderer.h +++ b/shell/platform/tizen/tizen_renderer.h @@ -35,6 +35,7 @@ class TizenRenderer { virtual WindowGeometry GetCurrentGeometry() = 0; virtual int32_t GetDpi() = 0; virtual uintptr_t GetWindowId() = 0; + virtual void* GetWindowHandle() = 0; virtual void SetRotate(int angle) = 0; virtual void ResizeWithRotation(int32_t x, diff --git a/shell/platform/tizen/tizen_renderer_ecore_wl2.cc b/shell/platform/tizen/tizen_renderer_ecore_wl2.cc index 43dbb1a17d033..7da32c8e80615 100644 --- a/shell/platform/tizen/tizen_renderer_ecore_wl2.cc +++ b/shell/platform/tizen/tizen_renderer_ecore_wl2.cc @@ -232,6 +232,10 @@ uintptr_t TizenRendererEcoreWl2::GetWindowId() { return ecore_wl2_window_id_get(ecore_wl2_window_); } +void* TizenRendererEcoreWl2::GetWindowHandle() { + return ecore_wl2_window_; +} + bool TizenRendererEcoreWl2::InitializeRenderer() { int32_t width, height; if (!SetupDisplay(&width, &height)) { diff --git a/shell/platform/tizen/tizen_renderer_ecore_wl2.h b/shell/platform/tizen/tizen_renderer_ecore_wl2.h index 15378d5da022f..ba02d83da2e18 100644 --- a/shell/platform/tizen/tizen_renderer_ecore_wl2.h +++ b/shell/platform/tizen/tizen_renderer_ecore_wl2.h @@ -28,6 +28,7 @@ class TizenRendererEcoreWl2 : public TizenRenderer { WindowGeometry GetCurrentGeometry() override; int32_t GetDpi() override; uintptr_t GetWindowId() override; + void* GetWindowHandle() override; void ResizeWithRotation(int32_t x, int32_t y, diff --git a/shell/platform/tizen/tizen_renderer_evas_gl.cc b/shell/platform/tizen/tizen_renderer_evas_gl.cc index d742be83ec48c..820683ba3298b 100644 --- a/shell/platform/tizen/tizen_renderer_evas_gl.cc +++ b/shell/platform/tizen/tizen_renderer_evas_gl.cc @@ -568,6 +568,10 @@ uintptr_t TizenRendererEvasGL::GetWindowId() { ecore_evas_ecore_evas_get(evas_object_evas_get(evas_window_))); } +void* TizenRendererEvasGL::GetWindowHandle() { + return nullptr; +} + Evas_Object* TizenRendererEvasGL::GetImageHandle() { return graphics_adapter_; } diff --git a/shell/platform/tizen/tizen_renderer_evas_gl.h b/shell/platform/tizen/tizen_renderer_evas_gl.h index 22f00bd906f22..f470a16a34c21 100644 --- a/shell/platform/tizen/tizen_renderer_evas_gl.h +++ b/shell/platform/tizen/tizen_renderer_evas_gl.h @@ -29,6 +29,7 @@ class TizenRendererEvasGL : public TizenRenderer { WindowGeometry GetCurrentGeometry() override; int32_t GetDpi() override; uintptr_t GetWindowId() override; + void* GetWindowHandle() override; void ResizeWithRotation(int32_t x, int32_t y,