[Tizen] Support scroll in web engine plugin. 63/251663/1
authorhuayong.xu <huayong.xu@samsung.com>
Tue, 5 Jan 2021 07:03:52 +0000 (15:03 +0800)
committerJiyun Yang <ji.yang@samsung.com>
Mon, 18 Jan 2021 07:27:25 +0000 (16:27 +0900)
Some APIs related to scroll are supported.

Change-Id: I1767673dcd73c3bb0671966d10c7ac2c5be89c3d

dali-extension/web-engine-chromium/tizen-web-engine-chromium.cpp [changed mode: 0644->0755]
dali-extension/web-engine-chromium/tizen-web-engine-chromium.h [changed mode: 0644->0755]
dali-extension/web-engine-lwe/tizen-web-engine-lwe.cpp
dali-extension/web-engine-lwe/tizen-web-engine-lwe.h [changed mode: 0644->0755]

old mode 100644 (file)
new mode 100755 (executable)
index b1deae6..e7eaa06
@@ -155,6 +155,18 @@ public:
     evas_object_smart_callback_add( mWebView, "console,message",
                                     &WebViewContainerForDali::OnConsoleMessage,
                                     this );
+    evas_object_smart_callback_add( mWebView, "edge,left",
+                                    &WebViewContainerForDali::OnEdgeLeft,
+                                    &mClient );
+    evas_object_smart_callback_add( mWebView, "edge,right",
+                                    &WebViewContainerForDali::OnEdgeRight,
+                                    &mClient );
+    evas_object_smart_callback_add( mWebView, "edge,top",
+                                    &WebViewContainerForDali::OnEdgeTop,
+                                    &mClient );
+    evas_object_smart_callback_add( mWebView, "edge,bottom",
+                                    &WebViewContainerForDali::OnEdgeBottom,
+                                    &mClient );
 
     evas_object_resize( mWebView, mWidth, mHeight );
     evas_object_show( mWebView );
@@ -195,6 +207,31 @@ public:
     ewk_view_resume( mWebView );
   }
 
+  void ScrollBy( int deltaX, int deltaY )
+  {
+    ewk_view_scroll_by( mWebView, deltaX, deltaY );
+  }
+
+  void SetScrollPosition( int x, int y )
+  {
+    ewk_view_scroll_set( mWebView, x, y );
+  }
+
+  void GetScrollPosition( int& x, int& y ) const
+  {
+    ewk_view_scroll_pos_get( mWebView, &x, &y );
+  }
+
+  void GetScrollSize( int& width, int& height ) const
+  {
+    ewk_view_scroll_size_get( mWebView, &width, &height );
+  }
+
+  void GetContentSize( int& width, int& height ) const
+  {
+    ewk_view_contents_size_get( mWebView, &width, &height );
+  }
+
   void GoBack()
   {
     ewk_view_back( mWebView );
@@ -437,6 +474,30 @@ private:
         ewk_console_message_text_get( message ) );
   }
 
+  static void OnEdgeLeft( void* data, Evas_Object*, void* )
+  {
+    auto client = static_cast<WebViewContainerClient*>( data );
+    client->ScrollEdgeReached( Dali::WebEnginePlugin::ScrollEdge::LEFT );
+  }
+
+  static void OnEdgeRight( void* data, Evas_Object*, void* )
+  {
+    auto client = static_cast<WebViewContainerClient*>( data );
+    client->ScrollEdgeReached( Dali::WebEnginePlugin::ScrollEdge::RIGHT );
+  }
+
+  static void OnEdgeTop( void* data, Evas_Object*, void* )
+  {
+    auto client = static_cast<WebViewContainerClient*>( data );
+    client->ScrollEdgeReached( Dali::WebEnginePlugin::ScrollEdge::TOP );
+  }
+
+  static void OnEdgeBottom( void* data, Evas_Object*, void* )
+  {
+    auto client = static_cast<WebViewContainerClient*>( data );
+    client->ScrollEdgeReached( Dali::WebEnginePlugin::ScrollEdge::BOTTOM );
+  }
+
   static void OnEvaluateJavaScript( Evas_Object* o, const char* result, void* data )
   {
     auto client = WebEngineManager::Get().FindContainerClient( o );
@@ -593,6 +654,46 @@ void TizenWebEngineChromium::Resume()
   }
 }
 
