[NUI] Add OverScrolled in WebView
authordongsug.song <dongsug.song@samsung.com>
Fri, 28 Mar 2025 09:30:01 +0000 (18:30 +0900)
committerdongsug-song <35130733+dongsug-song@users.noreply.github.com>
Tue, 29 Apr 2025 08:55:44 +0000 (17:55 +0900)
src/Tizen.NUI/src/internal/Interop/Interop.WebView.cs
src/Tizen.NUI/src/internal/WebView/WebViewOverScrolledEventArgs.cs [new file with mode: 0755]
src/Tizen.NUI/src/public/WebView/WebView.cs

index d775c3a98721d8b3d8cbfd5446a2f5c11138492a..e7f94ffefba554c32314de349de6883273455751 100755 (executable)
@@ -312,6 +312,9 @@ namespace Tizen.NUI
             [DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebView_RegisterNavigationPolicyDecidedCallback")]
             public static extern void RegisterNavigationPolicyDecidedCallback(HandleRef jarg1, HandleRef jarg2);
 
+            [DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebView_RegisterOverScrolledCallback")]
+            public static extern void RegisterOverScrolledCallback(HandleRef jarg1, HandleRef jarg2);
+
             [DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebView_RegisterNewWindowPolicyDecidedCallback")]
             public static extern void RegisterNewWindowPolicyDecidedCallback(HandleRef jarg1, HandleRef jarg2);
 
diff --git a/src/Tizen.NUI/src/internal/WebView/WebViewOverScrolledEventArgs.cs b/src/Tizen.NUI/src/internal/WebView/WebViewOverScrolledEventArgs.cs
new file mode 100755 (executable)
index 0000000..68cf045
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2025 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+using System;
+using System.ComponentModel;
+
+namespace Tizen.NUI
+{
+    /// <summary>
+    /// Event arguments that passed via the WebView.OverScrolled.
+    /// </summary>
+    [EditorBrowsable(EditorBrowsableState.Never)]
+    public class WebViewOverScrolledEventArgs : EventArgs
+    {
+        internal WebViewOverScrolledEventArgs(Over e)
+        {
+            OverScrolled = e;
+        }
+
+        /// <summary>
+        /// The enumeration for over scrolled.
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public enum Over
+        {
+            [EditorBrowsable(EditorBrowsableState.Never)]
+            Left,
+
+            [EditorBrowsable(EditorBrowsableState.Never)]
+            Right,
+
+            [EditorBrowsable(EditorBrowsableState.Never)]
+            Top,
+
+            [EditorBrowsable(EditorBrowsableState.Never)]
+            Bottom,
+        }
+
+        /// <summary>
+        /// The over scolled direction, e.g. left, right, etc.
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public Over OverScrolled { get; }
+    }
+}
index 1c998ca7b06e619126102bd582783e313c8bc8ab..dc93dab4e2dfe6102adf410306a77dcc8a5417f3 100755 (executable)
@@ -103,6 +103,9 @@ namespace Tizen.NUI.BaseComponents
         private EventHandler<WebViewScrollEdgeReachedEventArgs> scrollEdgeReachedEventHandler;
         private WebViewScrollEdgeReachedCallback scrollEdgeReachedCallback;
 
+        private EventHandler<WebViewOverScrolledEventArgs> overScrolledEventHandler;
+        private WebViewOverScrolledCallback overScrolledCallback;
+
         private EventHandler<WebViewUrlChangedEventArgs> urlChangedEventHandler;
         private WebViewUrlChangedCallback urlChangedCallback;
 
@@ -388,6 +391,9 @@ namespace Tizen.NUI.BaseComponents
         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
         private delegate void WebViewScrollEdgeReachedCallback(int edge);
 
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        private delegate void WebViewOverScrolledCallback(int overscrolled);
+
         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
         private delegate void WebViewUrlChangedCallback(string pageUrl);
 
@@ -599,6 +605,34 @@ namespace Tizen.NUI.BaseComponents
             }
         }
 
+        /// <summary>
+        /// Event for the OverScrolled signal which can be used to subscribe or unsubscribe the event handler.<br />
+        /// This signal is emitted when web view is over scrolled.<br />
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public event EventHandler<WebViewOverScrolledEventArgs> OverScrolled
+        {
+            add
+            {
+                if (overScrolledEventHandler == null)
+                {
+                    overScrolledCallback = OnOverScrolled;
+                    IntPtr ip = Marshal.GetFunctionPointerForDelegate(overScrolledCallback);
+                    Interop.WebView.RegisterOverScrolledCallback(SwigCPtr, new HandleRef(this, ip));
+                }
+                overScrolledEventHandler += value;
+            }
+            remove
+            {
+                overScrolledEventHandler -= value;
+                if (overScrolledEventHandler == null)
+                {
+                    IntPtr ip = IntPtr.Zero;
+                    Interop.WebView.RegisterOverScrolledCallback(SwigCPtr, new HandleRef(this, ip));
+                }
+            }
+        }
+
         /// <summary>
         /// Event for the UrlChanged signal which can be used to subscribe or unsubscribe the event handler.<br />
         /// This signal is emitted when url is changed.<br />
@@ -3132,6 +3166,11 @@ namespace Tizen.NUI.BaseComponents
             scrollEdgeReachedEventHandler?.Invoke(this, new WebViewScrollEdgeReachedEventArgs((WebViewScrollEdgeReachedEventArgs.Edge)edge));
         }
 
+        private void OnOverScrolled(int over)
+        {
+            overScrolledEventHandler?.Invoke(this, new WebViewOverScrolledEventArgs((WebViewOverScrolledEventArgs.Over)over));
+        }
+
         private void OnUrlChanged(string pageUrl)
         {
             urlChangedEventHandler?.Invoke(this, new WebViewUrlChangedEventArgs(pageUrl));