From 91167a8269ce0817bea688c3d68c1834d869c5d5 Mon Sep 17 00:00:00 2001 From: sunghyun kim Date: Tue, 23 Jan 2024 18:45:18 +0900 Subject: [PATCH] [Tizen] Apply CornerRadius for webview Change-Id: Ief9a97223cc3070633b87cf037d19b27ded32b41 --- .../internal/controls/web-view/web-view-impl.cpp | 53 ++++++++++++++++++++-- .../internal/controls/web-view/web-view-impl.h | 4 ++ 2 files changed, 53 insertions(+), 4 deletions(-) diff --git a/dali-toolkit/internal/controls/web-view/web-view-impl.cpp b/dali-toolkit/internal/controls/web-view/web-view-impl.cpp index 9f9d1fd..a202de3 100644 --- a/dali-toolkit/internal/controls/web-view/web-view-impl.cpp +++ b/dali-toolkit/internal/controls/web-view/web-view-impl.cpp @@ -52,6 +52,7 @@ #include #include #include +#include #include #include @@ -165,7 +166,9 @@ WebView::WebView(const std::string& locale, const std::string& timezoneId) mKeyEventsEnabled(true), mVisualChangeRequired(false), mScreenshotCapturedCallback{nullptr}, - mFrameRenderedCallback{nullptr} + mFrameRenderedCallback{nullptr}, + mCornerRadius(Vector4::ZERO), + mCornerRadiusPolicy(1.0f) { mWebEngine = Dali::WebEngine::New(); @@ -189,7 +192,9 @@ WebView::WebView(uint32_t argc, char** argv) mKeyEventsEnabled(true), mVisualChangeRequired(false), mScreenshotCapturedCallback{nullptr}, - mFrameRenderedCallback{nullptr} + mFrameRenderedCallback{nullptr}, + mCornerRadius(Vector4::ZERO), + mCornerRadiusPolicy(1.0f) { mWebEngine = Dali::WebEngine::New(); @@ -293,6 +298,21 @@ void WebView::OnInitialize() mSizeUpdateNotification.NotifySignal().Connect(this, &WebView::OnDisplayAreaUpdated); mScaleUpdateNotification.NotifySignal().Connect(this, &WebView::OnDisplayAreaUpdated); + // Create WebVisual for WebView + Property::Map propertyMap; + propertyMap.Insert(Dali::Toolkit::Visual::Property::TYPE, Dali::Toolkit::Visual::COLOR); + propertyMap.Insert(Dali::Toolkit::Visual::Property::MIX_COLOR, Color::TRANSPARENT); + Toolkit::Visual::Base webVisual = Toolkit::VisualFactory::Get().CreateVisual(propertyMap); + if(webVisual) + { + Dali::Toolkit::DevelControl::RegisterVisual(*this, Toolkit::WebView::Property::URL, webVisual); + } + else + { + DALI_LOG_ERROR("fail to create webVisual for CornerRadius"); + Dali::Toolkit::DevelControl::UnregisterVisual(*this, Toolkit::WebView::Property::URL); + } + if(mWebEngine) { mWebEngine.RegisterFrameRenderedCallback(std::bind(&WebView::OnFrameRendered, this)); @@ -886,8 +906,33 @@ void WebView::OnFrameRendered() mFrameRenderedCallback(); } - // Make sure that mVisual is created only if required. - if(mVisualChangeRequired || !mVisual) + // Make sure that mVisual is created only once. + if (mVisual) + return; + + // Get webVisual for checking corner radius + Toolkit::Visual::Base webVisual = Dali::Toolkit::DevelControl::GetVisual(*this, Toolkit::WebView::Property::URL); + Property::Map webMap; + webVisual.CreatePropertyMap(webMap); + Property::Value* cornerRadiusValue = webMap.Find(Dali::Toolkit::DevelVisual::Property::CORNER_RADIUS); + if(cornerRadiusValue) + { + mCornerRadius = cornerRadiusValue->Get(); + } + Property::Value* cornerRadiusValuePolicy = webMap.Find(Dali::Toolkit::DevelVisual::Property::CORNER_RADIUS_POLICY); + if(cornerRadiusValuePolicy) + { + mCornerRadiusPolicy = cornerRadiusValuePolicy->Get(); + } + + Dali::Toolkit::ImageUrl nativeImageUrl = Dali::Toolkit::Image::GenerateUrl(mWebEngine.GetNativeImageSource()); + Property::Map propertyMap; + propertyMap.Insert(Dali::Toolkit::Visual::Property::TYPE, Dali::Toolkit::Visual::IMAGE); + propertyMap.Insert(Dali::Toolkit::ImageVisual::Property::URL, nativeImageUrl.GetUrl()); + propertyMap.Insert(Dali::Toolkit::DevelVisual::Property::CORNER_RADIUS, mCornerRadius); + propertyMap.Insert(Dali::Toolkit::DevelVisual::Property::CORNER_RADIUS_POLICY, mCornerRadiusPolicy); + mVisual = Toolkit::VisualFactory::Get().CreateVisual(propertyMap); + if(mVisual) { // Reset flag mVisualChangeRequired = false; diff --git a/dali-toolkit/internal/controls/web-view/web-view-impl.h b/dali-toolkit/internal/controls/web-view/web-view-impl.h index c9d25b9..aded781 100644 --- a/dali-toolkit/internal/controls/web-view/web-view-impl.h +++ b/dali-toolkit/internal/controls/web-view/web-view-impl.h @@ -797,6 +797,10 @@ private: Dali::Toolkit::WebView::WebViewScreenshotCapturedCallback mScreenshotCapturedCallback; Dali::WebEnginePlugin::WebEngineFrameRenderedCallback mFrameRenderedCallback; + + Vector4 mCornerRadius; /// < Corner radius + float mCornerRadiusPolicy; /// < Corner radius policy + static std::unordered_map> mPluginWebViewMap; }; } // namespace Internal -- 2.7.4