From f9044a6e2a3bd4e9998f03e66e5e498e6b1d6ddd Mon Sep 17 00:00:00 2001 From: "dongsug.song" Date: Fri, 28 Mar 2025 18:30:01 +0900 Subject: [PATCH] [NUI] Add OverScrolled in WebView --- .../src/internal/Interop/Interop.WebView.cs | 3 + .../WebView/WebViewOverScrolledEventArgs.cs | 59 +++++++++++++++++++ src/Tizen.NUI/src/public/WebView/WebView.cs | 39 ++++++++++++ 3 files changed, 101 insertions(+) create mode 100755 src/Tizen.NUI/src/internal/WebView/WebViewOverScrolledEventArgs.cs diff --git a/src/Tizen.NUI/src/internal/Interop/Interop.WebView.cs b/src/Tizen.NUI/src/internal/Interop/Interop.WebView.cs index a13b71159..a8d4c15f5 100755 --- a/src/Tizen.NUI/src/internal/Interop/Interop.WebView.cs +++ b/src/Tizen.NUI/src/internal/Interop/Interop.WebView.cs @@ -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 index 000000000..68cf04530 --- /dev/null +++ b/src/Tizen.NUI/src/internal/WebView/WebViewOverScrolledEventArgs.cs @@ -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 +{ + /// + /// Event arguments that passed via the WebView.OverScrolled. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public class WebViewOverScrolledEventArgs : EventArgs + { + internal WebViewOverScrolledEventArgs(Over e) + { + OverScrolled = e; + } + + /// + /// The enumeration for over scrolled. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public enum Over + { + [EditorBrowsable(EditorBrowsableState.Never)] + Left, + + [EditorBrowsable(EditorBrowsableState.Never)] + Right, + + [EditorBrowsable(EditorBrowsableState.Never)] + Top, + + [EditorBrowsable(EditorBrowsableState.Never)] + Bottom, + } + + /// + /// The over scolled direction, e.g. left, right, etc. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public Over OverScrolled { get; } + } +} diff --git a/src/Tizen.NUI/src/public/WebView/WebView.cs b/src/Tizen.NUI/src/public/WebView/WebView.cs index c5a979ad2..d7d45e539 100755 --- a/src/Tizen.NUI/src/public/WebView/WebView.cs +++ b/src/Tizen.NUI/src/public/WebView/WebView.cs @@ -49,6 +49,9 @@ namespace Tizen.NUI.BaseComponents private EventHandler scrollEdgeReachedEventHandler; private WebViewScrollEdgeReachedCallback scrollEdgeReachedCallback; + private EventHandler overScrolledEventHandler; + private WebViewOverScrolledCallback overScrolledCallback; + private EventHandler 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 } } + /// + /// Event for the OverScrolled signal which can be used to subscribe or unsubscribe the event handler.
+ /// This signal is emitted when web view is over scrolled.
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)] + public event EventHandler 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)); + } + } + } + /// /// Event for the UrlChanged signal which can be used to subscribe or unsubscribe the event handler.
/// This signal is emitted when url is changed.
@@ -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)); -- 2.34.1