[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>
Fri, 28 Mar 2025 10:35:00 +0000 (19:35 +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 a13b711597f8c8942317a456e0c83b33b4d94fff..a8d4c15f5efd129fabefdbf004231b0e6f48abda 100755 (executable)
@@ -280,6 +280,9 @@ namespace Tizen.NUI
             [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebView_RegisterScrollEdgeReachedCallback")]
             public static extern void RegisterScrollEdgeReachedCallback(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
 
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebView_RegisterOverScrolledCallback")]
+            public static extern void RegisterOverScrolledCallback(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
             [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebView_RegisterUrlChangedCallback")]
             public static extern void RegisterUrlChangedCallback(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.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 c5a979ad2ce36c98133bfc10f1a2b5441c81100c..d7d45e53963c655b632aa08a70c401743f319c7c 100755 (executable)
@@ -49,6 +49,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;
 
@@ -263,6 +266,9 @@ namespace Tizen.NUI.BaseComponents
         [UnmanagedFunctionPointer(CallingConvention.StdCall)]
         private delegate void WebViewScrollEdgeReachedCallback(int edge);
 
+        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+        private delegate void WebViewOverScrolledCallback(int overscrolled);
+
         [UnmanagedFunctionPointer(CallingConvention.StdCall)]
         private delegate void WebViewUrlChangedCallback(string pageUrl);
 
@@ -454,6 +460,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 />
@@ -2516,6 +2550,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));