1 /*
2 * Copyright (c) 2022 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 "js_pointer_context.h"
17 #include "pixel_map.h"
18 #include "pixel_map_napi.h"
19
20 #undef MMI_LOG_TAG
21 #define MMI_LOG_TAG "JsPointerContext"
22
23 namespace OHOS {
24 namespace MMI {
25 namespace {
26 constexpr int32_t STANDARD_SPEED { 5 };
27 constexpr int32_t MAX_SPEED { 11 };
28 constexpr int32_t MIN_SPEED { 1 };
29 constexpr int32_t DEFAULT_ROWS { 3 };
30 constexpr int32_t MIN_ROWS { 1 };
31 constexpr int32_t MAX_ROWS { 100 };
32 constexpr size_t INPUT_PARAMETER { 2 };
33 constexpr int32_t DEFAULT_POINTER_SIZE { 1 };
34 constexpr int32_t MIN_POINTER_SIZE { 1 };
35 constexpr int32_t MAX_POINTER_SIZE { 7 };
36 constexpr int32_t MIN_POINTER_COLOR { 0x000000 };
37 constexpr int32_t THREE_PARAMETERS { 3 };
38 constexpr int32_t INVALID_VALUE { -2 };
39 } // namespace
40
JsPointerContext()41 JsPointerContext::JsPointerContext() : mgr_(std::make_shared<JsPointerManager>()) {}
42
CreateInstance(napi_env env)43 napi_value JsPointerContext::CreateInstance(napi_env env)
44 {
45 CALL_DEBUG_ENTER;
46 napi_value global = nullptr;
47 CHKRP(napi_get_global(env, &global), GET_GLOBAL);
48
49 constexpr char className[] = "JsPointerContext";
50 napi_value jsClass = nullptr;
51 napi_property_descriptor desc[] = {};
52 napi_status status = napi_define_class(env, className, sizeof(className), JsPointerContext::CreateJsObject,
53 nullptr, sizeof(desc) / sizeof(desc[0]), nullptr, &jsClass);
54 CHKRP(status, DEFINE_CLASS);
55
56 status = napi_set_named_property(env, global, "multimodalinput_pointer_class", jsClass);
57 CHKRP(status, SET_NAMED_PROPERTY);
58
59 napi_value jsInstance = nullptr;
60 CHKRP(napi_new_instance(env, jsClass, 0, nullptr, &jsInstance), NEW_INSTANCE);
61 CHKRP(napi_set_named_property(env, global, "multimodal_pointer", jsInstance), SET_NAMED_PROPERTY);
62
63 JsPointerContext *jsContext = nullptr;
64 CHKRP(napi_unwrap(env, jsInstance, (void**)&jsContext), UNWRAP);
65 CHKPP(jsContext);
66 CHKRP(napi_create_reference(env, jsInstance, 1, &(jsContext->contextRef_)), CREATE_REFERENCE);
67
68 uint32_t refCount = 0;
69 CHKRP(napi_reference_ref(env, jsContext->contextRef_, &refCount), REFERENCE_REF);
70 return jsInstance;
71 }
72
CreateJsObject(napi_env env,napi_callback_info info)73 napi_value JsPointerContext::CreateJsObject(napi_env env, napi_callback_info info)
74 {
75 CALL_DEBUG_ENTER;
76 napi_value thisVar = nullptr;
77 void *data = nullptr;
78 CHKRP(napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, &data), GET_CB_INFO);
79
80 JsPointerContext *jsContext = new (std::nothrow) JsPointerContext();
81 CHKPP(jsContext);
82 napi_status status = napi_wrap(env, thisVar, jsContext, [](napi_env env, void* data, void* hin) {
83 MMI_HILOGI("jsvm ends");
84 JsPointerContext *context = static_cast<JsPointerContext*>(data);
85 delete context;
86 }, nullptr, nullptr);
87 if (status != napi_ok) {
88 delete jsContext;
89 THROWERR(env, "Failed to wrap native instance");
90 return nullptr;
91 }
92 return thisVar;
93 }
94
GetInstance(napi_env env)95 JsPointerContext* JsPointerContext::GetInstance(napi_env env)
96 {
97 CALL_DEBUG_ENTER;
98 napi_value global = nullptr;
99 CHKRP(napi_get_global(env, &global), GET_GLOBAL);
100
101 bool result = false;
102 CHKRP(napi_has_named_property(env, global, "multimodal_pointer", &result), HAS_NAMED_PROPERTY);
103 if (!result) {
104 THROWERR(env, "multimodal_pointer was not found");
105 return nullptr;
106 }
107
108 napi_value object = nullptr;
109 CHKRP(napi_get_named_property(env, global, "multimodal_pointer", &object), SET_NAMED_PROPERTY);
110 if (object == nullptr) {
111 THROWERR(env, "object is nullptr");
112 return nullptr;
113 }
114
115 JsPointerContext *instance = nullptr;
116 CHKRP(napi_unwrap(env, object, (void**)&instance), UNWRAP);
117 if (instance == nullptr) {
118 THROWERR(env, "instance is nullptr");
119 return nullptr;
120 }
121 return instance;
122 }
123
GetJsPointerMgr() const124 std::shared_ptr<JsPointerManager> JsPointerContext::GetJsPointerMgr() const
125 {
126 return mgr_;
127 }
128
SetPointerVisible(napi_env env,napi_callback_info info)129 napi_value JsPointerContext::SetPointerVisible(napi_env env, napi_callback_info info)
130 {
131 CALL_DEBUG_ENTER;
132 size_t argc = 2;
133 napi_value argv[2] = { 0 };
134 CHKRP(napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr), GET_CB_INFO);
135 if (argc < 1) {
136 MMI_HILOGE("At least one parameter is required");
137 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "visible", "boolean");
138 return nullptr;
139 }
140 if (!JsCommon::TypeOf(env, argv[0], napi_boolean)) {
141 MMI_HILOGE("visible parameter type is invalid");
142 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "visible", "boolean");
143 return nullptr;
144 }
145 bool visible = true;
146 CHKRP(napi_get_value_bool(env, argv[0], &visible), GET_VALUE_BOOL);
147
148 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
149 CHKPP(jsPointer);
150 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
151 if (argc == 1) {
152 return jsPointerMgr->SetPointerVisible(env, visible);
153 }
154 if (!JsCommon::TypeOf(env, argv[1], napi_function)) {
155 MMI_HILOGE("callback parameter type is invalid");
156 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "callback", "function");
157 return nullptr;
158 }
159 return jsPointerMgr->SetPointerVisible(env, visible, argv[1]);
160 }
161
SetPointerVisibleSync(napi_env env,napi_callback_info info)162 napi_value JsPointerContext::SetPointerVisibleSync(napi_env env, napi_callback_info info)
163 {
164 CALL_DEBUG_ENTER;
165 size_t argc = 1;
166 napi_value argv[1] = { 0 };
167 CHKRP(napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr), GET_CB_INFO);
168 if (argc < 1) {
169 MMI_HILOGE("At least one parameter is required");
170 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "visible", "boolean");
171 return nullptr;
172 }
173 if (!JsCommon::TypeOf(env, argv[0], napi_boolean)) {
174 MMI_HILOGE("visible parameter type is invalid");
175 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "visible", "boolean");
176 return nullptr;
177 }
178 bool visible = true;
179 CHKRP(napi_get_value_bool(env, argv[0], &visible), GET_VALUE_BOOL);
180
181 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
182 CHKPP(jsPointer);
183 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
184 return jsPointerMgr->SetPointerVisibleSync(env, visible);
185 }
186
IsPointerVisible(napi_env env,napi_callback_info info)187 napi_value JsPointerContext::IsPointerVisible(napi_env env, napi_callback_info info)
188 {
189 CALL_DEBUG_ENTER;
190 size_t argc = 1;
191 napi_value argv[1] = { 0 };
192 CHKRP(napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr), GET_CB_INFO);
193
194 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
195 CHKPP(jsPointer);
196 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
197 if (argc < 1) {
198 return jsPointerMgr->IsPointerVisible(env);
199 }
200 if (!JsCommon::TypeOf(env, argv[0], napi_function)) {
201 MMI_HILOGE("callback parameter type is invalid");
202 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "callback", "function");
203 return nullptr;
204 }
205
206 return jsPointerMgr->IsPointerVisible(env, argv[0]);
207 }
208
IsPointerVisibleSync(napi_env env,napi_callback_info info)209 napi_value JsPointerContext::IsPointerVisibleSync(napi_env env, napi_callback_info info)
210 {
211 CALL_DEBUG_ENTER;
212 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
213 CHKPP(jsPointer);
214 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
215 return jsPointerMgr->IsPointerVisibleSync(env);
216 }
217
SetPointerColor(napi_env env,napi_callback_info info)218 napi_value JsPointerContext::SetPointerColor(napi_env env, napi_callback_info info)
219 {
220 CALL_DEBUG_ENTER;
221 size_t argc = 2;
222 napi_value argv[2] = { 0 };
223 CHKRP(napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr), GET_CB_INFO);
224 if (argc < 1) {
225 MMI_HILOGE("At least 1 parameter is required");
226 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "color", "number");
227 return nullptr;
228 }
229 if (!JsCommon::TypeOf(env, argv[0], napi_number)) {
230 MMI_HILOGE("Color parameter type is invalid");
231 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "color", "number");
232 return nullptr;
233 }
234 int32_t color = MIN_POINTER_COLOR;
235 CHKRP(napi_get_value_int32(env, argv[0], &color), GET_VALUE_INT32);
236 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
237 CHKPP(jsPointer);
238 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
239 if (argc == 1) {
240 return jsPointerMgr->SetPointerColor(env, color);
241 }
242 if (!JsCommon::TypeOf(env, argv[1], napi_function)) {
243 MMI_HILOGE("Callback parameter type is invalid");
244 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "callback", "function");
245 return nullptr;
246 }
247 return jsPointerMgr->SetPointerColor(env, color, argv[1]);
248 }
249
GetPointerColor(napi_env env,napi_callback_info info)250 napi_value JsPointerContext::GetPointerColor(napi_env env, napi_callback_info info)
251 {
252 CALL_DEBUG_ENTER;
253 size_t argc = 1;
254 napi_value argv[1] = { 0 };
255 CHKRP(napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr), GET_CB_INFO);
256 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
257 CHKPP(jsPointer);
258 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
259 if (argc < 1) {
260 return jsPointerMgr->GetPointerColor(env);
261 }
262 if (!JsCommon::TypeOf(env, argv[0], napi_function)) {
263 MMI_HILOGE("Callback parameter type is invalid");
264 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "callback", "function");
265 return nullptr;
266 }
267
268 return jsPointerMgr->GetPointerColor(env, argv[0]);
269 }
270
SetPointerColorSync(napi_env env,napi_callback_info info)271 napi_value JsPointerContext::SetPointerColorSync(napi_env env, napi_callback_info info)
272 {
273 CALL_DEBUG_ENTER;
274 size_t argc = 1;
275 napi_value argv[1] = { 0 };
276 CHKRP(napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr), GET_CB_INFO);
277 if (argc < 1) {
278 MMI_HILOGE("At least 1 parameter is required");
279 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "color", "number");
280 return nullptr;
281 }
282 if (!JsCommon::TypeOf(env, argv[0], napi_number)) {
283 MMI_HILOGE("Color parameter type is invalid");
284 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "color", "number");
285 return nullptr;
286 }
287 int32_t color = MIN_POINTER_COLOR;
288 CHKRP(napi_get_value_int32(env, argv[0], &color), GET_VALUE_INT32);
289 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
290 CHKPP(jsPointer);
291 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
292 return jsPointerMgr->SetPointerColorSync(env, color);
293 }
294
GetPointerColorSync(napi_env env,napi_callback_info info)295 napi_value JsPointerContext::GetPointerColorSync(napi_env env, napi_callback_info info)
296 {
297 CALL_DEBUG_ENTER;
298 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
299 CHKPP(jsPointer);
300 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
301 return jsPointerMgr->GetPointerColorSync(env);
302 }
303
SetPointerSpeed(napi_env env,napi_callback_info info)304 napi_value JsPointerContext::SetPointerSpeed(napi_env env, napi_callback_info info)
305 {
306 CALL_DEBUG_ENTER;
307 size_t argc = 2;
308 napi_value argv[2] = { 0 };
309 CHKRP(napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr), GET_CB_INFO);
310 if (argc < 1) {
311 MMI_HILOGE("At least 1 parameter is required");
312 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "speed", "number");
313 return nullptr;
314 }
315 if (!JsCommon::TypeOf(env, argv[0], napi_number)) {
316 MMI_HILOGE("Speed parameter type is invalid");
317 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "speed", "number");
318 return nullptr;
319 }
320 int32_t pointerSpeed = STANDARD_SPEED;
321 CHKRP(napi_get_value_int32(env, argv[0], &pointerSpeed), GET_VALUE_INT32);
322 if (pointerSpeed < MIN_SPEED) {
323 pointerSpeed = MIN_SPEED;
324 } else if (pointerSpeed > MAX_SPEED) {
325 pointerSpeed = MAX_SPEED;
326 }
327 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
328 CHKPP(jsPointer);
329 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
330 if (argc == 1) {
331 return jsPointerMgr->SetPointerSpeed(env, pointerSpeed);
332 }
333 if (!JsCommon::TypeOf(env, argv[1], napi_function)) {
334 MMI_HILOGE("Callback parameter type is invalid");
335 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "callback", "function");
336 return nullptr;
337 }
338 return jsPointerMgr->SetPointerSpeed(env, pointerSpeed, argv[1]);
339 }
340
SetPointerSpeedSync(napi_env env,napi_callback_info info)341 napi_value JsPointerContext::SetPointerSpeedSync(napi_env env, napi_callback_info info)
342 {
343 CALL_DEBUG_ENTER;
344 size_t argc = 1;
345 napi_value argv[1] = { 0 };
346 CHKRP(napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr), GET_CB_INFO);
347 if (argc < 1) {
348 MMI_HILOGE("At least 1 parameter is required");
349 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "speed", "number");
350 return nullptr;
351 }
352 if (!JsCommon::TypeOf(env, argv[0], napi_number)) {
353 MMI_HILOGE("Speed parameter type is invalid");
354 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "speed", "number");
355 return nullptr;
356 }
357 int32_t pointerSpeed = STANDARD_SPEED;
358 CHKRP(napi_get_value_int32(env, argv[0], &pointerSpeed), GET_VALUE_INT32);
359 if (pointerSpeed < MIN_SPEED) {
360 pointerSpeed = MIN_SPEED;
361 } else if (pointerSpeed > MAX_SPEED) {
362 pointerSpeed = MAX_SPEED;
363 }
364 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
365 CHKPP(jsPointer);
366 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
367 return jsPointerMgr->SetPointerSpeedSync(env, pointerSpeed);
368 }
369
GetPointerSpeed(napi_env env,napi_callback_info info)370 napi_value JsPointerContext::GetPointerSpeed(napi_env env, napi_callback_info info)
371 {
372 CALL_DEBUG_ENTER;
373 size_t argc = 1;
374 napi_value argv[1] = { 0 };
375 CHKRP(napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr), GET_CB_INFO);
376 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
377 CHKPP(jsPointer);
378 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
379 if (argc < 1) {
380 return jsPointerMgr->GetPointerSpeed(env);
381 }
382 if (!JsCommon::TypeOf(env, argv[0], napi_function)) {
383 MMI_HILOGE("Callback parameter type is invalid");
384 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "callback", "function");
385 return nullptr;
386 }
387
388 return jsPointerMgr->GetPointerSpeed(env, argv[0]);
389 }
390
GetPointerSpeedSync(napi_env env,napi_callback_info info)391 napi_value JsPointerContext::GetPointerSpeedSync(napi_env env, napi_callback_info info)
392 {
393 CALL_DEBUG_ENTER;
394 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
395 CHKPP(jsPointer);
396 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
397 return jsPointerMgr->GetPointerSpeedSync(env);
398 }
399
SetMouseScrollRows(napi_env env,napi_callback_info info)400 napi_value JsPointerContext::SetMouseScrollRows(napi_env env, napi_callback_info info)
401 {
402 CALL_DEBUG_ENTER;
403 size_t argc = 2;
404 napi_value argv[2] = { 0 };
405 CHKRP(napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr), GET_CB_INFO);
406 if (argc < 1) {
407 MMI_HILOGE("At least 1 parameter is required");
408 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "rows", "number");
409 return nullptr;
410 }
411 if (!JsCommon::TypeOf(env, argv[0], napi_number)) {
412 MMI_HILOGE("Rows parameter type is invalid");
413 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "rows", "number");
414 return nullptr;
415 }
416 int32_t rows = DEFAULT_ROWS;
417 CHKRP(napi_get_value_int32(env, argv[0], &rows), GET_VALUE_INT32);
418 if (rows < MIN_ROWS) {
419 rows = MIN_ROWS;
420 } else if (rows > MAX_ROWS) {
421 rows = MAX_ROWS;
422 }
423 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
424 CHKPP(jsPointer);
425 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
426 if (argc == 1) {
427 return jsPointerMgr->SetMouseScrollRows(env, rows);
428 }
429 if (!JsCommon::TypeOf(env, argv[1], napi_function)) {
430 MMI_HILOGE("Callback parameter type is invalid");
431 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "callback", "function");
432 return nullptr;
433 }
434 return jsPointerMgr->SetMouseScrollRows(env, rows, argv[1]);
435 }
436
GetMouseScrollRows(napi_env env,napi_callback_info info)437 napi_value JsPointerContext::GetMouseScrollRows(napi_env env, napi_callback_info info)
438 {
439 CALL_DEBUG_ENTER;
440 size_t argc = 1;
441 napi_value argv[1] = { 0 };
442 CHKRP(napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr), GET_CB_INFO);
443 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
444 CHKPP(jsPointer);
445 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
446 if (argc < 1) {
447 return jsPointerMgr->GetMouseScrollRows(env);
448 }
449 if (!JsCommon::TypeOf(env, argv[0], napi_function)) {
450 MMI_HILOGE("Callback parameter type is invalid");
451 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "callback", "function");
452 return nullptr;
453 }
454
455 return jsPointerMgr->GetMouseScrollRows(env, argv[0]);
456 }
457
SetPointerLocation(napi_env env,napi_callback_info info)458 napi_value JsPointerContext::SetPointerLocation(napi_env env, napi_callback_info info)
459 {
460 CALL_DEBUG_ENTER;
461 size_t argc = 3;
462 napi_value argv[3] = { 0 };
463 CHKRP(napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr), GET_CB_INFO);
464 if (argc < INPUT_PARAMETER) {
465 MMI_HILOGE("At least 2 parameter is required");
466 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "x", "number");
467 return nullptr;
468 }
469 if (!JsCommon::TypeOf(env, argv[0], napi_number)) {
470 MMI_HILOGE("x parameter type is invalid");
471 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "x", "number");
472 return nullptr;
473 }
474 int32_t x = 0;
475 CHKRP(napi_get_value_int32(env, argv[0], &x), GET_VALUE_INT32);
476 if (x < 0) {
477 MMI_HILOGE("Invalid x");
478 THROWERR_CUSTOM(env, COMMON_PARAMETER_ERROR, "x is invalid");
479 return nullptr;
480 }
481 if (!JsCommon::TypeOf(env, argv[1], napi_number)) {
482 MMI_HILOGE("y parameter type is invalid");
483 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "y", "number");
484 return nullptr;
485 }
486 int32_t y = 0;
487 CHKRP(napi_get_value_int32(env, argv[1], &y), GET_VALUE_INT32);
488 if (y < 0) {
489 MMI_HILOGE("Invalid y");
490 THROWERR_CUSTOM(env, COMMON_PARAMETER_ERROR, "y is invalid");
491 return nullptr;
492 }
493 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
494 CHKPP(jsPointer);
495 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
496 if (argc == INPUT_PARAMETER) {
497 return jsPointerMgr->SetPointerLocation(env, x, y);
498 }
499 if (!JsCommon::TypeOf(env, argv[INPUT_PARAMETER], napi_function)) {
500 MMI_HILOGE("Callback parameter type is invalid");
501 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "callback", "function");
502 return nullptr;
503 }
504 return jsPointerMgr->SetPointerLocation(env, x, y, argv[INPUT_PARAMETER]);
505 }
506
SetCustomCursor(napi_env env,napi_callback_info info)507 napi_value JsPointerContext::SetCustomCursor(napi_env env, napi_callback_info info)
508 {
509 CALL_DEBUG_ENTER;
510 size_t argc = 4;
511 napi_value argv[4] = { 0 };
512 CHKRP(napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr), GET_CB_INFO);
513 if (argc < INPUT_PARAMETER) {
514 MMI_HILOGE("At least 2 parameter is required");
515 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "windowId", "number");
516 return nullptr;
517 }
518
519 int32_t windowId = GetWindowId(env, argv[0]);
520 if (windowId == INVALID_VALUE) {
521 return nullptr;
522 }
523
524 if (!JsCommon::TypeOf(env, argv[1], napi_object)) {
525 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "pixelMap", "napi_object");
526 return nullptr;
527 }
528 std::shared_ptr<Media::PixelMap> pixelMap = Media::PixelMapNapi::GetPixelMap(env, argv[1]);
529 if (pixelMap == nullptr) {
530 THROWERR_CUSTOM(env, COMMON_PARAMETER_ERROR, "pixelMap is invalid");
531 return nullptr;
532 }
533 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
534 CHKPP(jsPointer);
535 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
536 CursorFocus cursorFocus;
537 if (argc == INPUT_PARAMETER) {
538 return jsPointerMgr->SetCustomCursor(env, windowId, (void *)pixelMap.get(), cursorFocus);
539 }
540
541 cursorFocus.x = GetCursorFocusX(env, argv[INPUT_PARAMETER]);
542 if (cursorFocus.x == INVALID_VALUE) {
543 return nullptr;
544 }
545 if (argc == THREE_PARAMETERS) {
546 return jsPointerMgr->SetCustomCursor(env, windowId, (void *)pixelMap.get(), cursorFocus);
547 }
548
549 cursorFocus.y = GetCursorFocusY(env, argv[THREE_PARAMETERS]);
550 if (cursorFocus.y == INVALID_VALUE) {
551 return nullptr;
552 }
553 return jsPointerMgr->SetCustomCursor(env, windowId, (void *)pixelMap.get(), cursorFocus);
554 }
555
SetCustomCursorSync(napi_env env,napi_callback_info info)556 napi_value JsPointerContext::SetCustomCursorSync(napi_env env, napi_callback_info info)
557 {
558 CALL_DEBUG_ENTER;
559 size_t argc = 4;
560 napi_value argv[4] = { 0 };
561 CHKRP(napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr), GET_CB_INFO);
562 if (argc < INPUT_PARAMETER) {
563 MMI_HILOGE("At least 2 parameter is required");
564 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "windowId", "number");
565 return nullptr;
566 }
567
568 int32_t windowId = GetWindowId(env, argv[0]);
569 if (windowId == INVALID_VALUE) {
570 return nullptr;
571 }
572
573 if (!JsCommon::TypeOf(env, argv[1], napi_object)) {
574 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "pixelMap", "napi_object");
575 return nullptr;
576 }
577 std::shared_ptr<Media::PixelMap> pixelMap = Media::PixelMapNapi::GetPixelMap(env, argv[1]);
578 if (pixelMap == nullptr) {
579 THROWERR_CUSTOM(env, COMMON_PARAMETER_ERROR, "pixelMap is invalid");
580 return nullptr;
581 }
582 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
583 CHKPP(jsPointer);
584 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
585 CursorFocus cursorFocus;
586 if (argc == INPUT_PARAMETER) {
587 return jsPointerMgr->SetCustomCursorSync(env, windowId, (void *)pixelMap.get(), cursorFocus);
588 }
589
590 cursorFocus.x = GetCursorFocusX(env, argv[INPUT_PARAMETER]);
591 if (cursorFocus.x == INVALID_VALUE) {
592 return nullptr;
593 }
594 if (argc == THREE_PARAMETERS) {
595 return jsPointerMgr->SetCustomCursorSync(env, windowId, (void *)pixelMap.get(), cursorFocus);
596 }
597
598 cursorFocus.y = GetCursorFocusY(env, argv[THREE_PARAMETERS]);
599 if (cursorFocus.y == INVALID_VALUE) {
600 return nullptr;
601 }
602 return jsPointerMgr->SetCustomCursorSync(env, windowId, (void *)pixelMap.get(), cursorFocus);
603 }
604
GetWindowId(napi_env env,napi_value value)605 int32_t JsPointerContext::GetWindowId(napi_env env, napi_value value)
606 {
607 if (!JsCommon::TypeOf(env, value, napi_number)) {
608 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "windowId", "number");
609 return INVALID_VALUE;
610 }
611 int32_t windowId = 0;
612 CHKRR(napi_get_value_int32(env, value, &windowId), GET_VALUE_INT32, INVALID_VALUE);
613 if (windowId < 0 && windowId != GLOBAL_WINDOW_ID) {
614 THROWERR_CUSTOM(env, COMMON_PARAMETER_ERROR, "Windowid is invalid");
615 return INVALID_VALUE;
616 }
617 return windowId;
618 }
619
GetCursorFocusX(napi_env env,napi_value value)620 int32_t JsPointerContext::GetCursorFocusX(napi_env env, napi_value value)
621 {
622 if (!JsCommon::TypeOf(env, value, napi_number)) {
623 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "focusX", "number");
624 return INVALID_VALUE;
625 }
626 int32_t focusX = 0;
627 CHKRR(napi_get_value_int32(env, value, &focusX), GET_VALUE_INT32, INVALID_VALUE);
628 if (focusX < 0) {
629 THROWERR_CUSTOM(env, COMMON_PARAMETER_ERROR, "focusX is invalid");
630 return INVALID_VALUE;
631 }
632 return focusX;
633 }
634
GetCursorFocusY(napi_env env,napi_value value)635 int32_t JsPointerContext::GetCursorFocusY(napi_env env, napi_value value)
636 {
637 if (!JsCommon::TypeOf(env, value, napi_number)) {
638 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "focusY", "number");
639 return INVALID_VALUE;
640 }
641 int32_t focusY = 0;
642 CHKRR(napi_get_value_int32(env, value, &focusY), GET_VALUE_INT32, INVALID_VALUE);
643 if (focusY < 0) {
644 THROWERR_CUSTOM(env, COMMON_PARAMETER_ERROR, "focusY is invalid");
645 return INVALID_VALUE;
646 }
647 return focusY;
648 }
649
SetPointerSize(napi_env env,napi_callback_info info)650 napi_value JsPointerContext::SetPointerSize(napi_env env, napi_callback_info info)
651 {
652 CALL_DEBUG_ENTER;
653 size_t argc = 2;
654 napi_value argv[2] = { 0 };
655 CHKRP(napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr), GET_CB_INFO);
656 if (argc < 1) {
657 MMI_HILOGE("At least 1 parameter is required");
658 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "size", "number");
659 return nullptr;
660 }
661 if (!JsCommon::TypeOf(env, argv[0], napi_number)) {
662 MMI_HILOGE("Size parameter type is invalid");
663 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "size", "number");
664 return nullptr;
665 }
666 int32_t size = DEFAULT_POINTER_SIZE;
667 CHKRP(napi_get_value_int32(env, argv[0], &size), GET_VALUE_INT32);
668 if (size < MIN_POINTER_SIZE) {
669 size = MIN_POINTER_SIZE;
670 } else if (size > MAX_POINTER_SIZE) {
671 size = MAX_POINTER_SIZE;
672 }
673 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
674 CHKPP(jsPointer);
675 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
676 if (argc == 1) {
677 return jsPointerMgr->SetPointerSize(env, size);
678 }
679 if (!JsCommon::TypeOf(env, argv[1], napi_function)) {
680 MMI_HILOGE("Callback parameter type is invalid");
681 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "callback", "function");
682 return nullptr;
683 }
684 return jsPointerMgr->SetPointerSize(env, size, argv[1]);
685 }
686
GetPointerSize(napi_env env,napi_callback_info info)687 napi_value JsPointerContext::GetPointerSize(napi_env env, napi_callback_info info)
688 {
689 CALL_DEBUG_ENTER;
690 size_t argc = 1;
691 napi_value argv[1] = { 0 };
692 CHKRP(napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr), GET_CB_INFO);
693 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
694 CHKPP(jsPointer);
695 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
696 if (argc < 1) {
697 return jsPointerMgr->GetPointerSize(env);
698 }
699 if (!JsCommon::TypeOf(env, argv[0], napi_function)) {
700 MMI_HILOGE("Callback parameter type is invalid");
701 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "callback", "function");
702 return nullptr;
703 }
704
705 return jsPointerMgr->GetPointerSize(env, argv[0]);
706 }
707
SetPointerSizeSync(napi_env env,napi_callback_info info)708 napi_value JsPointerContext::SetPointerSizeSync(napi_env env, napi_callback_info info)
709 {
710 CALL_DEBUG_ENTER;
711 size_t argc = 1;
712 napi_value argv[1] = { 0 };
713 CHKRP(napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr), GET_CB_INFO);
714 if (argc < 1) {
715 MMI_HILOGE("At least 1 parameter is required");
716 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "size", "number");
717 return nullptr;
718 }
719 if (!JsCommon::TypeOf(env, argv[0], napi_number)) {
720 MMI_HILOGE("Size parameter type is invalid");
721 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "size", "number");
722 return nullptr;
723 }
724 int32_t size = DEFAULT_POINTER_SIZE;
725 CHKRP(napi_get_value_int32(env, argv[0], &size), GET_VALUE_INT32);
726 if (size < MIN_POINTER_SIZE) {
727 size = MIN_POINTER_SIZE;
728 } else if (size > MAX_POINTER_SIZE) {
729 size = MAX_POINTER_SIZE;
730 }
731 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
732 CHKPP(jsPointer);
733 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
734 return jsPointerMgr->SetPointerSizeSync(env, size);
735 }
736
GetPointerSizeSync(napi_env env,napi_callback_info info)737 napi_value JsPointerContext::GetPointerSizeSync(napi_env env, napi_callback_info info)
738 {
739 CALL_DEBUG_ENTER;
740 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
741 CHKPP(jsPointer);
742 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
743 return jsPointerMgr->GetPointerSizeSync(env);
744 }
745
SetPointerStyle(napi_env env,napi_callback_info info)746 napi_value JsPointerContext::SetPointerStyle(napi_env env, napi_callback_info info)
747 {
748 CALL_DEBUG_ENTER;
749 size_t argc = 3;
750 napi_value argv[3] = { 0 };
751 CHKRP(napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr), GET_CB_INFO);
752 if (argc < INPUT_PARAMETER) {
753 MMI_HILOGE("At least 2 parameter is required");
754 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "windowId", "number");
755 return nullptr;
756 }
757 if (!JsCommon::TypeOf(env, argv[0], napi_number)) {
758 MMI_HILOGE("windowId parameter type is invalid");
759 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "windowId", "number");
760 return nullptr;
761 }
762 int32_t windowid = 0;
763 CHKRP(napi_get_value_int32(env, argv[0], &windowid), GET_VALUE_INT32);
764 if (windowid < 0 && windowid != GLOBAL_WINDOW_ID) {
765 MMI_HILOGE("Invalid windowid");
766 THROWERR_CUSTOM(env, COMMON_PARAMETER_ERROR, "Windowid is invalid");
767 return nullptr;
768 }
769 if (!JsCommon::TypeOf(env, argv[1], napi_number)) {
770 MMI_HILOGE("pointerStyle parameter type is invalid");
771 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "pointerStyle", "number");
772 return nullptr;
773 }
774 int32_t pointerStyle = 0;
775 CHKRP(napi_get_value_int32(env, argv[1], &pointerStyle), GET_VALUE_INT32);
776 if ((pointerStyle < DEFAULT && pointerStyle != DEVELOPER_DEFINED_ICON) || pointerStyle > RUNNING) {
777 MMI_HILOGE("Undefined pointer style");
778 THROWERR_CUSTOM(env, COMMON_PARAMETER_ERROR, "Pointer style does not exist");
779 return nullptr;
780 }
781 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
782 CHKPP(jsPointer);
783 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
784 if (argc == INPUT_PARAMETER) {
785 return jsPointerMgr->SetPointerStyle(env, windowid, pointerStyle);
786 }
787 if (!JsCommon::TypeOf(env, argv[INPUT_PARAMETER], napi_function)) {
788 MMI_HILOGE("Callback parameter type is invalid");
789 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "callback", "function");
790 return nullptr;
791 }
792 return jsPointerMgr->SetPointerStyle(env, windowid, pointerStyle, argv[INPUT_PARAMETER]);
793 }
794
SetPointerStyleSync(napi_env env,napi_callback_info info)795 napi_value JsPointerContext::SetPointerStyleSync(napi_env env, napi_callback_info info)
796 {
797 CALL_DEBUG_ENTER;
798 size_t argc = 2;
799 napi_value argv[2] = { 0 };
800 CHKRP(napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr), GET_CB_INFO);
801 if (argc < INPUT_PARAMETER) {
802 MMI_HILOGE("At least 2 parameter is required");
803 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "windowId", "number");
804 return nullptr;
805 }
806 if (!JsCommon::TypeOf(env, argv[0], napi_number)) {
807 MMI_HILOGE("windowId parameter type is invalid");
808 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "windowId", "number");
809 return nullptr;
810 }
811 int32_t windowid = 0;
812 CHKRP(napi_get_value_int32(env, argv[0], &windowid), GET_VALUE_INT32);
813 if (windowid < 0 && windowid != GLOBAL_WINDOW_ID) {
814 MMI_HILOGE("Invalid windowid");
815 THROWERR_CUSTOM(env, COMMON_PARAMETER_ERROR, "Windowid is invalid");
816 return nullptr;
817 }
818 if (!JsCommon::TypeOf(env, argv[1], napi_number)) {
819 MMI_HILOGE("pointerStyle parameter type is invalid");
820 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "pointerStyle", "number");
821 return nullptr;
822 }
823 int32_t pointerStyle = 0;
824 CHKRP(napi_get_value_int32(env, argv[1], &pointerStyle), GET_VALUE_INT32);
825 if ((pointerStyle < DEFAULT && pointerStyle != DEVELOPER_DEFINED_ICON) || pointerStyle > RUNNING) {
826 MMI_HILOGE("Undefined pointer style");
827 THROWERR_CUSTOM(env, COMMON_PARAMETER_ERROR, "Pointer style does not exist");
828 return nullptr;
829 }
830 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
831 CHKPP(jsPointer);
832 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
833 return jsPointerMgr->SetPointerStyleSync(env, windowid, pointerStyle);
834 }
835
GetPointerStyle(napi_env env,napi_callback_info info)836 napi_value JsPointerContext::GetPointerStyle(napi_env env, napi_callback_info info)
837 {
838 CALL_DEBUG_ENTER;
839 size_t argc = 2;
840 napi_value argv[2] = { 0 };
841 CHKRP(napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr), GET_CB_INFO);
842 if (argc < 1) {
843 MMI_HILOGE("At least 1 parameter is required");
844 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "windowId", "number");
845 return nullptr;
846 }
847 if (!JsCommon::TypeOf(env, argv[0], napi_number)) {
848 MMI_HILOGE("windowId parameter type is invalid");
849 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "windowId", "number");
850 return nullptr;
851 }
852 int32_t windowid = 0;
853 CHKRP(napi_get_value_int32(env, argv[0], &windowid), GET_VALUE_INT32);
854 if (windowid < 0 && windowid != GLOBAL_WINDOW_ID) {
855 MMI_HILOGE("Invalid windowid");
856 THROWERR_CUSTOM(env, COMMON_PARAMETER_ERROR, "Windowid is invalid");
857 return nullptr;
858 }
859 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
860 CHKPP(jsPointer);
861 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
862 if (argc == 1) {
863 return jsPointerMgr->GetPointerStyle(env, windowid);
864 }
865 if (!JsCommon::TypeOf(env, argv[1], napi_function)) {
866 MMI_HILOGE("Callback parameter type is invalid");
867 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "callback", "function");
868 return nullptr;
869 }
870 return jsPointerMgr->GetPointerStyle(env, windowid, argv[1]);
871 }
872
GetPointerStyleSync(napi_env env,napi_callback_info info)873 napi_value JsPointerContext::GetPointerStyleSync(napi_env env, napi_callback_info info)
874 {
875 CALL_DEBUG_ENTER;
876 size_t argc = 1;
877 napi_value argv[1] = { 0 };
878 CHKRP(napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr), GET_CB_INFO);
879 if (argc < 1) {
880 MMI_HILOGE("At least 1 parameter is required");
881 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "windowId", "number");
882 return nullptr;
883 }
884 if (!JsCommon::TypeOf(env, argv[0], napi_number)) {
885 MMI_HILOGE("windowId parameter type is invalid");
886 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "windowId", "number");
887 return nullptr;
888 }
889 int32_t windowId = 0;
890 CHKRP(napi_get_value_int32(env, argv[0], &windowId), GET_VALUE_INT32);
891 if (windowId < 0 && windowId != GLOBAL_WINDOW_ID) {
892 MMI_HILOGE("Invalid windowId");
893 THROWERR_CUSTOM(env, COMMON_PARAMETER_ERROR, "WindowId is invalid");
894 return nullptr;
895 }
896 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
897 CHKPP(jsPointer);
898 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
899 return jsPointerMgr->GetPointerStyleSync(env, windowId);
900 }
901
CreatePointerStyle(napi_env env,napi_value exports)902 napi_value JsPointerContext::CreatePointerStyle(napi_env env, napi_value exports)
903 {
904 CALL_DEBUG_ENTER;
905 napi_value defaults = nullptr;
906 CHKRP(napi_create_int32(env, MOUSE_ICON::DEFAULT, &defaults), CREATE_INT32);
907 napi_value east = nullptr;
908 CHKRP(napi_create_int32(env, MOUSE_ICON::EAST, &east), CREATE_INT32);
909 napi_value west = nullptr;
910 CHKRP(napi_create_int32(env, MOUSE_ICON::WEST, &west), CREATE_INT32);
911 napi_value south = nullptr;
912 CHKRP(napi_create_int32(env, MOUSE_ICON::SOUTH, &south), CREATE_INT32);
913 napi_value north = nullptr;
914 CHKRP(napi_create_int32(env, MOUSE_ICON::NORTH, &north), CREATE_INT32);
915 napi_value west_east = nullptr;
916 CHKRP(napi_create_int32(env, MOUSE_ICON::WEST_EAST, &west_east), CREATE_INT32);
917 napi_value north_south = nullptr;
918 CHKRP(napi_create_int32(env, MOUSE_ICON::NORTH_SOUTH, &north_south), CREATE_INT32);
919 napi_value north_east = nullptr;
920 CHKRP(napi_create_int32(env, MOUSE_ICON::NORTH_EAST, &north_east), CREATE_INT32);
921 napi_value north_west = nullptr;
922 CHKRP(napi_create_int32(env, MOUSE_ICON::NORTH_WEST, &north_west), CREATE_INT32);
923 napi_value south_east = nullptr;
924 CHKRP(napi_create_int32(env, MOUSE_ICON::SOUTH_EAST, &south_east), CREATE_INT32);
925 napi_value south_west = nullptr;
926 CHKRP(napi_create_int32(env, MOUSE_ICON::SOUTH_WEST, &south_west), CREATE_INT32);
927 napi_value north_east_south_west = nullptr;
928 CHKRP(napi_create_int32(env, MOUSE_ICON::NORTH_EAST_SOUTH_WEST, &north_east_south_west), CREATE_INT32);
929 napi_value north_west_south_east = nullptr;
930 CHKRP(napi_create_int32(env, MOUSE_ICON::NORTH_WEST_SOUTH_EAST, &north_west_south_east), CREATE_INT32);
931 napi_value cross = nullptr;
932 CHKRP(napi_create_int32(env, MOUSE_ICON::CROSS, &cross), CREATE_INT32);
933 napi_value cursor_copy = nullptr;
934 CHKRP(napi_create_int32(env, MOUSE_ICON::CURSOR_COPY, &cursor_copy), CREATE_INT32);
935 napi_value cursor_forbid = nullptr;
936 CHKRP(napi_create_int32(env, MOUSE_ICON::CURSOR_FORBID, &cursor_forbid), CREATE_INT32);
937 napi_value color_sucker = nullptr;
938 CHKRP(napi_create_int32(env, MOUSE_ICON::COLOR_SUCKER, &color_sucker), CREATE_INT32);
939 napi_value hand_grabbing = nullptr;
940 CHKRP(napi_create_int32(env, MOUSE_ICON::HAND_GRABBING, &hand_grabbing), CREATE_INT32);
941 napi_value hand_open = nullptr;
942 CHKRP(napi_create_int32(env, MOUSE_ICON::HAND_OPEN, &hand_open), CREATE_INT32);
943 napi_value hand_pointing = nullptr;
944 CHKRP(napi_create_int32(env, MOUSE_ICON::HAND_POINTING, &hand_pointing), CREATE_INT32);
945 napi_value help = nullptr;
946 CHKRP(napi_create_int32(env, MOUSE_ICON::HELP, &help), CREATE_INT32);
947 napi_value move = nullptr;
948 CHKRP(napi_create_int32(env, MOUSE_ICON::CURSOR_MOVE, &move), CREATE_INT32);
949 napi_value resize_left_right = nullptr;
950 CHKRP(napi_create_int32(env, MOUSE_ICON::RESIZE_LEFT_RIGHT, &resize_left_right), CREATE_INT32);
951 napi_value resize_up_down = nullptr;
952 CHKRP(napi_create_int32(env, MOUSE_ICON::RESIZE_UP_DOWN, &resize_up_down), CREATE_INT32);
953 napi_value screenshot_choose = nullptr;
954 CHKRP(napi_create_int32(env, MOUSE_ICON::SCREENSHOT_CHOOSE, &screenshot_choose), CREATE_INT32);
955 napi_value screenshot_cursor = nullptr;
956 CHKRP(napi_create_int32(env, MOUSE_ICON::SCREENSHOT_CURSOR, &screenshot_cursor), CREATE_INT32);
957 napi_value text_cursor = nullptr;
958 CHKRP(napi_create_int32(env, MOUSE_ICON::TEXT_CURSOR, &text_cursor), CREATE_INT32);
959 napi_value zoom_in = nullptr;
960 CHKRP(napi_create_int32(env, MOUSE_ICON::ZOOM_IN, &zoom_in), CREATE_INT32);
961 napi_value zoom_out = nullptr;
962 CHKRP(napi_create_int32(env, MOUSE_ICON::ZOOM_OUT, &zoom_out), CREATE_INT32);
963 napi_value middle_btn_east = nullptr;
964 CHKRP(napi_create_int32(env, MOUSE_ICON::MIDDLE_BTN_EAST, &middle_btn_east), CREATE_INT32);
965 napi_value middle_btn_west = nullptr;
966 CHKRP(napi_create_int32(env, MOUSE_ICON::MIDDLE_BTN_WEST, &middle_btn_west), CREATE_INT32);
967 napi_value middle_btn_south = nullptr;
968 CHKRP(napi_create_int32(env, MOUSE_ICON::MIDDLE_BTN_SOUTH, &middle_btn_south), CREATE_INT32);
969 napi_value middle_btn_north = nullptr;
970 CHKRP(napi_create_int32(env, MOUSE_ICON::MIDDLE_BTN_NORTH, &middle_btn_north), CREATE_INT32);
971 napi_value middle_btn_north_south = nullptr;
972 CHKRP(napi_create_int32(env, MOUSE_ICON::MIDDLE_BTN_NORTH_SOUTH, &middle_btn_north_south), CREATE_INT32);
973 napi_value middle_btn_north_east = nullptr;
974 CHKRP(napi_create_int32(env, MOUSE_ICON::MIDDLE_BTN_NORTH_EAST, &middle_btn_north_east), CREATE_INT32);
975 napi_value middle_btn_north_west = nullptr;
976 CHKRP(napi_create_int32(env, MOUSE_ICON::MIDDLE_BTN_NORTH_WEST, &middle_btn_north_west), CREATE_INT32);
977 napi_value middle_btn_south_east = nullptr;
978 CHKRP(napi_create_int32(env, MOUSE_ICON::MIDDLE_BTN_SOUTH_EAST, &middle_btn_south_east), CREATE_INT32);
979 napi_value middle_btn_south_west = nullptr;
980 CHKRP(napi_create_int32(env, MOUSE_ICON::MIDDLE_BTN_SOUTH_WEST, &middle_btn_south_west), CREATE_INT32);
981 napi_value middle_btn_north_south_west_east = nullptr;
982 CHKRP(napi_create_int32(env, MOUSE_ICON::MIDDLE_BTN_NORTH_SOUTH_WEST_EAST,
983 &middle_btn_north_south_west_east), CREATE_INT32);
984 napi_value horizontal_text_cursor = nullptr;
985 CHKRP(napi_create_int32(env, MOUSE_ICON::HORIZONTAL_TEXT_CURSOR, &horizontal_text_cursor), CREATE_INT32);
986 napi_value cursor_cross = nullptr;
987 CHKRP(napi_create_int32(env, MOUSE_ICON::CURSOR_CROSS, &cursor_cross), CREATE_INT32);
988 napi_value cursor_circle = nullptr;
989 CHKRP(napi_create_int32(env, MOUSE_ICON::CURSOR_CIRCLE, &cursor_circle), CREATE_INT32);
990 napi_value loading = nullptr;
991 CHKRP(napi_create_int32(env, MOUSE_ICON::LOADING, &loading), CREATE_INT32);
992 napi_value running = nullptr;
993 CHKRP(napi_create_int32(env, MOUSE_ICON::RUNNING, &running), CREATE_INT32);
994 napi_value developer_defined_icon = nullptr;
995 CHKRP(napi_create_int32(env, MOUSE_ICON::DEVELOPER_DEFINED_ICON, &developer_defined_icon), CREATE_INT32);
996
997 napi_property_descriptor desc[] = {
998 DECLARE_NAPI_STATIC_PROPERTY("DEFAULT", defaults),
999 DECLARE_NAPI_STATIC_PROPERTY("EAST", east),
1000 DECLARE_NAPI_STATIC_PROPERTY("WEST", west),
1001 DECLARE_NAPI_STATIC_PROPERTY("SOUTH", south),
1002 DECLARE_NAPI_STATIC_PROPERTY("NORTH", north),
1003 DECLARE_NAPI_STATIC_PROPERTY("WEST_EAST", west_east),
1004 DECLARE_NAPI_STATIC_PROPERTY("NORTH_SOUTH", north_south),
1005 DECLARE_NAPI_STATIC_PROPERTY("NORTH_EAST", north_east),
1006 DECLARE_NAPI_STATIC_PROPERTY("NORTH_WEST", north_west),
1007 DECLARE_NAPI_STATIC_PROPERTY("SOUTH_EAST", south_east),
1008 DECLARE_NAPI_STATIC_PROPERTY("SOUTH_WEST", south_west),
1009 DECLARE_NAPI_STATIC_PROPERTY("NORTH_EAST_SOUTH_WEST", north_east_south_west),
1010 DECLARE_NAPI_STATIC_PROPERTY("NORTH_WEST_SOUTH_EAST", north_west_south_east),
1011 DECLARE_NAPI_STATIC_PROPERTY("CROSS", cross),
1012 DECLARE_NAPI_STATIC_PROPERTY("CURSOR_COPY", cursor_copy),
1013 DECLARE_NAPI_STATIC_PROPERTY("CURSOR_FORBID", cursor_forbid),
1014 DECLARE_NAPI_STATIC_PROPERTY("COLOR_SUCKER", color_sucker),
1015 DECLARE_NAPI_STATIC_PROPERTY("HAND_GRABBING", hand_grabbing),
1016 DECLARE_NAPI_STATIC_PROPERTY("HAND_OPEN", hand_open),
1017 DECLARE_NAPI_STATIC_PROPERTY("HAND_POINTING", hand_pointing),
1018 DECLARE_NAPI_STATIC_PROPERTY("HELP", help),
1019 DECLARE_NAPI_STATIC_PROPERTY("MOVE", move),
1020 DECLARE_NAPI_STATIC_PROPERTY("RESIZE_LEFT_RIGHT", resize_left_right),
1021 DECLARE_NAPI_STATIC_PROPERTY("RESIZE_UP_DOWN", resize_up_down),
1022 DECLARE_NAPI_STATIC_PROPERTY("SCREENSHOT_CHOOSE", screenshot_choose),
1023 DECLARE_NAPI_STATIC_PROPERTY("SCREENSHOT_CURSOR", screenshot_cursor),
1024 DECLARE_NAPI_STATIC_PROPERTY("TEXT_CURSOR", text_cursor),
1025 DECLARE_NAPI_STATIC_PROPERTY("ZOOM_IN", zoom_in),
1026 DECLARE_NAPI_STATIC_PROPERTY("ZOOM_OUT", zoom_out),
1027 DECLARE_NAPI_STATIC_PROPERTY("MIDDLE_BTN_EAST", middle_btn_east),
1028 DECLARE_NAPI_STATIC_PROPERTY("MIDDLE_BTN_WEST", middle_btn_west),
1029 DECLARE_NAPI_STATIC_PROPERTY("MIDDLE_BTN_SOUTH", middle_btn_south),
1030 DECLARE_NAPI_STATIC_PROPERTY("MIDDLE_BTN_NORTH", middle_btn_north),
1031 DECLARE_NAPI_STATIC_PROPERTY("MIDDLE_BTN_NORTH_SOUTH", middle_btn_north_south),
1032 DECLARE_NAPI_STATIC_PROPERTY("MIDDLE_BTN_NORTH_EAST", middle_btn_north_east),
1033 DECLARE_NAPI_STATIC_PROPERTY("MIDDLE_BTN_NORTH_WEST", middle_btn_north_west),
1034 DECLARE_NAPI_STATIC_PROPERTY("MIDDLE_BTN_SOUTH_EAST", middle_btn_south_east),
1035 DECLARE_NAPI_STATIC_PROPERTY("MIDDLE_BTN_SOUTH_WEST", middle_btn_south_west),
1036 DECLARE_NAPI_STATIC_PROPERTY("MIDDLE_BTN_NORTH_SOUTH_WEST_EAST", middle_btn_north_south_west_east),
1037 DECLARE_NAPI_STATIC_PROPERTY("HORIZONTAL_TEXT_CURSOR", horizontal_text_cursor),
1038 DECLARE_NAPI_STATIC_PROPERTY("CURSOR_CROSS", cursor_cross),
1039 DECLARE_NAPI_STATIC_PROPERTY("CURSOR_CIRCLE", cursor_circle),
1040 DECLARE_NAPI_STATIC_PROPERTY("LOADING", loading),
1041 DECLARE_NAPI_STATIC_PROPERTY("RUNNING", running),
1042 DECLARE_NAPI_STATIC_PROPERTY("DEVELOPER_DEFINED_ICON", developer_defined_icon),
1043 };
1044 napi_value result = nullptr;
1045 CHKRP(napi_define_class(env, "PointerStyle", NAPI_AUTO_LENGTH, EnumConstructor, nullptr,
1046 sizeof(desc) / sizeof(*desc), desc, &result), DEFINE_CLASS);
1047 CHKRP(napi_set_named_property(env, exports, "PointerStyle", result), SET_NAMED_PROPERTY);
1048 return exports;
1049 }
1050
CreateTouchpadRightClickType(napi_env env,napi_value exports)1051 napi_value JsPointerContext::CreateTouchpadRightClickType(napi_env env, napi_value exports)
1052 {
1053 CALL_DEBUG_ENTER;
1054 napi_value touchpad_right_button = nullptr;
1055 CHKRP(napi_create_int32(env, RightClickType::TOUCHPAD_RIGHT_BUTTON, &touchpad_right_button), CREATE_INT32);
1056 napi_value touchpad_left_button = nullptr;
1057 CHKRP(napi_create_int32(env, RightClickType::TOUCHPAD_LEFT_BUTTON, &touchpad_left_button), CREATE_INT32);
1058 napi_value touchpad_two_finger_tap = nullptr;
1059 CHKRP(napi_create_int32(env, RightClickType::TOUCHPAD_TWO_FINGER_TAP, &touchpad_two_finger_tap), CREATE_INT32);
1060
1061 napi_property_descriptor desc[] = {
1062 DECLARE_NAPI_STATIC_PROPERTY("TOUCHPAD_RIGHT_BUTTON", touchpad_right_button),
1063 DECLARE_NAPI_STATIC_PROPERTY("TOUCHPAD_LEFT_BUTTON", touchpad_left_button),
1064 DECLARE_NAPI_STATIC_PROPERTY("TOUCHPAD_TWO_FINGER_TAP", touchpad_two_finger_tap),
1065 };
1066 napi_value result = nullptr;
1067 CHKRP(napi_define_class(env, "RightClickType", NAPI_AUTO_LENGTH, EnumConstructor, nullptr,
1068 sizeof(desc) / sizeof(*desc), desc, &result), DEFINE_CLASS);
1069 CHKRP(napi_set_named_property(env, exports, "RightClickType", result), SET_NAMED_PROPERTY);
1070 return exports;
1071 }
1072
EnumConstructor(napi_env env,napi_callback_info info)1073 napi_value JsPointerContext::EnumConstructor(napi_env env, napi_callback_info info)
1074 {
1075 CALL_DEBUG_ENTER;
1076 size_t argc = 0;
1077 napi_value args[1] = { 0 };
1078 napi_value ret = nullptr;
1079 void *data = nullptr;
1080 CHKRP(napi_get_cb_info(env, info, &argc, args, &ret, &data), GET_CB_INFO);
1081 return ret;
1082 }
1083
EnterCaptureMode(napi_env env,napi_callback_info info)1084 napi_value JsPointerContext::EnterCaptureMode(napi_env env, napi_callback_info info)
1085 {
1086 CALL_DEBUG_ENTER;
1087 size_t argc = 2;
1088 napi_value argv[2] = { 0 };
1089 CHKRP(napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr), GET_CB_INFO);
1090 if (argc < 1 || argc > INPUT_PARAMETER) {
1091 THROWERR(env, "The number of parameters is not as expected");
1092 return nullptr;
1093 }
1094 if (!JsCommon::TypeOf(env, argv[0], napi_number)) {
1095 THROWERR(env, "The first parameter type is invalid");
1096 return nullptr;
1097 }
1098
1099 int32_t windowId = 0;
1100 CHKRP(napi_get_value_int32(env, argv[0], &windowId), GET_VALUE_INT32);
1101 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
1102 CHKPP(jsPointer);
1103 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
1104 if (argc == 1) {
1105 return jsPointerMgr->EnterCaptureMode(env, windowId);
1106 }
1107 if (!JsCommon::TypeOf(env, argv[1], napi_function)) {
1108 THROWERR(env, "The second parameter type is invalid");
1109 return nullptr;
1110 }
1111 return jsPointerMgr->EnterCaptureMode(env, windowId, argv[1]);
1112 }
1113
LeaveCaptureMode(napi_env env,napi_callback_info info)1114 napi_value JsPointerContext::LeaveCaptureMode(napi_env env, napi_callback_info info)
1115 {
1116 CALL_DEBUG_ENTER;
1117 size_t argc = 2;
1118 napi_value argv[2] = { 0 };
1119 CHKRP(napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr), GET_CB_INFO);
1120 if (argc < 1 || argc > INPUT_PARAMETER) {
1121 THROWERR(env, "The number of parameters is not as expected");
1122 return nullptr;
1123 }
1124 if (!JsCommon::TypeOf(env, argv[0], napi_number)) {
1125 THROWERR(env, "The first parameter type is invalid");
1126 return nullptr;
1127 }
1128
1129 int32_t windowId = 0;
1130 CHKRP(napi_get_value_int32(env, argv[0], &windowId), GET_VALUE_INT32);
1131
1132 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
1133 CHKPP(jsPointer);
1134 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
1135 if (argc == 1) {
1136 return jsPointerMgr->LeaveCaptureMode(env, windowId);
1137 }
1138 if (!JsCommon::TypeOf(env, argv[1], napi_function)) {
1139 THROWERR(env, "The second parameter type is invalid");
1140 return nullptr;
1141 }
1142 return jsPointerMgr->LeaveCaptureMode(env, windowId, argv[1]);
1143 }
1144
CreateMousePrimaryButton(napi_env env,napi_value exports)1145 napi_value JsPointerContext::CreateMousePrimaryButton(napi_env env, napi_value exports)
1146 {
1147 CALL_DEBUG_ENTER;
1148 napi_value leftButton = nullptr;
1149 CHKRP(napi_create_int32(env, PrimaryButton::LEFT_BUTTON, &leftButton), CREATE_INT32);
1150 napi_value rightButton = nullptr;
1151 CHKRP(napi_create_int32(env, PrimaryButton::RIGHT_BUTTON, &rightButton), CREATE_INT32);
1152
1153 napi_property_descriptor desc[] = {
1154 DECLARE_NAPI_STATIC_PROPERTY("LEFT", leftButton),
1155 DECLARE_NAPI_STATIC_PROPERTY("RIGHT", rightButton),
1156 };
1157 napi_value result = nullptr;
1158 CHKRP(napi_define_class(env, "PrimaryButton", NAPI_AUTO_LENGTH, EnumConstructor, nullptr,
1159 sizeof(desc) / sizeof(*desc), desc, &result), DEFINE_CLASS);
1160 CHKRP(napi_set_named_property(env, exports, "PrimaryButton", result), SET_NAMED_PROPERTY);
1161 return exports;
1162 }
1163
SetMousePrimaryButton(napi_env env,napi_callback_info info)1164 napi_value JsPointerContext::SetMousePrimaryButton(napi_env env, napi_callback_info info)
1165 {
1166 CALL_DEBUG_ENTER;
1167 size_t argc = 2;
1168 napi_value argv[2] = { 0 };
1169 CHKRP(napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr), GET_CB_INFO);
1170 if (argc < 1) {
1171 MMI_HILOGE("At least one parameter is required");
1172 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "primaryButton", "number");
1173 return nullptr;
1174 }
1175 if (!JsCommon::TypeOf(env, argv[0], napi_number)) {
1176 MMI_HILOGE("primaryButton parameter type is invalid");
1177 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "primaryButton", "number");
1178 return nullptr;
1179 }
1180 int32_t primaryButton = 0;
1181 CHKRP(napi_get_value_int32(env, argv[0], &primaryButton), GET_VALUE_INT32);
1182 if (primaryButton < LEFT_BUTTON || primaryButton > RIGHT_BUTTON) {
1183 MMI_HILOGE("Undefined mouse primary button");
1184 THROWERR_CUSTOM(env, COMMON_PARAMETER_ERROR, "Mouse primary button does not exist");
1185 return nullptr;
1186 }
1187 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
1188 CHKPP(jsPointer);
1189 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
1190 if (argc == 1) {
1191 return jsPointerMgr->SetMousePrimaryButton(env, primaryButton);
1192 }
1193 if (!JsCommon::TypeOf(env, argv[1], napi_function)) {
1194 MMI_HILOGE("Callback parameter type is invalid");
1195 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "callback", "function");
1196 return nullptr;
1197 }
1198 return jsPointerMgr->SetMousePrimaryButton(env, primaryButton, argv[1]);
1199 }
1200
GetMousePrimaryButton(napi_env env,napi_callback_info info)1201 napi_value JsPointerContext::GetMousePrimaryButton(napi_env env, napi_callback_info info)
1202 {
1203 CALL_DEBUG_ENTER;
1204 size_t argc = 1;
1205 napi_value argv[1] = { 0 };
1206 CHKRP(napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr), GET_CB_INFO);
1207 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
1208 CHKPP(jsPointer);
1209 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
1210 if (argc < 1) {
1211 return jsPointerMgr->GetMousePrimaryButton(env);
1212 }
1213 if (!JsCommon::TypeOf(env, argv[0], napi_function)) {
1214 MMI_HILOGE("Callback parameter type is invalid");
1215 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "callback", "function");
1216 return nullptr;
1217 }
1218 return jsPointerMgr->GetMousePrimaryButton(env, argv[0]);
1219 }
1220
SetHoverScrollState(napi_env env,napi_callback_info info)1221 napi_value JsPointerContext::SetHoverScrollState(napi_env env, napi_callback_info info)
1222 {
1223 CALL_DEBUG_ENTER;
1224 size_t argc = 2;
1225 napi_value argv[2] = { 0 };
1226 CHKRP(napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr), GET_CB_INFO);
1227 if (argc < 1) {
1228 MMI_HILOGE("At least one parameter is required");
1229 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "state", "boolean");
1230 return nullptr;
1231 }
1232 if (!JsCommon::TypeOf(env, argv[0], napi_boolean)) {
1233 MMI_HILOGE("State parameter type is invalid");
1234 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "state", "boolean");
1235 return nullptr;
1236 }
1237 bool state = true;
1238 CHKRP(napi_get_value_bool(env, argv[0], &state), GET_VALUE_BOOL);
1239
1240 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
1241 CHKPP(jsPointer);
1242 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
1243 if (argc == 1) {
1244 return jsPointerMgr->SetHoverScrollState(env, state);
1245 }
1246 if (!JsCommon::TypeOf(env, argv[1], napi_function)) {
1247 MMI_HILOGE("Callback parameter type is invalid");
1248 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "callback", "function");
1249 return nullptr;
1250 }
1251 return jsPointerMgr->SetHoverScrollState(env, state, argv[1]);
1252 }
1253
GetHoverScrollState(napi_env env,napi_callback_info info)1254 napi_value JsPointerContext::GetHoverScrollState(napi_env env, napi_callback_info info)
1255 {
1256 CALL_DEBUG_ENTER;
1257 size_t argc = 1;
1258 napi_value argv[1] = { 0 };
1259 CHKRP(napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr), GET_CB_INFO);
1260
1261 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
1262 CHKPP(jsPointer);
1263 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
1264 if (argc < 1) {
1265 return jsPointerMgr->GetHoverScrollState(env);
1266 }
1267 if (!JsCommon::TypeOf(env, argv[0], napi_function)) {
1268 MMI_HILOGE("Callback parameter type is invalid");
1269 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "callback", "function");
1270 return nullptr;
1271 }
1272 return jsPointerMgr->GetHoverScrollState(env, argv[0]);
1273 }
1274
SetTouchpadBoolData(napi_env env,napi_callback_info info,SetTouchpadBoolDataFunc func)1275 napi_value JsPointerContext::SetTouchpadBoolData(napi_env env, napi_callback_info info, SetTouchpadBoolDataFunc func)
1276 {
1277 CALL_DEBUG_ENTER;
1278 if (!func) {
1279 MMI_HILOGE("func is nullptr");
1280 return nullptr;
1281 }
1282 size_t argc = 2;
1283 napi_value argv[2] = { 0 };
1284 CHKRP(napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr), GET_CB_INFO);
1285 if (argc < 1) {
1286 MMI_HILOGE("At least one parameter is required");
1287 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "switchFlag", "boolean");
1288 return nullptr;
1289 }
1290 if (!JsCommon::TypeOf(env, argv[0], napi_boolean)) {
1291 MMI_HILOGE("Bool data parameter type is invalid");
1292 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "switchFlag", "boolean");
1293 return nullptr;
1294 }
1295 bool switchFlag = true;
1296 CHKRP(napi_get_value_bool(env, argv[0], &switchFlag), GET_VALUE_BOOL);
1297
1298 if (argc == 1) {
1299 return func(env, switchFlag, nullptr);
1300 }
1301 if (!JsCommon::TypeOf(env, argv[1], napi_function)) {
1302 MMI_HILOGE("Callback parameter type is invalid");
1303 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "callback", "function");
1304 return nullptr;
1305 }
1306 return func(env, switchFlag, argv[1]);
1307 }
1308
SetTouchpadInt32Data(napi_env env,napi_callback_info info,SetTouchpadInt32DataFunc func,int32_t dataMax,int32_t dataMin)1309 napi_value JsPointerContext::SetTouchpadInt32Data(napi_env env, napi_callback_info info, SetTouchpadInt32DataFunc func,
1310 int32_t dataMax, int32_t dataMin)
1311 {
1312 CALL_DEBUG_ENTER;
1313 size_t argc = 2;
1314 napi_value argv[2] = { 0 };
1315 CHKRP(napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr), GET_CB_INFO);
1316 if (argc < 1) {
1317 MMI_HILOGE("At least 1 parameter is required");
1318 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "data", "number");
1319 return nullptr;
1320 }
1321 if (!JsCommon::TypeOf(env, argv[0], napi_number)) {
1322 MMI_HILOGE("Int32 data parameter type is invalid");
1323 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "data", "number");
1324 return nullptr;
1325 }
1326 int32_t data = 0;
1327 CHKRP(napi_get_value_int32(env, argv[0], &data), GET_VALUE_INT32);
1328 if (data < dataMin) {
1329 data = dataMin;
1330 } else if (data > dataMax) {
1331 data = dataMax;
1332 }
1333
1334 if (argc == 1) {
1335 return func(env, data, nullptr);
1336 }
1337 if (!JsCommon::TypeOf(env, argv[1], napi_function)) {
1338 MMI_HILOGE("Callback parameter type is invalid");
1339 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "callback", "function");
1340 return nullptr;
1341 }
1342
1343 return func(env, data, argv[1]);
1344 }
1345
GetTouchpadData(napi_env env,napi_callback_info info,GetTouchpadFunc func)1346 napi_value JsPointerContext::GetTouchpadData(napi_env env, napi_callback_info info, GetTouchpadFunc func)
1347 {
1348 CALL_DEBUG_ENTER;
1349 size_t argc = 1;
1350 napi_value argv[1] = { 0 };
1351 CHKRP(napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr), GET_CB_INFO);
1352
1353 if (argc < 1) {
1354 return func(env, nullptr);
1355 }
1356 if (!JsCommon::TypeOf(env, argv[0], napi_function)) {
1357 MMI_HILOGE("Callback parameter type is invalid");
1358 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "callback", "function");
1359 return nullptr;
1360 }
1361
1362 return func(env, argv[0]);
1363 }
1364
SetTouchpadScrollSwitch(napi_env env,napi_callback_info info)1365 napi_value JsPointerContext::SetTouchpadScrollSwitch(napi_env env, napi_callback_info info)
1366 {
1367 CALL_DEBUG_ENTER;
1368 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
1369 CHKPP(jsPointer);
1370 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
1371 CHKPP(jsPointerMgr);
1372 auto func = [jsPointerMgr] (napi_env env, bool switchFlag, napi_value handle) -> napi_value {
1373 return jsPointerMgr->SetTouchpadScrollSwitch(env, switchFlag, handle);
1374 };
1375 return SetTouchpadBoolData(env, info, func);
1376 }
1377
GetTouchpadScrollSwitch(napi_env env,napi_callback_info info)1378 napi_value JsPointerContext::GetTouchpadScrollSwitch(napi_env env, napi_callback_info info)
1379 {
1380 CALL_DEBUG_ENTER;
1381 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
1382 CHKPP(jsPointer);
1383 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
1384 CHKPP(jsPointerMgr);
1385 auto func = [jsPointerMgr] (napi_env env, napi_value handle) -> napi_value {
1386 return jsPointerMgr->GetTouchpadScrollSwitch(env, handle);
1387 };
1388 return GetTouchpadData(env, info, func);
1389 }
1390
SetTouchpadScrollDirection(napi_env env,napi_callback_info info)1391 napi_value JsPointerContext::SetTouchpadScrollDirection(napi_env env, napi_callback_info info)
1392 {
1393 CALL_DEBUG_ENTER;
1394 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
1395 CHKPP(jsPointer);
1396 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
1397 CHKPP(jsPointerMgr);
1398 auto func = [jsPointerMgr] (napi_env env, bool state, napi_value handle) -> napi_value {
1399 return jsPointerMgr->SetTouchpadScrollDirection(env, state, handle);
1400 };
1401 return SetTouchpadBoolData(env, info, func);
1402 }
1403
GetTouchpadScrollDirection(napi_env env,napi_callback_info info)1404 napi_value JsPointerContext::GetTouchpadScrollDirection(napi_env env, napi_callback_info info)
1405 {
1406 CALL_DEBUG_ENTER;
1407 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
1408 CHKPP(jsPointer);
1409 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
1410 CHKPP(jsPointerMgr);
1411 auto func = [jsPointerMgr] (napi_env env, napi_value handle) -> napi_value {
1412 return jsPointerMgr->GetTouchpadScrollDirection(env, handle);
1413 };
1414 return GetTouchpadData(env, info, func);
1415 }
1416
SetTouchpadTapSwitch(napi_env env,napi_callback_info info)1417 napi_value JsPointerContext::SetTouchpadTapSwitch(napi_env env, napi_callback_info info)
1418 {
1419 CALL_DEBUG_ENTER;
1420 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
1421 CHKPP(jsPointer);
1422 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
1423 CHKPP(jsPointerMgr);
1424 auto func = [jsPointerMgr] (napi_env env, bool switchFlag, napi_value handle) -> napi_value {
1425 return jsPointerMgr->SetTouchpadTapSwitch(env, switchFlag, handle);
1426 };
1427 return SetTouchpadBoolData(env, info, func);
1428 }
1429
GetTouchpadTapSwitch(napi_env env,napi_callback_info info)1430 napi_value JsPointerContext::GetTouchpadTapSwitch(napi_env env, napi_callback_info info)
1431 {
1432 CALL_DEBUG_ENTER;
1433 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
1434 CHKPP(jsPointer);
1435 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
1436 CHKPP(jsPointerMgr);
1437 auto func = [jsPointerMgr] (napi_env env, napi_value handle) -> napi_value {
1438 return jsPointerMgr->GetTouchpadTapSwitch(env, handle);
1439 };
1440 return GetTouchpadData(env, info, func);
1441 }
1442
SetTouchpadPointerSpeed(napi_env env,napi_callback_info info)1443 napi_value JsPointerContext::SetTouchpadPointerSpeed(napi_env env, napi_callback_info info)
1444 {
1445 CALL_DEBUG_ENTER;
1446 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
1447 CHKPP(jsPointer);
1448 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
1449 CHKPP(jsPointerMgr);
1450 auto func = [jsPointerMgr] (napi_env env, int32_t data, napi_value handle) -> napi_value {
1451 return jsPointerMgr->SetTouchpadPointerSpeed(env, data, handle);
1452 };
1453 return SetTouchpadInt32Data(env, info, func, MAX_SPEED, MIN_SPEED);
1454 }
1455
GetTouchpadPointerSpeed(napi_env env,napi_callback_info info)1456 napi_value JsPointerContext::GetTouchpadPointerSpeed(napi_env env, napi_callback_info info)
1457 {
1458 CALL_DEBUG_ENTER;
1459 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
1460 CHKPP(jsPointer);
1461 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
1462 CHKPP(jsPointerMgr);
1463 auto func = [jsPointerMgr] (napi_env env, napi_value handle) -> napi_value {
1464 return jsPointerMgr->GetTouchpadPointerSpeed(env, handle);
1465 };
1466 return GetTouchpadData(env, info, func);
1467 }
1468
SetTouchpadPinchSwitch(napi_env env,napi_callback_info info)1469 napi_value JsPointerContext::SetTouchpadPinchSwitch(napi_env env, napi_callback_info info)
1470 {
1471 CALL_DEBUG_ENTER;
1472 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
1473 CHKPP(jsPointer);
1474 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
1475 CHKPP(jsPointerMgr);
1476 auto func = [jsPointerMgr] (napi_env env, bool switchFlag, napi_value handle) -> napi_value {
1477 return jsPointerMgr->SetTouchpadPinchSwitch(env, switchFlag, handle);
1478 };
1479 return SetTouchpadBoolData(env, info, func);
1480 }
1481
GetTouchpadPinchSwitch(napi_env env,napi_callback_info info)1482 napi_value JsPointerContext::GetTouchpadPinchSwitch(napi_env env, napi_callback_info info)
1483 {
1484 CALL_DEBUG_ENTER;
1485 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
1486 CHKPP(jsPointer);
1487 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
1488 CHKPP(jsPointerMgr);
1489 auto func = [jsPointerMgr] (napi_env env, napi_value handle) -> napi_value {
1490 return jsPointerMgr->GetTouchpadPinchSwitch(env, handle);
1491 };
1492 return GetTouchpadData(env, info, func);
1493 }
1494
SetTouchpadSwipeSwitch(napi_env env,napi_callback_info info)1495 napi_value JsPointerContext::SetTouchpadSwipeSwitch(napi_env env, napi_callback_info info)
1496 {
1497 CALL_DEBUG_ENTER;
1498 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
1499 CHKPP(jsPointer);
1500 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
1501 CHKPP(jsPointerMgr);
1502 auto func = [jsPointerMgr] (napi_env env, bool switchFlag, napi_value handle) -> napi_value {
1503 return jsPointerMgr->SetTouchpadSwipeSwitch(env, switchFlag, handle);
1504 };
1505 return SetTouchpadBoolData(env, info, func);
1506 }
1507
GetTouchpadSwipeSwitch(napi_env env,napi_callback_info info)1508 napi_value JsPointerContext::GetTouchpadSwipeSwitch(napi_env env, napi_callback_info info)
1509 {
1510 CALL_DEBUG_ENTER;
1511 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
1512 CHKPP(jsPointer);
1513 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
1514 CHKPP(jsPointerMgr);
1515 auto func = [jsPointerMgr] (napi_env env, napi_value handle) -> napi_value {
1516 return jsPointerMgr->GetTouchpadSwipeSwitch(env, handle);
1517 };
1518 return GetTouchpadData(env, info, func);
1519 }
1520
SetTouchpadRightClickType(napi_env env,napi_callback_info info)1521 napi_value JsPointerContext::SetTouchpadRightClickType(napi_env env, napi_callback_info info)
1522 {
1523 CALL_DEBUG_ENTER;
1524 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
1525 CHKPP(jsPointer);
1526 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
1527 CHKPP(jsPointerMgr);
1528 auto func = [jsPointerMgr] (napi_env env, int32_t data, napi_value handle) -> napi_value {
1529 return jsPointerMgr->SetTouchpadRightClickType(env, data, handle);
1530 };
1531 return SetTouchpadInt32Data(env, info, func, MAX_SPEED, MIN_SPEED);
1532 }
1533
GetTouchpadRightClickType(napi_env env,napi_callback_info info)1534 napi_value JsPointerContext::GetTouchpadRightClickType(napi_env env, napi_callback_info info)
1535 {
1536 CALL_DEBUG_ENTER;
1537 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
1538 CHKPP(jsPointer);
1539 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
1540 CHKPP(jsPointerMgr);
1541 auto func = [jsPointerMgr] (napi_env env, napi_value handle) -> napi_value {
1542 return jsPointerMgr->GetTouchpadRightClickType(env, handle);
1543 };
1544 return GetTouchpadData(env, info, func);
1545 }
1546
SetTouchpadRotateSwitch(napi_env env,napi_callback_info info)1547 napi_value JsPointerContext::SetTouchpadRotateSwitch(napi_env env, napi_callback_info info)
1548 {
1549 CALL_DEBUG_ENTER;
1550 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
1551 CHKPP(jsPointer);
1552 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
1553 CHKPP(jsPointerMgr);
1554 auto func = [jsPointerMgr] (napi_env env, bool rotateSwitch, napi_value handle) -> napi_value {
1555 return jsPointerMgr->SetTouchpadRotateSwitch(env, rotateSwitch, handle);
1556 };
1557 return SetTouchpadBoolData(env, info, func);
1558 }
1559
GetTouchpadRotateSwitch(napi_env env,napi_callback_info info)1560 napi_value JsPointerContext::GetTouchpadRotateSwitch(napi_env env, napi_callback_info info)
1561 {
1562 CALL_DEBUG_ENTER;
1563 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
1564 CHKPP(jsPointer);
1565 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
1566 CHKPP(jsPointerMgr);
1567 auto func = [jsPointerMgr] (napi_env env, napi_value handle) -> napi_value {
1568 return jsPointerMgr->GetTouchpadRotateSwitch(env, handle);
1569 };
1570 return GetTouchpadData(env, info, func);
1571 }
1572
SetTouchpadDoubleTapAndDragState(napi_env env,napi_callback_info info)1573 napi_value JsPointerContext::SetTouchpadDoubleTapAndDragState(napi_env env, napi_callback_info info)
1574 {
1575 CALL_DEBUG_ENTER;
1576 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
1577 CHKPP(jsPointer);
1578 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
1579 CHKPP(jsPointerMgr);
1580 auto func = [jsPointerMgr] (napi_env env, bool switchFlag, napi_value handle) -> napi_value {
1581 return jsPointerMgr->SetTouchpadDoubleTapAndDragState(env, switchFlag, handle);
1582 };
1583 return SetTouchpadBoolData(env, info, func);
1584 }
1585
GetTouchpadDoubleTapAndDragState(napi_env env,napi_callback_info info)1586 napi_value JsPointerContext::GetTouchpadDoubleTapAndDragState(napi_env env, napi_callback_info info)
1587 {
1588 CALL_DEBUG_ENTER;
1589 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
1590 CHKPP(jsPointer);
1591 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
1592 CHKPP(jsPointerMgr);
1593 auto func = [jsPointerMgr] (napi_env env, napi_value handle) -> napi_value {
1594 return jsPointerMgr->GetTouchpadDoubleTapAndDragState(env, handle);
1595 };
1596 return GetTouchpadData(env, info, func);
1597 }
1598
EnableHardwareCursorStats(napi_env env,napi_callback_info info)1599 napi_value JsPointerContext::EnableHardwareCursorStats(napi_env env, napi_callback_info info)
1600 {
1601 CALL_DEBUG_ENTER;
1602 size_t argc = 1;
1603 napi_value argv[1];
1604 CHKRP(napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr), GET_CB_INFO);
1605 if (argc == 0) {
1606 MMI_HILOGE("At least one parameter is required");
1607 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "enable", "boolean");
1608 return nullptr;
1609 }
1610 if (!JsCommon::TypeOf(env, argv[0], napi_boolean)) {
1611 MMI_HILOGE("Enable parameter type is invalid");
1612 THROWERR_API9(env, COMMON_PARAMETER_ERROR, "enable", "boolean");
1613 return nullptr;
1614 }
1615 bool enable = true;
1616 CHKRP(napi_get_value_bool(env, argv[0], &enable), GET_VALUE_BOOL);
1617
1618 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
1619 CHKPP(jsPointer);
1620 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
1621 return jsPointerMgr->EnableHardwareCursorStats(env, enable);
1622 }
1623
GetHardwareCursorStats(napi_env env,napi_callback_info info)1624 napi_value JsPointerContext::GetHardwareCursorStats(napi_env env, napi_callback_info info)
1625 {
1626 CALL_DEBUG_ENTER;
1627 size_t argc = 1;
1628 napi_value argv[1];
1629 CHKRP(napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr), GET_CB_INFO);
1630 JsPointerContext *jsPointer = JsPointerContext::GetInstance(env);
1631 CHKPP(jsPointer);
1632 auto jsPointerMgr = jsPointer->GetJsPointerMgr();
1633 if (argc == 0) {
1634 return jsPointerMgr->GetHardwareCursorStats(env);
1635 }
1636 return nullptr;
1637 }
1638
Export(napi_env env,napi_value exports)1639 napi_value JsPointerContext::Export(napi_env env, napi_value exports)
1640 {
1641 CALL_DEBUG_ENTER;
1642 auto instance = CreateInstance(env);
1643 if (instance == nullptr) {
1644 THROWERR(env, "failed to create instance");
1645 return nullptr;
1646 }
1647 napi_property_descriptor desc[] = {
1648 DECLARE_NAPI_STATIC_FUNCTION("setPointerVisible", SetPointerVisible),
1649 DECLARE_NAPI_STATIC_FUNCTION("setPointerVisibleSync", SetPointerVisibleSync),
1650 DECLARE_NAPI_STATIC_FUNCTION("isPointerVisible", IsPointerVisible),
1651 DECLARE_NAPI_STATIC_FUNCTION("isPointerVisibleSync", IsPointerVisibleSync),
1652 DECLARE_NAPI_STATIC_FUNCTION("setPointerColor", SetPointerColor),
1653 DECLARE_NAPI_STATIC_FUNCTION("getPointerColor", GetPointerColor),
1654 DECLARE_NAPI_STATIC_FUNCTION("setPointerColorSync", SetPointerColorSync),
1655 DECLARE_NAPI_STATIC_FUNCTION("getPointerColorSync", GetPointerColorSync),
1656 DECLARE_NAPI_STATIC_FUNCTION("setPointerSpeed", SetPointerSpeed),
1657 DECLARE_NAPI_STATIC_FUNCTION("setPointerSpeedSync", SetPointerSpeedSync),
1658 DECLARE_NAPI_STATIC_FUNCTION("getPointerSpeed", GetPointerSpeed),
1659 DECLARE_NAPI_STATIC_FUNCTION("getPointerSpeedSync", GetPointerSpeedSync),
1660 DECLARE_NAPI_STATIC_FUNCTION("setPointerStyle", SetPointerStyle),
1661 DECLARE_NAPI_STATIC_FUNCTION("setPointerStyleSync", SetPointerStyleSync),
1662 DECLARE_NAPI_STATIC_FUNCTION("getPointerStyle", GetPointerStyle),
1663 DECLARE_NAPI_STATIC_FUNCTION("getPointerStyleSync", GetPointerStyleSync),
1664 DECLARE_NAPI_STATIC_FUNCTION("enterCaptureMode", EnterCaptureMode),
1665 DECLARE_NAPI_STATIC_FUNCTION("leaveCaptureMode", LeaveCaptureMode),
1666 DECLARE_NAPI_STATIC_FUNCTION("setMouseScrollRows", SetMouseScrollRows),
1667 DECLARE_NAPI_STATIC_FUNCTION("getMouseScrollRows", GetMouseScrollRows),
1668 DECLARE_NAPI_STATIC_FUNCTION("setPointerSize", SetPointerSize),
1669 DECLARE_NAPI_STATIC_FUNCTION("getPointerSize", GetPointerSize),
1670 DECLARE_NAPI_STATIC_FUNCTION("setPointerSizeSync", SetPointerSizeSync),
1671 DECLARE_NAPI_STATIC_FUNCTION("getPointerSizeSync", GetPointerSizeSync),
1672 DECLARE_NAPI_STATIC_FUNCTION("setMousePrimaryButton", SetMousePrimaryButton),
1673 DECLARE_NAPI_STATIC_FUNCTION("getMousePrimaryButton", GetMousePrimaryButton),
1674 DECLARE_NAPI_STATIC_FUNCTION("setHoverScrollState", SetHoverScrollState),
1675 DECLARE_NAPI_STATIC_FUNCTION("getHoverScrollState", GetHoverScrollState),
1676 DECLARE_NAPI_STATIC_FUNCTION("setTouchpadScrollSwitch", SetTouchpadScrollSwitch),
1677 DECLARE_NAPI_STATIC_FUNCTION("getTouchpadScrollSwitch", GetTouchpadScrollSwitch),
1678 DECLARE_NAPI_STATIC_FUNCTION("setTouchpadScrollDirection", SetTouchpadScrollDirection),
1679 DECLARE_NAPI_STATIC_FUNCTION("getTouchpadScrollDirection", GetTouchpadScrollDirection),
1680 DECLARE_NAPI_STATIC_FUNCTION("setTouchpadTapSwitch", SetTouchpadTapSwitch),
1681 DECLARE_NAPI_STATIC_FUNCTION("getTouchpadTapSwitch", GetTouchpadTapSwitch),
1682 DECLARE_NAPI_STATIC_FUNCTION("setTouchpadPointerSpeed", SetTouchpadPointerSpeed),
1683 DECLARE_NAPI_STATIC_FUNCTION("getTouchpadPointerSpeed", GetTouchpadPointerSpeed),
1684 DECLARE_NAPI_STATIC_FUNCTION("setTouchpadPinchSwitch", SetTouchpadPinchSwitch),
1685 DECLARE_NAPI_STATIC_FUNCTION("getTouchpadPinchSwitch", GetTouchpadPinchSwitch),
1686 DECLARE_NAPI_STATIC_FUNCTION("setTouchpadSwipeSwitch", SetTouchpadSwipeSwitch),
1687 DECLARE_NAPI_STATIC_FUNCTION("getTouchpadSwipeSwitch", GetTouchpadSwipeSwitch),
1688 DECLARE_NAPI_STATIC_FUNCTION("setTouchpadRightClickType", SetTouchpadRightClickType),
1689 DECLARE_NAPI_STATIC_FUNCTION("getTouchpadRightClickType", GetTouchpadRightClickType),
1690 DECLARE_NAPI_STATIC_FUNCTION("setTouchpadRotateSwitch", SetTouchpadRotateSwitch),
1691 DECLARE_NAPI_STATIC_FUNCTION("getTouchpadRotateSwitch", GetTouchpadRotateSwitch),
1692 DECLARE_NAPI_STATIC_FUNCTION("setTouchpadDoubleTapAndDragState", SetTouchpadDoubleTapAndDragState),
1693 DECLARE_NAPI_STATIC_FUNCTION("getTouchpadDoubleTapAndDragState", GetTouchpadDoubleTapAndDragState),
1694 DECLARE_NAPI_STATIC_FUNCTION("setPointerLocation", SetPointerLocation),
1695 DECLARE_NAPI_STATIC_FUNCTION("setCustomCursor", SetCustomCursor),
1696 DECLARE_NAPI_STATIC_FUNCTION("setCustomCursorSync", SetCustomCursorSync),
1697 DECLARE_NAPI_STATIC_FUNCTION("enableHardwareCursorStats", EnableHardwareCursorStats),
1698 DECLARE_NAPI_STATIC_FUNCTION("getHardwareCursorStats", GetHardwareCursorStats),
1699 };
1700 CHKRP(napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc), DEFINE_PROPERTIES);
1701 if (CreatePointerStyle(env, exports) == nullptr) {
1702 THROWERR(env, "Failed to create pointer style");
1703 return nullptr;
1704 }
1705 if (CreateMousePrimaryButton(env, exports) == nullptr) {
1706 THROWERR(env, "Failed to create mouse primary button");
1707 return nullptr;
1708 }
1709 if (CreateTouchpadRightClickType(env, exports) == nullptr) {
1710 THROWERR(env, "Failed to create touchpad right click type");
1711 return nullptr;
1712 }
1713 return exports;
1714 }
1715 } // namespace MMI
1716 } // namespace OHOS
1717