[M94 Migration] Add overscrolled related callbacks 08/268808/1
authorSurya Kumar <surya.kumar7@samsung.com>
Wed, 8 Dec 2021 12:20:08 +0000 (17:50 +0530)
committerSurya Kumar <surya.kumar7@samsung.com>
Mon, 3 Jan 2022 08:02:56 +0000 (13:32 +0530)
This patch adds overscrolled callbacks:
- overscrolled,left
- overscrolled,right
- overscrolled,top
- overscrolled,bottom

They will be invoked when overscroll occurs for specific element.

Cherry-picked from: https://review.tizen.org/gerrit/267677

Change-Id: Ia468853088a7068601d7d9672b29370b8dbeab04
Signed-off-by: Surya Kumar <surya.kumar7@samsung.com>
tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.cc
tizen_src/chromium_impl/content/browser/web_contents/web_contents_view_efl.cc
tizen_src/chromium_impl/content/browser/web_contents/web_contents_view_efl.h
tizen_src/chromium_impl/content/public/browser/web_contents_view_efl_delegate.h
tizen_src/ewk/efl_integration/eweb_view.cc
tizen_src/ewk/efl_integration/eweb_view.h
tizen_src/ewk/efl_integration/eweb_view_callbacks.h
tizen_src/ewk/efl_integration/web_contents_view_efl_delegate_ewk.cc
tizen_src/ewk/efl_integration/web_contents_view_efl_delegate_ewk.h

index c970f26..be9a00b 100644 (file)
@@ -983,6 +983,13 @@ void RenderWidgetHostViewEfl::SetNeedsBeginFrames(bool needs_begin_frames) {
 
 void RenderWidgetHostViewEfl::DidOverscroll(
     const ui::DidOverscrollParams& params) {
+  auto* web_contents_impl = static_cast<WebContentsImpl*>(&web_contents_);
+  if (auto* wcve =
+          static_cast<WebContentsViewEfl*>(web_contents_impl->GetView())) {
+    wcve->OnOverscrolled(params.accumulated_overscroll,
+                         params.latest_overscroll_delta);
+  }
+
   const gfx::Vector2dF& accumulated_overscroll = params.accumulated_overscroll;
   const gfx::Vector2dF& latest_overscroll_delta =
       params.latest_overscroll_delta;
index 605fbd8..3810387 100644 (file)
@@ -373,4 +373,12 @@ bool WebContentsViewEfl::UseKeyPadWithoutUserAction() {
   return false;
 }
 
+void WebContentsViewEfl::OnOverscrolled(
+    const gfx::Vector2dF& accumulated_overscroll,
+    const gfx::Vector2dF& latest_overscroll_delta) {
+  if (efl_delegate_)
+    efl_delegate_->OnOverscrolled(accumulated_overscroll,
+                                  latest_overscroll_delta);
+}
+
 }  // namespace content
index 24b19a8..5d6643e 100644 (file)
@@ -95,6 +95,9 @@ class CONTENT_EXPORT WebContentsViewEfl
 
   bool UseKeyPadWithoutUserAction();
 
+  void OnOverscrolled(const gfx::Vector2dF& accumulated_overscroll,
+                      const gfx::Vector2dF& latest_overscroll_delta);
+
 private:
   // Our optional, generic views wrapper.
   std::unique_ptr<WebContentsViewDelegate> delegate_;
index 5d19bd5..71bb716 100644 (file)
@@ -46,6 +46,10 @@ class WebContentsViewEflDelegate {
 
   virtual void OrientationLock(device::mojom::ScreenOrientationLockType) = 0;
   virtual void OrientationUnlock() = 0;
+
+  virtual void OnOverscrolled(
+      const gfx::Vector2dF& accumulated_overscroll,
+      const gfx::Vector2dF& latest_overscroll_delta) = 0;
 };
 
 } // namespace content
index 52b66e3..401c454 100644 (file)
 #include "base/strings/utf_string_conversions.h"
 #include "browser/navigation_policy_handler_efl.h"
 #include "browser/quota_permission_context_efl.h"
+#include "browser/selectpicker/popup_menu_item.h"
+#include "browser/selectpicker/popup_menu_item_private.h"
 #include "browser/web_view_browser_message_filter.h"
+#include "browser/web_view_evas_handler.h"
 #include "common/content_client_efl.h"
 #include "common/render_messages_ewk.h"
 #include "common/version_info.h"
 #include "tizen/system_info.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/display/screen.h"
+#include "ui/gfx/geometry/vector2d_f.h"
 #include "web_contents_delegate_efl.h"
 #include "web_contents_efl_delegate_ewk.h"
 #include "web_contents_view_efl_delegate_ewk.h"
 
