self.TouchedSignal().Connect(this, &WebView::OnTouchEvent);
self.HoveredSignal().Connect(this, &WebView::OnHoverEvent);
self.WheelEventSignal().Connect(this, &WebView::OnWheelEvent);
- Dali::DevelActor::VisibilityChangedSignal(self).Connect(this, &WebView::OnVisibilityChanged);
-
- mWebViewVisibleState |= WebViewVisibleStateFlag::SELF_SHOW;
+ self.InheritedVisibilityChangedSignal().Connect(this, &WebView::OnInheritedVisibilityChanged);
mPositionUpdateNotification = self.AddPropertyNotification(Actor::Property::WORLD_POSITION, StepCondition(1.0f, 1.0f));
mSizeUpdateNotification = self.AddPropertyNotification(Actor::Property::SIZE, StepCondition(1.0f, 1.0f));
SetDisplayArea(displayArea);
}
-void WebView::OnVisibilityChanged(Actor actor, bool isVisible, Dali::DevelActor::VisibilityChange::Type type)
-{
- if(type == Dali::DevelActor::VisibilityChange::Type::SELF)
- {
- if(isVisible)
- {
- mWebViewVisibleState |= WebViewVisibleStateFlag::SELF_SHOW;
- }
- else
- {
- mWebViewVisibleState &= ~WebViewVisibleStateFlag::SELF_SHOW;
- }
- }
- else if(type == Dali::DevelActor::VisibilityChange::Type::PARENT)
- {
- if(isVisible)
- {
- mWebViewVisibleState |= WebViewVisibleStateFlag::PARENT_SHOW;
- // TODO : We should consider double-hide called from parent
- }
- else
- {
- mWebViewVisibleState &= ~WebViewVisibleStateFlag::PARENT_SHOW;
- }
- }
- ApplyVisibilityCheck();
-}
-
-void WebView::OnWindowVisibilityChanged(Window window, bool visible)
+void WebView::OnInheritedVisibilityChanged(Actor actor, bool isVisible)
{
- if(visible)
- {
- mWebViewVisibleState |= WebViewVisibleStateFlag::WINDOW_SHOW;
- }
- else
- {
- mWebViewVisibleState &= ~WebViewVisibleStateFlag::WINDOW_SHOW;
- }
- ApplyVisibilityCheck();
+ SetVisibility(isVisible);
}
void WebView::OnScreenshotCaptured(Dali::PixelData pixel)
void WebView::OnSceneConnection(int depth)
{
- mWebViewVisibleState |= WebViewVisibleStateFlag::SCENE_ON;
- mWebViewVisibleState |= WebViewVisibleStateFlag::PARENT_SHOW;
- // TODO : We should consider already hided parent
- Window window = DevelWindow::Get(Self());
- if(window)
- {
- // Hold the weak handle of the placement window.
- mPlacementWindow = window;
- if(window.IsVisible())
- {
- mWebViewVisibleState |= WebViewVisibleStateFlag::WINDOW_SHOW;
- }
- else
- {
- mWebViewVisibleState &= ~WebViewVisibleStateFlag::WINDOW_SHOW;
- }
- DevelWindow::VisibilityChangedSignal(window).Connect(this, &WebView::OnWindowVisibilityChanged);
- }
- ApplyVisibilityCheck();
Control::OnSceneConnection(depth);
EnableBlendMode(!mVideoHoleEnabled);
}
void WebView::OnSceneDisconnection()
{
- mWebViewVisibleState &= ~WebViewVisibleStateFlag::SCENE_ON;
- mWebViewVisibleState &= ~WebViewVisibleStateFlag::WINDOW_SHOW;
- mWebViewVisibleState &= ~WebViewVisibleStateFlag::PARENT_SHOW;
- Window window = mPlacementWindow.GetHandle();
- if(window)
- {
- DevelWindow::VisibilityChangedSignal(window).Disconnect(this, &WebView::OnWindowVisibilityChanged);
- mPlacementWindow.Reset();
- }
- ApplyVisibilityCheck();
Control::OnSceneDisconnection();
}
return mWebEngine ? mWebEngine.SetVisibility(visible) : false;
}
-void WebView::ApplyVisibilityCheck()
-{
- SetVisibility(mWebViewVisibleState == WebViewVisibleStateFlag::VISIBLE);
-}
-
WebView::WebViewAccessible::WebViewAccessible(Dali::Actor self, Dali::WebEngine& webEngine)
: ControlAccessible(self),
mRemoteChild{},
/**
* @brief Callback function to be called when visibility is changed.
- * @param[in] actor The actor, or child of actor, whose visibility has changed
+ * @param[in] actor The actor, whose inherit visibility has changed
* @param[in] isVisible Whether the actor is now visible or not
- * @param[in] type, Whether the actor's visible property has changed or a parent's
*/
- void OnVisibilityChanged(Actor actor, bool isVisible, Dali::DevelActor::VisibilityChange::Type type);
-
- /**
- * @brief Callback when the visibility of the window is changed.
- * @param[in] window The window whose visibility has changed
- * @param[in] visible Whether the window is now visible or not
- */
- void OnWindowVisibilityChanged(Window window, bool visible);
+ void OnInheritedVisibilityChanged(Actor actor, bool isVisible);
/**
* @brief callback for screen shot captured.
*/
void SetDisplayArea(const Dali::Rect<int32_t>& displayArea);
- /**
- * @brief Apply self visibility state and send visibility chagend to web engine.
- */
- void ApplyVisibilityCheck();
-
protected:
class WebViewAccessible : public DevelControl::ControlAccessible
{
uint32_t mLastRenderedNativeImageWidth;
uint32_t mLastRenderedNativeImageHeight;
- enum WebViewVisibleStateFlag
- {
- NONE = 0,
- SCENE_ON = 1 << 0,
- WINDOW_SHOW = 1 << 1,
- SELF_SHOW = 1 << 2,
- PARENT_SHOW = 1 << 3,
-
- VISIBLE = SCENE_ON | WINDOW_SHOW | SELF_SHOW | PARENT_SHOW,
- };
- uint32_t mWebViewVisibleState{WebViewVisibleStateFlag::NONE}; /// Flag of web view visible.
- WeakHandle<Window> mPlacementWindow;
-
std::unique_ptr<Dali::Toolkit::WebSettings> mWebSettings;
std::unique_ptr<Dali::Toolkit::WebBackForwardList> mWebBackForwardList;