[NUI] Add SetGestureGrabMode to InputGesture
authorJunkyeong Kim <jk0430.kim@samsung.com>
Fri, 28 Mar 2025 04:01:05 +0000 (13:01 +0900)
committerdongsug-song <35130733+dongsug-song@users.noreply.github.com>
Mon, 31 Mar 2025 08:49:25 +0000 (17:49 +0900)
src/Tizen.NUI.WindowSystem/src/internal/Interop/Interop.InputGesture.cs
src/Tizen.NUI.WindowSystem/src/public/InputGesture.cs
test/Tizen.NUI.WindowSystem.InputGesture/Tizen.NUI.WindowSystem.InputGesture.cs

index f602a008881b76508ef2c528d9095ecf57652dd1..6e673db0eea67ebbcc4462b2288794f93016c127 100644 (file)
@@ -52,6 +52,9 @@ namespace Tizen.NUI.WindowSystem
             [DllImport(lib, EntryPoint = "efl_util_gesture_grab")]
             internal static extern ErrorCode GestureGrab(IntPtr gestureHandler, IntPtr gestureData);
 
+            [DllImport(lib, EntryPoint = "efl_util_gesture_grab_mode_set")]
+            internal static extern ErrorCode SetGestureGrabMode(IntPtr gestureHandler, IntPtr gestureData, int mode);
+
             [DllImport(lib, EntryPoint = "efl_util_gesture_ungrab")]
             internal static extern ErrorCode GestureUngrab(IntPtr gestureHandler, IntPtr gestureData);
 
index b78fb7a269b3c563974f509f35831842a931ad8b..777250bfb248da24e00933107e722db9529d803f 100644 (file)
@@ -110,6 +110,29 @@ namespace Tizen.NUI.WindowSystem
         Partial,
     }
 
+    /// <summary>
+    /// Enumeration of gesture grab modes.
+    /// </summary>
+    /// This enum is need to be hidden as inhouse API.
+    [EditorBrowsable(EditorBrowsableState.Never)]
+    public enum GestureGrabMode
+    {
+        /// <summary>
+        /// mode none.
+        /// </summary>
+        None,
+
+        /// <summary>
+        /// mode exclusive.
+        /// </summary>
+        Exclusive,
+
+        /// <summary>
+        /// mode shared.
+        /// </summary>
+        Shared,
+    }
+
     /// <summary>
     /// Class for the Tizen Input Gesture.
     /// </summary>
@@ -429,6 +452,23 @@ namespace Tizen.NUI.WindowSystem
             Log.Debug(LogTag, "GrabGesture");
         }
 
+        /// <summary>
+        /// Set grab mode of global gesture
+        /// </summary>
+        /// <param name="data">gesture data to grab</param>
+        /// <param name="mode"> The mode of gesture grab</param>
+        /// <exception cref="ArgumentException">Thrown when failed of invalid argument.</exception>
+        public void SetGestureGrabMode(IntPtr data, GestureGrabMode mode)
+        {
+            if (data == IntPtr.Zero)
+            {
+                throw new ArgumentException("gesture data is not valid.");
+            }
+            Interop.InputGesture.ErrorCode res = Interop.InputGesture.SetGestureGrabMode(_handler, data, (int)mode);
+            ErrorCodeThrow(res);
+            Log.Debug(LogTag, "SetGestureGrabMode");
+        }
+
         /// <summary>
         /// Ungrabs a global gesture.
         /// </summary>
index 455bd67f873b931d2a5f6f5ab45071d19cb0afaf..960a9734cf95d1150fee65b07a72c982ab474441 100644 (file)
@@ -158,6 +158,33 @@ namespace Tizen.NUI.WindowSystem
                     palmCoverGrabbed = false;
                 }
             }
+            if (e.Key.State == Key.StateType.Down && (e.Key.KeyPressedName == "G" || e.Key.KeyPressedName == "g"))
+            {
+                if (edgeSwipeG == IntPtr.Zero)
+                    edgeSwipeG = inputGesture.CreateEdgeSwipeData(1, GestureEdge.Left);
+
+                if (edgeSwipeG == IntPtr.Zero)
+                {
+                    centerLabel.Text = "'G' Key Pressed. edgeSwipeG NULL!!";
+                    return;
+                }
+
+                if (!edgeSwipeGrabbed)
+                {
+                    inputGesture.SetGestureGrabMode(edgeSwipeG, GestureGrabMode.Shared);
+                    inputGesture.GrabGesture(edgeSwipeG);
+                    centerLabel.Text = "'G' Key Pressed. edgeSwipe Shared Grabbed";
+
+                    inputGesture.EdgeSwipeEventHandler += _edgeSwipeEventHandler;
+                    edgeSwipeGrabbed = true;
+                }
+                else
+                {
+                    inputGesture.UngrabGesture(edgeSwipeG);
+                    centerLabel.Text = "'G' Key Pressed. edgeSwipe Ungrabbed";
+                    edgeSwipeGrabbed = false;
+                }
+            }
         }
 
         private bool OnTouchEvent(object sender, View.TouchEventArgs e)