• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "frameworks/bridge/declarative_frontend/engine/functions/js_gesture_recognizer.h"
17 
18 #include "ui/base/utils/utils.h"
19 
20 #include "core/components_ng/gestures/recognizers/pan_recognizer.h"
21 #include "core/components_ng/gestures/tap_gesture.h"
22 
23 namespace OHOS::Ace::Framework {
24 
IsBegin(const JSCallbackInfo & args)25 void JSScrollableTargetInfo::IsBegin(const JSCallbackInfo& args)
26 {
27     auto pattern = pattern_.Upgrade();
28     if (!pattern) {
29         args.SetReturnValue(JSRef<JSVal>::Make(ToJSValue(false)));
30         return;
31     }
32     auto scrollablePattern = AceType::DynamicCast<NG::ScrollablePattern>(pattern);
33     if (scrollablePattern) {
34         args.SetReturnValue(JSRef<JSVal>::Make(ToJSValue(scrollablePattern->IsAtTop())));
35         return;
36     }
37     auto swiperPattern = AceType::DynamicCast<NG::SwiperPattern>(pattern);
38     if (swiperPattern) {
39         args.SetReturnValue(JSRef<JSVal>::Make(ToJSValue(swiperPattern->IsAtStart())));
40     }
41 }
42 
IsEnd(const JSCallbackInfo & args)43 void JSScrollableTargetInfo::IsEnd(const JSCallbackInfo& args)
44 {
45     auto pattern = pattern_.Upgrade();
46     if (!pattern) {
47         args.SetReturnValue(JSRef<JSVal>::Make(ToJSValue(false)));
48         return;
49     }
50     auto scrollablePattern = AceType::DynamicCast<NG::ScrollablePattern>(pattern);
51     if (scrollablePattern) {
52         args.SetReturnValue(JSRef<JSVal>::Make(ToJSValue(scrollablePattern->IsAtBottom())));
53         return;
54     }
55     auto swiperPattern = AceType::DynamicCast<NG::SwiperPattern>(pattern);
56     if (swiperPattern) {
57         args.SetReturnValue(JSRef<JSVal>::Make(ToJSValue(swiperPattern->IsAtEnd())));
58     }
59 }
60 
GetTag(const JSCallbackInfo & args)61 void JSGestureRecognizer::GetTag(const JSCallbackInfo& args)
62 {
63     std::string tag;
64     auto recognizer = recognizer_.Upgrade();
65     if (recognizer) {
66         auto gestureInfo = recognizer->GetGestureInfo();
67         if (gestureInfo->GetTag().has_value()) {
68             tag = gestureInfo->GetTag().value();
69         }
70     }
71     args.SetReturnValue(JSRef<JSVal>::Make(ToJSValue(tag)));
72 }
73 
GetType(const JSCallbackInfo & args)74 void JSGestureRecognizer::GetType(const JSCallbackInfo& args)
75 {
76     GestureTypeName type = GestureTypeName::UNKNOWN;
77     auto recognizer = recognizer_.Upgrade();
78     if (recognizer) {
79         auto gestureInfo = recognizer->GetGestureInfo();
80         type = gestureInfo->GetRecognizerType();
81     }
82     args.SetReturnValue(JSRef<JSVal>::Make(ToJSValue(static_cast<int32_t>(type))));
83 }
84 
85 
GetFingers(const JSCallbackInfo & args)86 void JSGestureRecognizer::GetFingers(const JSCallbackInfo& args)
87 {
88     args.SetReturnValue(JSRef<JSVal>::Make(ToJSValue(fingers_)));
89 }
90 
IsFingerCountLimit(const JSCallbackInfo & args)91 void JSGestureRecognizer::IsFingerCountLimit(const JSCallbackInfo& args)
92 {
93     args.SetReturnValue(JSRef<JSVal>::Make(ToJSValue(isLimitFingerCount_)));
94 }
95 
IsBuiltInRecognizer(const JSCallbackInfo & args)96 void JSGestureRecognizer::IsBuiltInRecognizer(const JSCallbackInfo& args)
97 {
98     bool isBuiltIn = false;
99     auto recognizer = recognizer_.Upgrade();
100     if (recognizer) {
101         auto gestureInfo = recognizer->GetGestureInfo();
102         isBuiltIn = gestureInfo->IsSystemGesture();
103     }
104     args.SetReturnValue(JSRef<JSVal>::Make(ToJSValue(isBuiltIn)));
105 }
106 
SetEnabled(const JSCallbackInfo & args)107 void JSGestureRecognizer::SetEnabled(const JSCallbackInfo& args)
108 {
109     auto recognizer = recognizer_.Upgrade();
110     CHECK_NULL_VOID(recognizer);
111     bool enabled = true;
112     if (args[0]->IsBoolean()) {
113         enabled = args[0]->ToBoolean();
114     }
115     recognizer->SetEnabled(enabled);
116 }
117 
IsEnabled(const JSCallbackInfo & args)118 void JSGestureRecognizer::IsEnabled(const JSCallbackInfo& args)
119 {
120     bool isEnabled = false;
121     auto recognizer = recognizer_.Upgrade();
122     if (recognizer) {
123         isEnabled = recognizer->IsEnabled();
124     }
125     args.SetReturnValue(JSRef<JSVal>::Make(ToJSValue(isEnabled)));
126 }
127 
GetEventTargetInfo(const JSCallbackInfo & args)128 void JSGestureRecognizer::GetEventTargetInfo(const JSCallbackInfo& args)
129 {
130     auto recognizer = recognizer_.Upgrade();
131     if (!recognizer) {
132         args.SetReturnValue(JSClass<JSEventTargetInfo>::NewInstance());
133         return;
134     }
135     auto attachNode = recognizer->GetAttachedNode().Upgrade();
136     if (!attachNode) {
137         args.SetReturnValue(JSClass<JSEventTargetInfo>::NewInstance());
138         return;
139     }
140     RefPtr<NG::Pattern> pattern;
141     auto scrollablePattern = attachNode->GetPattern<NG::ScrollablePattern>();
142     if (scrollablePattern) {
143         pattern = scrollablePattern;
144     }
145     auto swiperPattern = attachNode->GetPattern<NG::SwiperPattern>();
146     if (swiperPattern) {
147         pattern = swiperPattern;
148     }
149     if (pattern) {
150         JSRef<JSObject> scrollableTargetObj = JSClass<JSScrollableTargetInfo>::NewInstance();
151         auto scrollableTarget = Referenced::Claim(scrollableTargetObj->Unwrap<JSScrollableTargetInfo>());
152         scrollableTarget->SetPattern(pattern);
153         scrollableTarget->SetInspectorId(attachNode->GetInspectorIdValue(""));
154         args.SetReturnValue(scrollableTargetObj);
155         return;
156     }
157     JSRef<JSObject> eventTargetObj = JSClass<JSEventTargetInfo>::NewInstance();
158     auto eventTarget = Referenced::Claim(eventTargetObj->Unwrap<JSEventTargetInfo>());
159     eventTarget->SetInspectorId(attachNode->GetInspectorIdValue(""));
160     args.SetReturnValue(eventTargetObj);
161 }
162 
GetRefereeState(const JSCallbackInfo & args)163 void JSGestureRecognizer::GetRefereeState(const JSCallbackInfo& args)
164 {
165     GestureRecognizerState state = GestureRecognizerState::FAIL;
166     auto recognizer = recognizer_.Upgrade();
167     if (recognizer) {
168         state = ConvertRefereeState(recognizer->GetRefereeState());
169     }
170     args.SetReturnValue(JSRef<JSVal>::Make(ToJSValue(static_cast<int32_t>(state))));
171 }
172 
IsValid(const JSCallbackInfo & args)173 void JSGestureRecognizer::IsValid(const JSCallbackInfo& args)
174 {
175     bool isValid = false;
176     auto recognizer = recognizer_.Upgrade();
177     if (recognizer && recognizer->IsInResponseLinkRecognizers()) {
178         isValid = true;
179     }
180     args.SetReturnValue(JSRef<JSVal>::Make(ToJSValue(isValid)));
181 }
182 
GetDistance(const JSCallbackInfo & args)183 void JSPinchRecognizer::GetDistance(const JSCallbackInfo& args)
184 {
185     auto recognizer = JSGestureRecognizer::GetRecognizer().Upgrade();
186     if (recognizer) {
187         auto context = PipelineContext::GetCurrentContextSafely();
188         CHECK_NULL_VOID(context);
189         double distance = context->ConvertPxToVp(Dimension(distance_, DimensionUnit::PX));
190         args.SetReturnValue(JSRef<JSVal>::Make(ToJSValue(RoundToMaxPrecision(distance))));
191     }
192 }
193 
GetCount(const JSCallbackInfo & args)194 void JSTapRecognizer::GetCount(const JSCallbackInfo& args)
195 {
196     auto recognizer = JSGestureRecognizer::GetRecognizer().Upgrade();
197     if (recognizer) {
198         args.SetReturnValue(JSRef<JSVal>::Make(ToJSValue(count_)));
199     }
200 }
201 
GetDuration(const JSCallbackInfo & args)202 void JSLongPressRecognizer::GetDuration(const JSCallbackInfo& args)
203 {
204     auto recognizer = JSGestureRecognizer::GetRecognizer().Upgrade();
205     if (recognizer) {
206         args.SetReturnValue(JSRef<JSVal>::Make(ToJSValue(duration_)));
207     }
208 }
209 
SetRepeat(bool repeat)210 void JSLongPressRecognizer::SetRepeat(bool repeat)
211 {
212     repeat_ = repeat;
213 }
214 
GetRepeat(const JSCallbackInfo & args)215 void JSLongPressRecognizer::GetRepeat(const JSCallbackInfo& args)
216 {
217     auto recognizer = JSGestureRecognizer::GetRecognizer().Upgrade();
218     if (recognizer) {
219         args.SetReturnValue(JSRef<JSVal>::Make(ToJSValue(repeat_)));
220     }
221 }
222 
GetAngle(const JSCallbackInfo & args)223 void JSRotationRecognizer::GetAngle(const JSCallbackInfo& args)
224 {
225     auto recognizer = JSGestureRecognizer::GetRecognizer().Upgrade();
226     if (recognizer) {
227         args.SetReturnValue(JSRef<JSVal>::Make(ToJSValue(angle_)));
228     }
229 }
230 
GetDirection(const JSCallbackInfo & args)231 void JSSwipeRecognizer::GetDirection(const JSCallbackInfo& args)
232 {
233     auto recognizer = JSGestureRecognizer::GetRecognizer().Upgrade();
234     if (recognizer) {
235         args.SetReturnValue(JSRef<JSVal>::Make(ToJSValue(direction_.type)));
236     }
237 }
238 
GetSpeed(const JSCallbackInfo & args)239 void JSSwipeRecognizer::GetSpeed(const JSCallbackInfo& args)
240 {
241     auto recognizer = JSGestureRecognizer::GetRecognizer().Upgrade();
242     if (recognizer) {
243         auto context = PipelineContext::GetCurrentContextSafely();
244         CHECK_NULL_VOID(context);
245         double speed = context->ConvertPxToVp(Dimension(speed_, DimensionUnit::PX));
246         args.SetReturnValue(JSRef<JSVal>::Make(ToJSValue(RoundToMaxPrecision(speed))));
247     }
248 }
249 
JSBind(BindingTarget globalObj)250 void JSEventTargetInfo::JSBind(BindingTarget globalObj)
251 {
252     JSClass<JSEventTargetInfo>::Declare("EventTargetInfo");
253     JSClass<JSEventTargetInfo>::CustomMethod("getId", &JSEventTargetInfo::GetInspectorId);
254     JSClass<JSEventTargetInfo>::Bind(globalObj, &JSEventTargetInfo::Constructor, &JSEventTargetInfo::Destructor);
255 }
256 
JSBind(BindingTarget globalObj)257 void JSScrollableTargetInfo::JSBind(BindingTarget globalObj)
258 {
259     JSClass<JSScrollableTargetInfo>::Declare("ScrollableTargetInfo");
260     JSClass<JSScrollableTargetInfo>::CustomMethod("isBegin", &JSScrollableTargetInfo::IsBegin);
261     JSClass<JSScrollableTargetInfo>::CustomMethod("isEnd", &JSScrollableTargetInfo::IsEnd);
262     JSClass<JSScrollableTargetInfo>::CustomMethod("getId", &JSEventTargetInfo::GetInspectorId);
263     JSClass<JSScrollableTargetInfo>::Inherit<JSEventTargetInfo>();
264     JSClass<JSScrollableTargetInfo>::Bind(
265         globalObj, &JSScrollableTargetInfo::Constructor, &JSScrollableTargetInfo::Destructor);
266 }
267 
JSBind(BindingTarget globalObj)268 void JSGestureRecognizer::JSBind(BindingTarget globalObj)
269 {
270     JSClass<JSGestureRecognizer>::Declare("GestureRecognizer");
271     JSClass<JSGestureRecognizer>::CustomMethod("getTag", &JSGestureRecognizer::GetTag);
272     JSClass<JSGestureRecognizer>::CustomMethod("getType", &JSGestureRecognizer::GetType);
273     JSClass<JSGestureRecognizer>::CustomMethod("getFingerCount", &JSGestureRecognizer::GetFingers);
274     JSClass<JSGestureRecognizer>::CustomMethod("isFingerCountLimit", &JSGestureRecognizer::IsFingerCountLimit);
275     JSClass<JSGestureRecognizer>::CustomMethod("isBuiltIn", &JSGestureRecognizer::IsBuiltInRecognizer);
276     JSClass<JSGestureRecognizer>::CustomMethod("setEnabled", &JSGestureRecognizer::SetEnabled);
277     JSClass<JSGestureRecognizer>::CustomMethod("isEnabled", &JSGestureRecognizer::IsEnabled);
278     JSClass<JSGestureRecognizer>::CustomMethod("getEventTargetInfo", &JSGestureRecognizer::GetEventTargetInfo);
279     JSClass<JSGestureRecognizer>::CustomMethod("getState", &JSGestureRecognizer::GetRefereeState);
280     JSClass<JSGestureRecognizer>::CustomMethod("isValid", &JSGestureRecognizer::IsValid);
281     JSClass<JSGestureRecognizer>::Bind(globalObj, &JSGestureRecognizer::Constructor, &JSGestureRecognizer::Destructor);
282 }
283 
JSBind(BindingTarget globalObj)284 void JSPanRecognizer::JSBind(BindingTarget globalObj)
285 {
286     JSClass<JSPanRecognizer>::Declare("PanRecognizer");
287     JSClass<JSPanRecognizer>::CustomMethod("getTag", &JSGestureRecognizer::GetTag);
288     JSClass<JSPanRecognizer>::CustomMethod("getType", &JSGestureRecognizer::GetType);
289     JSClass<JSPanRecognizer>::CustomMethod("getFingerCount", &JSGestureRecognizer::GetFingers);
290     JSClass<JSPanRecognizer>::CustomMethod("isFingerCountLimit", &JSGestureRecognizer::IsFingerCountLimit);
291     JSClass<JSPanRecognizer>::CustomMethod("isBuiltIn", &JSGestureRecognizer::IsBuiltInRecognizer);
292     JSClass<JSPanRecognizer>::CustomMethod("setEnabled", &JSGestureRecognizer::SetEnabled);
293     JSClass<JSPanRecognizer>::CustomMethod("isEnabled", &JSGestureRecognizer::IsEnabled);
294     JSClass<JSPanRecognizer>::CustomMethod("getEventTargetInfo", &JSGestureRecognizer::GetEventTargetInfo);
295     JSClass<JSPanRecognizer>::CustomMethod("getState", &JSGestureRecognizer::GetRefereeState);
296     JSClass<JSPanRecognizer>::CustomMethod("getPanGestureOptions", &JSPanRecognizer::GetPanGestureOptions);
297     JSClass<JSPanRecognizer>::CustomMethod("isValid", &JSGestureRecognizer::IsValid);
298     JSClass<JSPanRecognizer>::Inherit<JSGestureRecognizer>();
299     JSClass<JSPanRecognizer>::Bind(globalObj, &JSPanRecognizer::Constructor, &JSPanRecognizer::Destructor);
300 }
301 
JSBind(BindingTarget globalObj)302 void JSPinchRecognizer::JSBind(BindingTarget globalObj)
303 {
304     JSClass<JSPinchRecognizer>::Declare("PinchRecognizer");
305     JSClass<JSPinchRecognizer>::CustomMethod("getTag", &JSGestureRecognizer::GetTag);
306     JSClass<JSPinchRecognizer>::CustomMethod("getType", &JSGestureRecognizer::GetType);
307     JSClass<JSPinchRecognizer>::CustomMethod("getFingerCount", &JSGestureRecognizer::GetFingers);
308     JSClass<JSPinchRecognizer>::CustomMethod("isFingerCountLimit", &JSGestureRecognizer::IsFingerCountLimit);
309     JSClass<JSPinchRecognizer>::CustomMethod("getDistance", &JSPinchRecognizer::GetDistance);
310     JSClass<JSPinchRecognizer>::CustomMethod("isBuiltIn", &JSGestureRecognizer::IsBuiltInRecognizer);
311     JSClass<JSPinchRecognizer>::CustomMethod("setEnabled", &JSGestureRecognizer::SetEnabled);
312     JSClass<JSPinchRecognizer>::CustomMethod("isEnabled", &JSGestureRecognizer::IsEnabled);
313     JSClass<JSPinchRecognizer>::CustomMethod("getEventTargetInfo", &JSGestureRecognizer::GetEventTargetInfo);
314     JSClass<JSPinchRecognizer>::CustomMethod("getState", &JSGestureRecognizer::GetRefereeState);
315     JSClass<JSPinchRecognizer>::CustomMethod("isValid", &JSGestureRecognizer::IsValid);
316     JSClass<JSPinchRecognizer>::Inherit<JSGestureRecognizer>();
317     JSClass<JSPinchRecognizer>::Bind(globalObj, &JSPinchRecognizer::Constructor, &JSPinchRecognizer::Destructor);
318 }
319 
JSBind(BindingTarget globalObj)320 void JSTapRecognizer::JSBind(BindingTarget globalObj)
321 {
322     JSClass<JSTapRecognizer>::Declare("TapRecognizer");
323     JSClass<JSTapRecognizer>::CustomMethod("getTag", &JSGestureRecognizer::GetTag);
324     JSClass<JSTapRecognizer>::CustomMethod("getType", &JSGestureRecognizer::GetType);
325     JSClass<JSTapRecognizer>::CustomMethod("getFingerCount", &JSGestureRecognizer::GetFingers);
326     JSClass<JSTapRecognizer>::CustomMethod("isFingerCountLimit", &JSGestureRecognizer::IsFingerCountLimit);
327     JSClass<JSTapRecognizer>::CustomMethod("getTapCount", &JSTapRecognizer::GetCount);
328     JSClass<JSTapRecognizer>::CustomMethod("isBuiltIn", &JSGestureRecognizer::IsBuiltInRecognizer);
329     JSClass<JSTapRecognizer>::CustomMethod("setEnabled", &JSGestureRecognizer::SetEnabled);
330     JSClass<JSTapRecognizer>::CustomMethod("isEnabled", &JSGestureRecognizer::IsEnabled);
331     JSClass<JSTapRecognizer>::CustomMethod("getEventTargetInfo", &JSGestureRecognizer::GetEventTargetInfo);
332     JSClass<JSTapRecognizer>::CustomMethod("getState", &JSGestureRecognizer::GetRefereeState);
333     JSClass<JSTapRecognizer>::CustomMethod("isValid", &JSGestureRecognizer::IsValid);
334     JSClass<JSTapRecognizer>::Inherit<JSGestureRecognizer>();
335     JSClass<JSTapRecognizer>::Bind(globalObj, &JSTapRecognizer::Constructor, &JSTapRecognizer::Destructor);
336 }
337 
JSBind(BindingTarget globalObj)338 void JSLongPressRecognizer::JSBind(BindingTarget globalObj)
339 {
340     JSClass<JSLongPressRecognizer>::Declare("LongPressRecognizer");
341     JSClass<JSLongPressRecognizer>::CustomMethod("getTag", &JSGestureRecognizer::GetTag);
342     JSClass<JSLongPressRecognizer>::CustomMethod("getType", &JSGestureRecognizer::GetType);
343     JSClass<JSLongPressRecognizer>::CustomMethod("getFingerCount", &JSGestureRecognizer::GetFingers);
344     JSClass<JSLongPressRecognizer>::CustomMethod("isFingerCountLimit", &JSGestureRecognizer::IsFingerCountLimit);
345     JSClass<JSLongPressRecognizer>::CustomMethod("isRepeat", &JSLongPressRecognizer::GetRepeat);
346     JSClass<JSLongPressRecognizer>::CustomMethod("getDuration", &JSLongPressRecognizer::GetDuration);
347     JSClass<JSLongPressRecognizer>::CustomMethod("isBuiltIn", &JSGestureRecognizer::IsBuiltInRecognizer);
348     JSClass<JSLongPressRecognizer>::CustomMethod("setEnabled", &JSGestureRecognizer::SetEnabled);
349     JSClass<JSLongPressRecognizer>::CustomMethod("isEnabled", &JSGestureRecognizer::IsEnabled);
350     JSClass<JSLongPressRecognizer>::CustomMethod("getEventTargetInfo", &JSGestureRecognizer::GetEventTargetInfo);
351     JSClass<JSLongPressRecognizer>::CustomMethod("getState", &JSGestureRecognizer::GetRefereeState);
352     JSClass<JSLongPressRecognizer>::CustomMethod("isValid", &JSGestureRecognizer::IsValid);
353     JSClass<JSLongPressRecognizer>::Inherit<JSGestureRecognizer>();
354     JSClass<JSLongPressRecognizer>::Bind(
355         globalObj, &JSLongPressRecognizer::Constructor, &JSLongPressRecognizer::Destructor);
356 }
357 
JSBind(BindingTarget globalObj)358 void JSRotationRecognizer::JSBind(BindingTarget globalObj)
359 {
360     JSClass<JSRotationRecognizer>::Declare("RotationRecognizer");
361     JSClass<JSRotationRecognizer>::CustomMethod("getTag", &JSGestureRecognizer::GetTag);
362     JSClass<JSRotationRecognizer>::CustomMethod("getType", &JSGestureRecognizer::GetType);
363     JSClass<JSRotationRecognizer>::CustomMethod("getFingerCount", &JSGestureRecognizer::GetFingers);
364     JSClass<JSRotationRecognizer>::CustomMethod("isFingerCountLimit", &JSGestureRecognizer::IsFingerCountLimit);
365     JSClass<JSRotationRecognizer>::CustomMethod("getAngle", &JSRotationRecognizer::GetAngle);
366     JSClass<JSRotationRecognizer>::CustomMethod("isBuiltIn", &JSGestureRecognizer::IsBuiltInRecognizer);
367     JSClass<JSRotationRecognizer>::CustomMethod("setEnabled", &JSGestureRecognizer::SetEnabled);
368     JSClass<JSRotationRecognizer>::CustomMethod("isEnabled", &JSGestureRecognizer::IsEnabled);
369     JSClass<JSRotationRecognizer>::CustomMethod("getEventTargetInfo", &JSGestureRecognizer::GetEventTargetInfo);
370     JSClass<JSRotationRecognizer>::CustomMethod("getState", &JSGestureRecognizer::GetRefereeState);
371     JSClass<JSRotationRecognizer>::CustomMethod("isValid", &JSGestureRecognizer::IsValid);
372     JSClass<JSRotationRecognizer>::Inherit<JSGestureRecognizer>();
373     JSClass<JSRotationRecognizer>::Bind(
374         globalObj, &JSRotationRecognizer::Constructor, &JSRotationRecognizer::Destructor);
375 }
376 
JSBind(BindingTarget globalObj)377 void JSSwipeRecognizer::JSBind(BindingTarget globalObj)
378 {
379     JSClass<JSSwipeRecognizer>::Declare("SwipeRecognizer");
380     JSClass<JSSwipeRecognizer>::CustomMethod("getTag", &JSGestureRecognizer::GetTag);
381     JSClass<JSSwipeRecognizer>::CustomMethod("getType", &JSGestureRecognizer::GetType);
382     JSClass<JSSwipeRecognizer>::CustomMethod("getFingerCount", &JSGestureRecognizer::GetFingers);
383     JSClass<JSSwipeRecognizer>::CustomMethod("isFingerCountLimit", &JSGestureRecognizer::IsFingerCountLimit);
384     JSClass<JSSwipeRecognizer>::CustomMethod("getVelocityThreshold", &JSSwipeRecognizer::GetSpeed);
385     JSClass<JSSwipeRecognizer>::CustomMethod("getDirection", &JSSwipeRecognizer::GetDirection);
386     JSClass<JSSwipeRecognizer>::CustomMethod("isBuiltIn", &JSGestureRecognizer::IsBuiltInRecognizer);
387     JSClass<JSSwipeRecognizer>::CustomMethod("setEnabled", &JSGestureRecognizer::SetEnabled);
388     JSClass<JSSwipeRecognizer>::CustomMethod("isEnabled", &JSGestureRecognizer::IsEnabled);
389     JSClass<JSSwipeRecognizer>::CustomMethod("getEventTargetInfo", &JSGestureRecognizer::GetEventTargetInfo);
390     JSClass<JSSwipeRecognizer>::CustomMethod("getState", &JSGestureRecognizer::GetRefereeState);
391     JSClass<JSSwipeRecognizer>::CustomMethod("isValid", &JSGestureRecognizer::IsValid);
392     JSClass<JSSwipeRecognizer>::Inherit<JSGestureRecognizer>();
393     JSClass<JSSwipeRecognizer>::Bind(globalObj, &JSSwipeRecognizer::Constructor, &JSSwipeRecognizer::Destructor);
394 }
395 } // namespace OHOS::Ace::Framework