+void TizenWebEngineChromium::ScrollBy( int deltaX, int deltaY )
+{
+  if( mWebViewContainer )
+  {
+    mWebViewContainer->ScrollBy( deltaX, deltaY );
+  }
+}
+
+void TizenWebEngineChromium::SetScrollPosition( int x, int y )
+{
+  if( mWebViewContainer )
+  {
+    mWebViewContainer->SetScrollPosition( x, y );
+  }
+}
+
+void TizenWebEngineChromium::GetScrollPosition(int& x, int& y) const
+{
+  if( mWebViewContainer )
+  {
+    mWebViewContainer->GetScrollPosition( x, y );
+  }
+}
+
+void TizenWebEngineChromium::GetScrollSize( int& width, int& height ) const
+{
+  if( mWebViewContainer )
+  {
+    mWebViewContainer->GetScrollSize( width, height );
+  }
+}
+
+void TizenWebEngineChromium::GetContentSize( int& width, int& height ) const
+{
+  if( mWebViewContainer )
+  {
+    mWebViewContainer->GetContentSize( width, height );
+  }
+}
+
 bool TizenWebEngineChromium::CanGoForward()
 {
   if( mWebViewContainer )
@@ -859,6 +960,11 @@ Dali::WebEnginePlugin::WebEnginePageLoadErrorSignalType& TizenWebEngineChromium:
   return mLoadErrorSignal;
 }
 
+Dali::WebEnginePlugin::WebEngineScrollEdgeReachedSignalType& TizenWebEngineChromium::ScrollEdgeReachedSignal()
+{
+  return mScrollEdgeReachedSignal;
+}
+
 // WebViewContainerClient Interface
 void TizenWebEngineChromium::UpdateImage( tbm_surface_h buffer )
 {
@@ -890,6 +996,12 @@ void TizenWebEngineChromium::LoadError( const char* url, int errorCode )
   mLoadErrorSignal.Emit( stdUrl, errorCode );
 }
 
+void TizenWebEngineChromium::ScrollEdgeReached( Dali::WebEnginePlugin::ScrollEdge edge )
+{
+  DALI_LOG_RELEASE_INFO( "#ScrollEdgeReached : %d\n", edge );
+  mScrollEdgeReachedSignal.Emit( edge );
+}
+
 void TizenWebEngineChromium::RunJavaScriptEvaluationResultHandler( size_t key, const char* result )
 {
   auto handler = mJavaScriptEvaluationResultHandlers.find( key );
old mode 100644 (file)
new mode 100755 (executable)
index bcaeed2..1d6d78f
@@ -66,6 +66,12 @@ public:
   virtual void LoadError( const char* url, int errorCode ) = 0;
 
   /**
+   * @brief Callback function to be called by WebViewContainer when scroll edge is reached.
+   * @param [in] e Scroll edge reached.
+   */
+  virtual void ScrollEdgeReached( Dali::WebEnginePlugin::ScrollEdge edge ) = 0;
+
+  /**
    * @brief Callback function to be called by WebViewContainer when it gets JavaScript evalution result.
    * @param [in] key An unsigned integer representing the result handler
    * @param [in] result Result string from JavaScript runtime
@@ -157,6 +163,31 @@ public:
   void Resume() override;
 
   /**
+   * @copydoc Dali::WebEnginePlugin::ScrollBy()
+   */
+  void ScrollBy( int deltaX, int deltaY ) override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::SetScrollPosition()
+   */
+  void SetScrollPosition( int x, int y ) override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::GetScrollPosition()
+   */
+  void GetScrollPosition( int& x, int& y ) const override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::GetScrollSize()
+   */
+  void GetScrollSize( int& width, int& height ) const override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::GetContentSize()
+   */
+  void GetContentSize( int& width, int& height ) const override;
+
+  /**
    * @copydoc Dali::WebEnginePlugin::CanGoForward()
    */
   bool CanGoForward() override;
@@ -306,6 +337,11 @@ public:
    */
   Dali::WebEnginePlugin::WebEnginePageLoadErrorSignalType& PageLoadErrorSignal() override;
 
+  /**
+   * @copydoc Dali::WebEnginePlugin::ScrollEdgeReachedSignal()
+   */
+  Dali::WebEnginePlugin::WebEngineScrollEdgeReachedSignalType& ScrollEdgeReachedSignal() override;
+
 
   // WebViewContainerClient Interface
 
@@ -331,6 +367,11 @@ public:
   void LoadError( const char* url, int errorCode ) override;
 
   /**
+   * @copydoc Dali::Plugin::WebViewContainerClient::ScrollEdgeReached()
+   */
+  void ScrollEdgeReached( Dali::WebEnginePlugin::ScrollEdge edge ) override;
+
+  /**
    * @copydoc Dali::Plugin::WebViewContainerClient::RunJavaScriptEvaluationResultHandler()
    */
   void RunJavaScriptEvaluationResultHandler( size_t key, const char* result ) override;
@@ -351,6 +392,8 @@ private:
   Dali::WebEnginePlugin::WebEnginePageLoadSignalType      mLoadFinishedSignal;
   Dali::WebEnginePlugin::WebEnginePageLoadErrorSignalType mLoadErrorSignal;
 
+  Dali::WebEnginePlugin::WebEngineScrollEdgeReachedSignalType mScrollEdgeReachedSignal;
+
   std::unordered_map< size_t, JavaScriptCallback >        mJavaScriptEvaluationResultHandlers;
   std::unordered_map< std::string, JavaScriptCallback >   mJavaScriptMessageHandlers;
 };
