2 * Copyright (c) 2020 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 using System.ComponentModel;
19 using Tizen.NUI.BaseComponents;
21 namespace Tizen.NUI.Events
24 /// This is a class for detects various gestures.
26 [EditorBrowsable(EditorBrowsableState.Never)]
27 public class GestureDetectorManager : Disposable
30 /// This class is used to create a subset of the gestures you only want.
31 /// You can inherit this class and implement the callback for gestures what you want to use.
33 [EditorBrowsable(EditorBrowsableState.Never)]
34 public class GestureListener
37 /// TapGestureDetector event callback.
39 [EditorBrowsable(EditorBrowsableState.Never)]
40 public virtual void OnTap(object sender, TapGestureDetector.DetectedEventArgs e, object userData)
45 /// LongPressGestureDetector event callback.
47 [EditorBrowsable(EditorBrowsableState.Never)]
48 public virtual void OnLongPress(object sender, LongPressGestureDetector.DetectedEventArgs e, object userData)
53 /// PanGestureDetector event callback.
55 [EditorBrowsable(EditorBrowsableState.Never)]
56 public virtual void OnPan(object sender, PanGestureDetector.DetectedEventArgs e, object userData)
61 /// PinchGestureDetector event callback.
63 [EditorBrowsable(EditorBrowsableState.Never)]
64 public virtual void OnPinch(object sender, PinchGestureDetector.DetectedEventArgs e, object userData)
69 private GestureListener mListener;
70 private TapGestureDetector mTapGestureDetector;
71 private LongPressGestureDetector mLongGestureDetector;
72 private PinchGestureDetector mPinchGestureDetector;
73 private PanGestureDetector mPanGestureDetector;
74 private object mUserData;
77 /// Creates a GestureDetectorManager with the user listener.
79 [EditorBrowsable(EditorBrowsableState.Never)]
80 public GestureDetectorManager(View view, GestureListener listener)
84 throw new global::System.ArgumentNullException(nameof(view));
88 throw new global::System.ArgumentNullException(nameof(listener));
92 view.GrabTouchAfterLeave = true;
96 private void init(View view)
98 mTapGestureDetector = new TapGestureDetector();
99 mLongGestureDetector = new LongPressGestureDetector();
100 mPanGestureDetector = new PanGestureDetector();
101 mPinchGestureDetector = new PinchGestureDetector();
103 mTapGestureDetector.Attach(view);
104 mLongGestureDetector.Attach(view);
105 mPanGestureDetector.Attach(view);
106 mPinchGestureDetector.Attach(view);
109 private void InternalOnTap(object sender, TapGestureDetector.DetectedEventArgs e)
111 mListener.OnTap(sender, e, mUserData);
112 mTapGestureDetector.Detected -= InternalOnTap;
115 private void InternalOnLongPress(object sender, LongPressGestureDetector.DetectedEventArgs e)
117 mListener.OnLongPress(sender, e, mUserData);
118 mLongGestureDetector.Detected -= InternalOnLongPress;
121 private void InternalOnPan(object sender, PanGestureDetector.DetectedEventArgs e)
123 mListener.OnPan(sender, e, mUserData);
124 mPanGestureDetector.Detected -= InternalOnPan;
127 private void InternalOnPinch(object sender, PinchGestureDetector.DetectedEventArgs e)
129 mListener.OnPinch(sender, e, mUserData);
130 mPinchGestureDetector.Detected -= InternalOnPinch;
134 /// Gestures also work only when there is a touch event.
136 /// <param name="sender">The actor who delivered the touch event.</param>
137 /// <param name="e">The TouchEventArgs</param>
138 [EditorBrowsable(EditorBrowsableState.Never)]
139 public void FeedTouchEvent(object sender, View.TouchEventArgs e)
141 FeedTouchEvent(sender, e, null);
145 /// Gestures also work only when there is a touch event.
147 /// <param name="sender">The actor who delivered the touch event.</param>
148 /// <param name="e">The TouchEventArgs</param>
149 /// <param name="userData">The user data object</param>
150 [EditorBrowsable(EditorBrowsableState.Never)]
151 public void FeedTouchEvent(object sender, View.TouchEventArgs e, object userData)
153 mUserData = userData;
154 mTapGestureDetector.Detected -= InternalOnTap;
155 mLongGestureDetector.Detected -= InternalOnLongPress;
156 mPanGestureDetector.Detected -= InternalOnPan;
157 mPinchGestureDetector.Detected -= InternalOnPinch;
160 (e.Touch.GetState(0) != PointStateType.Finished ||
161 e.Touch.GetState(0) != PointStateType.Up ||
162 e.Touch.GetState(0) != PointStateType.Interrupted))
164 mTapGestureDetector.Detected += InternalOnTap;
165 mLongGestureDetector.Detected += InternalOnLongPress;
166 mPanGestureDetector.Detected += InternalOnPan;
167 mPinchGestureDetector.Detected += InternalOnPinch;