-#include "browser/web_view_evas_handler.h"
-
-#include "browser/selectpicker/popup_menu_item.h"
-#include "browser/selectpicker/popup_menu_item_private.h"
 #include <Ecore_Evas.h>
 #include <Elementary.h>
 #include <Eina.h>
@@ -2443,3 +2443,19 @@ void EWebView::ClosePage() {
   web_contents_->ClosePage();
 }
 
+void EWebView::OnOverscrolled(const gfx::Vector2dF& accumulated_overscroll,
+                              const gfx::Vector2dF& latest_overscroll_delta) {
+  const gfx::Vector2dF old_overscroll =
+      accumulated_overscroll - latest_overscroll_delta;
+
+  if (latest_overscroll_delta.x() && !old_overscroll.x()) {
+    latest_overscroll_delta.x() < 0
+        ? SmartCallback<EWebViewCallbacks::OverscrolledLeft>().call()
+        : SmartCallback<EWebViewCallbacks::OverscrolledRight>().call();
+  }
+  if (latest_overscroll_delta.y() && !old_overscroll.y()) {
+    latest_overscroll_delta.y() < 0
+        ? SmartCallback<EWebViewCallbacks::OverscrolledTop>().call()
+        : SmartCallback<EWebViewCallbacks::OverscrolledBottom>().call();
+  }
+}
index b4abe90..6f46f2f 100644 (file)
@@ -480,6 +480,9 @@ class EWebView {
 
   void SyncAcceptLanguages(const std::string& accept_languages);
 
+  void OnOverscrolled(const gfx::Vector2dF& accumulated_overscroll,
+                      const gfx::Vector2dF& latest_overscroll_delta);
+
  private:
   void InitializeContent();
   void SendDelayedMessages(content::RenderViewHost* render_view_host);
index 95aac0b..c4eaca4 100644 (file)
@@ -111,6 +111,10 @@ enum CallbackType {
   EdgeRight,
   EdgeTop,
   EdgeBottom,
+  OverscrolledLeft,
+  OverscrolledRight,
+  OverscrolledTop,
+  OverscrolledBottom,
   TextStyleState,
   TextSelectionMode,
   SaveSessionData,
@@ -253,6 +257,10 @@ DECLARE_EWK_VIEW_CALLBACK(EdgeLeft, "edge,left", void);
 DECLARE_EWK_VIEW_CALLBACK(EdgeTop, "edge,top", void);
 DECLARE_EWK_VIEW_CALLBACK(EdgeBottom, "edge,bottom", void);
 DECLARE_EWK_VIEW_CALLBACK(EdgeRight, "edge,right", void);
+DECLARE_EWK_VIEW_CALLBACK(OverscrolledLeft, "overscrolled,left", void);
+DECLARE_EWK_VIEW_CALLBACK(OverscrolledRight, "overscrolled,right", void);
+DECLARE_EWK_VIEW_CALLBACK(OverscrolledTop, "overscrolled,top", void);
+DECLARE_EWK_VIEW_CALLBACK(OverscrolledBottom, "overscrolled,bottom", void);
 DECLARE_EWK_VIEW_CALLBACK(TextStyleState, "text,style,state", _Ewk_Text_Style*);
 DECLARE_EWK_VIEW_CALLBACK(SaveSessionData, "save,session,data", void);
 DECLARE_EWK_VIEW_CALLBACK(UndoSize, "undo,size", size_t*);
index 68d1b5f..1838af0 100644 (file)
@@ -3,9 +3,9 @@
 // found in the LICENSE file.
 
 #include "web_contents_view_efl_delegate_ewk.h"
-#include "ewk/efl_integration/private/webview_delegate_ewk.h"
 
 #include "eweb_view.h"
+#include "ewk/efl_integration/private/webview_delegate_ewk.h"
 
 WebContentsViewEflDelegateEwk::WebContentsViewEflDelegateEwk(EWebView* wv)
     : web_view_(wv) {
@@ -82,3 +82,9 @@ void WebContentsViewEflDelegateEwk::OrientationLock(
 void WebContentsViewEflDelegateEwk::OrientationUnlock() {
   WebViewDelegateEwk::GetInstance().RequestHandleOrientationUnlock(web_view_);
 }
+
+void WebContentsViewEflDelegateEwk::OnOverscrolled(
+    const gfx::Vector2dF& accumulated_overscroll,
+    const gfx::Vector2dF& latest_overscroll_delta) {
+  web_view_->OnOverscrolled(accumulated_overscroll, latest_overscroll_delta);
+}
index e9371ef..6330b27 100644 (file)
@@ -46,6 +46,9 @@ class WebContentsViewEflDelegateEwk
   virtual void OrientationUnlock() override;
 
  private:
+  void OnOverscrolled(const gfx::Vector2dF& accumulated_overscroll,
+                      const gfx::Vector2dF& latest_overscroll_delta) override;
+
   EWebView* web_view_;
 };