index 4d4ef0b..1523311 100644 (file)
@@ -541,6 +541,31 @@ void TizenWebEngineLWE::Resume()
   // NOT IMPLEMENTED
 }
 
+void TizenWebEngineLWE::ScrollBy( int deltaX, int deltaY )
+{
+  // NOT IMPLEMENTED
+}
+
+void TizenWebEngineLWE::SetScrollPosition( int x, int y )
+{
+  // NOT IMPLEMENTED
+}
+
+void TizenWebEngineLWE::GetScrollPosition(int& x, int& y) const
+{
+  // NOT IMPLEMENTED
+}
+
+void TizenWebEngineLWE::GetScrollSize( int& width, int& height ) const
+{
+  // NOT IMPLEMENTED
+}
+
+void TizenWebEngineLWE::GetContentSize( int& width, int& height ) const
+{
+  // NOT IMPLEMENTED
+}
+
 void TizenWebEngineLWE::GoBack()
 {
   DALI_ASSERT_ALWAYS( mWebContainer );
old mode 100644 (file)
new mode 100755 (executable)
index 1921d21..21be27d
@@ -113,6 +113,31 @@ public:
   void Resume() override;
 
   /**
+   * @copydoc Dali::WebEnginePlugin::ScrollBy()
+   */
+  void ScrollBy( int deltaX, int deltaY ) override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::SetScrollPosition()
+   */
+  void SetScrollPosition( int x, int y ) override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::GetScrollPosition()
+   */
+  void GetScrollPosition( int& x, int& y ) const override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::GetScrollSize()
+   */
+  void GetScrollSize( int& width, int& height ) const override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::GetContentSize()
+   */
+  void GetContentSize( int& width, int& height ) const override;
+
+  /**
    * @copydoc Dali::WebEnginePlugin::GoBack()
    */
   void GoBack() override;
@@ -271,6 +296,14 @@ public:
     return mPageLoadErrorSignal;
   }
 
+  /**
+   * @copydoc Dali::WebEnginePlugin::ScrollEdgeReachedSignal()
+   */
+  Dali::WebEnginePlugin::WebEngineScrollEdgeReachedSignalType& ScrollEdgeReachedSignal() override
+  {
+    return mScrollEdgeReachedSignal;
+  }
+
 private:
 
   void UpdateBuffer();
@@ -318,6 +351,7 @@ private:
   Dali::WebEnginePlugin::WebEnginePageLoadSignalType      mPageLoadStartedSignal;
   Dali::WebEnginePlugin::WebEnginePageLoadSignalType      mPageLoadFinishedSignal;
   Dali::WebEnginePlugin::WebEnginePageLoadErrorSignalType mPageLoadErrorSignal;
+  Dali::WebEnginePlugin::WebEngineScrollEdgeReachedSignalType mScrollEdgeReachedSignal;
 };
 
 } // namespace Plugin