1 /*
2 * Copyright (c) 2021-2024 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 "pointer_event.h"
17
18 #include <iomanip>
19
20 #include "mmi_log.h"
21
22 #undef MMI_LOG_TAG
23 #define MMI_LOG_TAG "PointerEvent"
24
25 using namespace OHOS::HiviewDFX;
26 namespace OHOS {
27 namespace MMI {
28 namespace {
29 constexpr double MAX_PRESSURE { 1.0 };
30 constexpr size_t MAX_N_PRESSED_BUTTONS { 10 };
31 constexpr size_t MAX_N_POINTER_ITEMS { 10 };
32 constexpr int32_t SIMULATE_EVENT_START_ID { 10000 };
33 #ifdef OHOS_BUILD_ENABLE_SECURITY_COMPONENT
34 constexpr size_t MAX_N_ENHANCE_DATA_SIZE { 64 };
35 #endif // OHOS_BUILD_ENABLE_SECURITY_COMPONENT
36 constexpr size_t MAX_N_BUFFER_SIZE { 512 };
37 } // namespace
38
from(std::shared_ptr<InputEvent> inputEvent)39 std::shared_ptr<PointerEvent> PointerEvent::from(std::shared_ptr<InputEvent> inputEvent)
40 {
41 return nullptr;
42 }
43
PointerItem()44 PointerEvent::PointerItem::PointerItem() {}
45
~PointerItem()46 PointerEvent::PointerItem::~PointerItem() {}
47
GetPointerId() const48 int32_t PointerEvent::PointerItem::GetPointerId() const
49 {
50 return pointerId_;
51 }
52
SetPointerId(int32_t pointerId)53 void PointerEvent::PointerItem::SetPointerId(int32_t pointerId)
54 {
55 pointerId_ = pointerId;
56 }
57
GetDownTime() const58 int64_t PointerEvent::PointerItem::GetDownTime() const
59 {
60 return downTime_;
61 }
62
SetDownTime(int64_t downTime)63 void PointerEvent::PointerItem::SetDownTime(int64_t downTime)
64 {
65 downTime_ = downTime;
66 }
67
IsPressed() const68 bool PointerEvent::PointerItem::IsPressed() const
69 {
70 return pressed_;
71 }
72
SetPressed(bool pressed)73 void PointerEvent::PointerItem::SetPressed(bool pressed)
74 {
75 pressed_ = pressed;
76 }
77
GetDisplayX() const78 int32_t PointerEvent::PointerItem::GetDisplayX() const
79 {
80 return displayX_;
81 }
82
SetDisplayX(int32_t x)83 void PointerEvent::PointerItem::SetDisplayX(int32_t x)
84 {
85 displayX_ = x;
86 }
87
GetDisplayY() const88 int32_t PointerEvent::PointerItem::GetDisplayY() const
89 {
90 return displayY_;
91 }
92
SetDisplayY(int32_t y)93 void PointerEvent::PointerItem::SetDisplayY(int32_t y)
94 {
95 displayY_ = y;
96 }
97
GetWindowX() const98 int32_t PointerEvent::PointerItem::GetWindowX() const
99 {
100 return windowX_;
101 }
102
SetWindowX(int32_t x)103 void PointerEvent::PointerItem::SetWindowX(int32_t x)
104 {
105 windowX_ = x;
106 }
107
GetWindowY() const108 int32_t PointerEvent::PointerItem::GetWindowY() const
109 {
110 return windowY_;
111 }
112
SetWindowY(int32_t y)113 void PointerEvent::PointerItem::SetWindowY(int32_t y)
114 {
115 windowY_ = y;
116 }
117
GetDisplayXPos() const118 double PointerEvent::PointerItem::GetDisplayXPos() const
119 {
120 return displayXPos_;
121 }
122
SetDisplayXPos(double x)123 void PointerEvent::PointerItem::SetDisplayXPos(double x)
124 {
125 displayXPos_ = x;
126 }
127
GetDisplayYPos() const128 double PointerEvent::PointerItem::GetDisplayYPos() const
129 {
130 return displayYPos_;
131 }
132
SetDisplayYPos(double y)133 void PointerEvent::PointerItem::SetDisplayYPos(double y)
134 {
135 displayYPos_ = y;
136 }
137
GetWindowXPos() const138 double PointerEvent::PointerItem::GetWindowXPos() const
139 {
140 return windowXPos_;
141 }
142
SetWindowXPos(double x)143 void PointerEvent::PointerItem::SetWindowXPos(double x)
144 {
145 windowXPos_ = x;
146 }
147
GetWindowYPos() const148 double PointerEvent::PointerItem::GetWindowYPos() const
149 {
150 return windowYPos_;
151 }
152
SetWindowYPos(double y)153 void PointerEvent::PointerItem::SetWindowYPos(double y)
154 {
155 windowYPos_ = y;
156 }
157
GetFixedDisplayX() const158 int32_t PointerEvent::PointerItem::GetFixedDisplayX() const
159 {
160 return fixedDisplayX_;
161 }
162
SetFixedDisplayX(int32_t fixedDisplayX)163 void PointerEvent::PointerItem::SetFixedDisplayX(int32_t fixedDisplayX)
164 {
165 fixedDisplayX_ = fixedDisplayX;
166 }
167
GetFixedDisplayY() const168 int32_t PointerEvent::PointerItem::GetFixedDisplayY() const
169 {
170 return fixedDisplayY_;
171 }
172
SetFixedDisplayY(int32_t fixedDisplayY)173 void PointerEvent::PointerItem::SetFixedDisplayY(int32_t fixedDisplayY)
174 {
175 fixedDisplayY_ = fixedDisplayY;
176 }
177
GetWidth() const178 int32_t PointerEvent::PointerItem::GetWidth() const
179 {
180 return width_;
181 }
182
SetWidth(int32_t width)183 void PointerEvent::PointerItem::SetWidth(int32_t width)
184 {
185 width_ = width;
186 }
187
GetHeight() const188 int32_t PointerEvent::PointerItem::GetHeight() const
189 {
190 return height_;
191 }
192
SetHeight(int32_t height)193 void PointerEvent::PointerItem::SetHeight(int32_t height)
194 {
195 height_ = height;
196 }
197
GetTiltX() const198 double PointerEvent::PointerItem::GetTiltX() const
199 {
200 return tiltX_;
201 }
202
SetTiltX(double tiltX)203 void PointerEvent::PointerItem::SetTiltX(double tiltX)
204 {
205 tiltX_ = tiltX;
206 }
207
GetTiltY() const208 double PointerEvent::PointerItem::GetTiltY() const
209 {
210 return tiltY_;
211 }
212
SetTiltY(double tiltY)213 void PointerEvent::PointerItem::SetTiltY(double tiltY)
214 {
215 tiltY_ = tiltY;
216 }
217
GetToolDisplayX() const218 int32_t PointerEvent::PointerItem::GetToolDisplayX() const
219 {
220 return toolDisplayX_;
221 }
222
SetToolDisplayX(int32_t x)223 void PointerEvent::PointerItem::SetToolDisplayX(int32_t x)
224 {
225 toolDisplayX_ = x;
226 }
227
GetToolDisplayY() const228 int32_t PointerEvent::PointerItem::GetToolDisplayY() const
229 {
230 return toolDisplayY_;
231 }
232
SetToolDisplayY(int32_t y)233 void PointerEvent::PointerItem::SetToolDisplayY(int32_t y)
234 {
235 toolDisplayY_ = y;
236 }
237
GetToolWindowX() const238 int32_t PointerEvent::PointerItem::GetToolWindowX() const
239 {
240 return toolWindowX_;
241 }
242
SetToolWindowX(int32_t x)243 void PointerEvent::PointerItem::SetToolWindowX(int32_t x)
244 {
245 toolWindowX_ = x;
246 }
247
GetToolWindowY() const248 int32_t PointerEvent::PointerItem::GetToolWindowY() const
249 {
250 return toolWindowY_;
251 }
252
SetToolWindowY(int32_t y)253 void PointerEvent::PointerItem::SetToolWindowY(int32_t y)
254 {
255 toolWindowY_ = y;
256 }
257
GetToolWidth() const258 int32_t PointerEvent::PointerItem::GetToolWidth() const
259 {
260 return toolWidth_;
261 }
262
SetToolWidth(int32_t width)263 void PointerEvent::PointerItem::SetToolWidth(int32_t width)
264 {
265 toolWidth_ = width;
266 }
267
GetToolHeight() const268 int32_t PointerEvent::PointerItem::GetToolHeight() const
269 {
270 return toolHeight_;
271 }
272
SetToolHeight(int32_t height)273 void PointerEvent::PointerItem::SetToolHeight(int32_t height)
274 {
275 toolHeight_ = height;
276 }
277
GetPressure() const278 double PointerEvent::PointerItem::GetPressure() const
279 {
280 return pressure_;
281 }
282
SetPressure(double pressure)283 void PointerEvent::PointerItem::SetPressure(double pressure)
284 {
285 if (pressure < 0.0) {
286 pressure_ = 0.0;
287 } else if (TOOL_TYPE_PEN == GetToolType()) {
288 pressure_ = pressure >= MAX_PRESSURE ? MAX_PRESSURE : pressure;
289 } else {
290 pressure_ = pressure;
291 }
292 }
293
GetLongAxis() const294 int32_t PointerEvent::PointerItem::GetLongAxis() const
295 {
296 return longAxis_;
297 }
298
SetLongAxis(int32_t longAxis)299 void PointerEvent::PointerItem::SetLongAxis(int32_t longAxis)
300 {
301 longAxis_ = longAxis;
302 }
303
GetShortAxis() const304 int32_t PointerEvent::PointerItem::GetShortAxis() const
305 {
306 return shortAxis_;
307 }
308
SetShortAxis(int32_t shortAxis)309 void PointerEvent::PointerItem::SetShortAxis(int32_t shortAxis)
310 {
311 shortAxis_ = shortAxis;
312 }
313
GetDeviceId() const314 int32_t PointerEvent::PointerItem::GetDeviceId() const
315 {
316 return deviceId_;
317 }
318
SetDeviceId(int32_t deviceId)319 void PointerEvent::PointerItem::SetDeviceId(int32_t deviceId)
320 {
321 deviceId_ = deviceId;
322 }
323
GetToolType() const324 int32_t PointerEvent::PointerItem::GetToolType() const
325 {
326 return toolType_;
327 }
328
SetToolType(int32_t toolType)329 void PointerEvent::PointerItem::SetToolType(int32_t toolType)
330 {
331 toolType_ = toolType;
332 }
333
GetTargetWindowId() const334 int32_t PointerEvent::PointerItem::GetTargetWindowId() const
335 {
336 return targetWindowId_;
337 }
338
SetTargetWindowId(int32_t windowId)339 void PointerEvent::PointerItem::SetTargetWindowId(int32_t windowId)
340 {
341 targetWindowId_ = windowId;
342 }
343
GetRawDx() const344 int32_t PointerEvent::PointerItem::GetRawDx() const
345 {
346 return rawDx_;
347 }
348
SetRawDx(int32_t rawDx)349 void PointerEvent::PointerItem::SetRawDx(int32_t rawDx)
350 {
351 rawDx_ = rawDx;
352 }
353
GetOriginPointerId() const354 int32_t PointerEvent::PointerItem::GetOriginPointerId() const
355 {
356 return originPointerId_;
357 }
358
SetOriginPointerId(int32_t originPointerId)359 void PointerEvent::PointerItem::SetOriginPointerId(int32_t originPointerId)
360 {
361 originPointerId_ = originPointerId;
362 }
363
GetRawDy() const364 int32_t PointerEvent::PointerItem::GetRawDy() const
365 {
366 return rawDy_;
367 }
368
SetRawDy(int32_t rawDy)369 void PointerEvent::PointerItem::SetRawDy(int32_t rawDy)
370 {
371 rawDy_ = rawDy;
372 }
373
GetRawDisplayX() const374 int32_t PointerEvent::PointerItem::GetRawDisplayX() const
375 {
376 return rawDisplayX_;
377 }
378
SetRawDisplayX(int32_t rawDisplayX)379 void PointerEvent::PointerItem::SetRawDisplayX(int32_t rawDisplayX)
380 {
381 rawDisplayX_ = rawDisplayX;
382 }
383
GetRawDisplayY() const384 int32_t PointerEvent::PointerItem::GetRawDisplayY() const
385 {
386 return rawDisplayY_;
387 }
388
SetRawDisplayY(int32_t rawDisplayY)389 void PointerEvent::PointerItem::SetRawDisplayY(int32_t rawDisplayY)
390 {
391 rawDisplayY_ = rawDisplayY;
392 }
393
GetBlobId() const394 int32_t PointerEvent::PointerItem::GetBlobId() const
395 {
396 return blobId_;
397 }
398
SetBlobId(int32_t blobId)399 void PointerEvent::PointerItem::SetBlobId(int32_t blobId)
400 {
401 blobId_ = blobId;
402 }
403
WriteToParcel(Parcel & out) const404 bool PointerEvent::PointerItem::WriteToParcel(Parcel &out) const
405 {
406 return (
407 out.WriteInt32(pointerId_) &&
408 out.WriteInt64(downTime_) &&
409 out.WriteBool(pressed_) &&
410 out.WriteInt32(displayX_) &&
411 out.WriteInt32(displayY_) &&
412 out.WriteInt32(windowX_) &&
413 out.WriteInt32(windowY_) &&
414 out.WriteInt32(width_) &&
415 out.WriteInt32(height_) &&
416 out.WriteInt32(toolDisplayX_) &&
417 out.WriteInt32(toolDisplayY_) &&
418 out.WriteInt32(toolWindowX_) &&
419 out.WriteInt32(toolWindowY_) &&
420 out.WriteInt32(toolWidth_) &&
421 out.WriteInt32(toolHeight_) &&
422 out.WriteDouble(tiltX_) &&
423 out.WriteDouble(tiltY_) &&
424 out.WriteDouble(pressure_) &&
425 out.WriteInt32(longAxis_) &&
426 out.WriteInt32(shortAxis_) &&
427 out.WriteInt32(toolType_) &&
428 out.WriteInt32(deviceId_) &&
429 out.WriteInt32(rawDx_) &&
430 out.WriteInt32(rawDy_) &&
431 out.WriteInt32(rawDisplayX_) &&
432 out.WriteInt32(rawDisplayY_) &&
433 out.WriteInt32(targetWindowId_) &&
434 out.WriteInt32(originPointerId_) &&
435 out.WriteDouble(displayXPos_) &&
436 out.WriteDouble(displayYPos_) &&
437 out.WriteDouble(windowXPos_) &&
438 out.WriteDouble(windowYPos_) &&
439 out.WriteInt32(blobId_)
440 #ifdef OHOS_BUILD_ENABLE_ONE_HAND_MODE
441 && out.WriteInt32(fixedDisplayX_) &&
442 out.WriteInt32(fixedDisplayY_)
443 #endif // OHOS_BUILD_ENABLE_ONE_HAND_MODE
444 );
445 }
446
ReadFromParcel(Parcel & in)447 bool PointerEvent::PointerItem::ReadFromParcel(Parcel &in)
448 {
449 return (
450 in.ReadInt32(pointerId_) &&
451 in.ReadInt64(downTime_) &&
452 in.ReadBool(pressed_) &&
453 in.ReadInt32(displayX_) &&
454 in.ReadInt32(displayY_) &&
455 in.ReadInt32(windowX_) &&
456 in.ReadInt32(windowY_) &&
457 in.ReadInt32(width_) &&
458 in.ReadInt32(height_) &&
459 in.ReadInt32(toolDisplayX_) &&
460 in.ReadInt32(toolDisplayY_) &&
461 in.ReadInt32(toolWindowX_) &&
462 in.ReadInt32(toolWindowY_) &&
463 in.ReadInt32(toolWidth_) &&
464 in.ReadInt32(toolHeight_) &&
465 in.ReadDouble(tiltX_) &&
466 in.ReadDouble(tiltY_) &&
467 in.ReadDouble(pressure_) &&
468 in.ReadInt32(longAxis_) &&
469 in.ReadInt32(shortAxis_) &&
470 in.ReadInt32(toolType_) &&
471 in.ReadInt32(deviceId_) &&
472 in.ReadInt32(rawDx_) &&
473 in.ReadInt32(rawDy_) &&
474 in.ReadInt32(rawDisplayX_) &&
475 in.ReadInt32(rawDisplayY_) &&
476 in.ReadInt32(targetWindowId_) &&
477 in.ReadInt32(originPointerId_) &&
478 in.ReadDouble(displayXPos_) &&
479 in.ReadDouble(displayYPos_) &&
480 in.ReadDouble(windowXPos_) &&
481 in.ReadDouble(windowYPos_) &&
482 in.ReadInt32(blobId_)
483 #ifdef OHOS_BUILD_ENABLE_ONE_HAND_MODE
484 && in.ReadInt32(fixedDisplayX_) &&
485 in.ReadInt32(fixedDisplayY_)
486 #endif // OHOS_BUILD_ENABLE_ONE_HAND_MODE
487 );
488 }
489
PointerEvent(int32_t eventType)490 PointerEvent::PointerEvent(int32_t eventType) : InputEvent(eventType) {}
491
PointerEvent(const PointerEvent & other)492 PointerEvent::PointerEvent(const PointerEvent& other)
493 : InputEvent(other), pointerId_(other.pointerId_), pointers_(other.pointers_),
494 pressedButtons_(other.pressedButtons_), sourceType_(other.sourceType_),
495 pointerAction_(other.pointerAction_), originPointerAction_(other.originPointerAction_),
496 buttonId_(other.buttonId_), fingerCount_(other.fingerCount_), pullId_(other.pullId_), zOrder_(other.zOrder_),
497 axes_(other.axes_), axisValues_(other.axisValues_), velocity_(other.velocity_),
498 pressedKeys_(other.pressedKeys_), buffer_(other.buffer_), axisEventType_(other.axisEventType_),
499 #ifdef OHOS_BUILD_ENABLE_FINGERPRINT
500 fingerprintDistanceX_(other.fingerprintDistanceX_), fingerprintDistanceY_(other.fingerprintDistanceY_),
501 #endif // OHOS_BUILD_ENABLE_FINGERPRINT
502 dispatchTimes_(other.dispatchTimes_),
503 autoToVirtualScreen_(other.autoToVirtualScreen_),
504 fixedMode_(other.fixedMode_),
505 handOption_(other.handOption_)
506 {}
507
~PointerEvent()508 PointerEvent::~PointerEvent() {}
509
Create()510 std::shared_ptr<PointerEvent> PointerEvent::Create()
511 {
512 auto event = std::shared_ptr<PointerEvent>(new (std::nothrow) PointerEvent(InputEvent::EVENT_TYPE_POINTER));
513 CHKPP(event);
514 return event;
515 }
516
Reset()517 void PointerEvent::Reset()
518 {
519 InputEvent::Reset();
520 handOption_ = -1;
521 pointerId_ = -1;
522 pointers_.clear();
523 pressedButtons_.clear();
524 sourceType_ = SOURCE_TYPE_UNKNOWN;
525 pointerAction_ = POINTER_ACTION_UNKNOWN;
526 originPointerAction_ = POINTER_ACTION_UNKNOWN;
527 buttonId_ = -1;
528 fingerCount_ = 0;
529 zOrder_ = -1.0f;
530 dispatchTimes_ = 0;
531 axes_ = 0U;
532 axisValues_.fill(0.0);
533 velocity_ = 0.0;
534 axisEventType_ = AXIS_EVENT_TYPE_UNKNOWN;
535 pressedKeys_.clear();
536 #ifdef OHOS_BUILD_ENABLE_FINGERPRINT
537 fingerprintDistanceX_ = 0.0;
538 fingerprintDistanceY_ = 0.0;
539 #endif // OHOS_BUILD_ENABLE_FINGERPRINT
540 }
541
GetPointerAction() const542 int32_t PointerEvent::GetPointerAction() const
543 {
544 return pointerAction_;
545 }
546
SetPointerAction(int32_t pointerAction)547 void PointerEvent::SetPointerAction(int32_t pointerAction)
548 {
549 pointerAction_ = pointerAction;
550 originPointerAction_ = pointerAction;
551 }
552
GetOriginPointerAction() const553 int32_t PointerEvent::GetOriginPointerAction() const
554 {
555 return originPointerAction_;
556 }
557
SetOriginPointerAction(int32_t pointerAction)558 void PointerEvent::SetOriginPointerAction(int32_t pointerAction)
559 {
560 originPointerAction_ = pointerAction;
561 }
562
GetHandOption() const563 int32_t PointerEvent::GetHandOption() const
564 {
565 return handOption_;
566 }
567
SetHandOption(int32_t handOption)568 void PointerEvent::SetHandOption(int32_t handOption)
569 {
570 handOption_ = handOption;
571 }
572
573 static const std::unordered_map<int32_t, std::string> pointerActionMap = {
574 { PointerEvent::POINTER_ACTION_CANCEL, "cancel" },
575 { PointerEvent::POINTER_ACTION_DOWN, "down" },
576 { PointerEvent::POINTER_ACTION_MOVE, "move" },
577 { PointerEvent::POINTER_ACTION_UP, "up" },
578 { PointerEvent::POINTER_ACTION_AXIS_BEGIN, "axis-begin" },
579 { PointerEvent::POINTER_ACTION_AXIS_UPDATE, "axis-update" },
580 { PointerEvent::POINTER_ACTION_AXIS_END, "axis-end" },
581 { PointerEvent::POINTER_ACTION_BUTTON_DOWN, "button-down" },
582 { PointerEvent::POINTER_ACTION_BUTTON_UP, "button-up" },
583 { PointerEvent::POINTER_ACTION_ENTER_WINDOW, "enter-window" },
584 { PointerEvent::POINTER_ACTION_LEAVE_WINDOW, "leave-window" },
585 { PointerEvent::POINTER_ACTION_PULL_DOWN, "pull-down" },
586 { PointerEvent::POINTER_ACTION_PULL_MOVE, "pull-move" },
587 { PointerEvent::POINTER_ACTION_PULL_UP, "pull-up" },
588 { PointerEvent::POINTER_ACTION_PULL_IN_WINDOW, "pull-in-window" },
589 { PointerEvent::POINTER_ACTION_PULL_OUT_WINDOW, "pull-out-window" },
590 { PointerEvent::POINTER_ACTION_SWIPE_BEGIN, "swipe-begin" },
591 { PointerEvent::POINTER_ACTION_SWIPE_UPDATE, "swipe-update" },
592 { PointerEvent::POINTER_ACTION_SWIPE_END, "swipe-end" },
593 { PointerEvent::POINTER_ACTION_ROTATE_BEGIN, "rotate-begin" },
594 { PointerEvent::POINTER_ACTION_ROTATE_UPDATE, "rotate-update" },
595 { PointerEvent::POINTER_ACTION_ROTATE_END, "rotate-end" },
596 { PointerEvent::POINTER_ACTION_TRIPTAP, "touchpad-triptap" },
597 { PointerEvent::POINTER_ACTION_QUADTAP, "quadtap" },
598 { PointerEvent::POINTER_ACTION_HOVER_MOVE, "hover-move" },
599 { PointerEvent::POINTER_ACTION_HOVER_ENTER, "hover-enter" },
600 { PointerEvent::POINTER_ACTION_HOVER_EXIT, "hover-exit" },
601 { PointerEvent::POINTER_ACTION_FINGERPRINT_DOWN, "fingerprint-down" },
602 { PointerEvent::POINTER_ACTION_FINGERPRINT_UP, "fingerprint-up" },
603 { PointerEvent::POINTER_ACTION_FINGERPRINT_SLIDE, "fingerprint-slide" },
604 { PointerEvent::POINTER_ACTION_FINGERPRINT_RETOUCH, "fingerprint-retouch" },
605 { PointerEvent::POINTER_ACTION_FINGERPRINT_CLICK, "fingerprint-click" },
606 { PointerEvent::POINTER_ACTION_PROXIMITY_IN, "pen-proximity-in" },
607 { PointerEvent::POINTER_ACTION_PROXIMITY_OUT, "pen-proximity-out" },
608 };
609
DumpPointerAction() const610 const char* PointerEvent::DumpPointerAction() const
611 {
612 auto it = pointerActionMap.find(pointerAction_);
613 if (it != pointerActionMap.end()) {
614 return it->second.c_str();
615 }
616 return "unknown";
617 }
618
GetPointerId() const619 int32_t PointerEvent::GetPointerId() const
620 {
621 return pointerId_;
622 }
623
SetPointerId(int32_t pointerId)624 void PointerEvent::SetPointerId(int32_t pointerId)
625 {
626 pointerId_ = pointerId;
627 }
628
GetPointerItem(int32_t pointerId,PointerItem & pointerItem)629 bool PointerEvent::GetPointerItem(int32_t pointerId, PointerItem &pointerItem)
630 {
631 for (const auto &item : pointers_) {
632 if (item.GetPointerId() == pointerId) {
633 pointerItem = item;
634 return true;
635 }
636 }
637 return false;
638 }
639
RemovePointerItem(int32_t pointerId)640 void PointerEvent::RemovePointerItem(int32_t pointerId)
641 {
642 for (auto it = pointers_.begin(); it != pointers_.end(); ++it) {
643 if (it->GetPointerId() == pointerId) {
644 pointers_.erase(it);
645 break;
646 }
647 }
648 }
649
RemoveAllPointerItems()650 void PointerEvent::RemoveAllPointerItems()
651 {
652 pointers_.clear();
653 }
654
AddPointerItem(PointerItem & pointerItem)655 void PointerEvent::AddPointerItem(PointerItem &pointerItem)
656 {
657 if (pointers_.size() >= MAX_N_POINTER_ITEMS) {
658 MMI_HILOGE("Exceed maximum allowed number of pointer items");
659 return;
660 }
661 int32_t pointerId = pointerItem.GetPointerId();
662 for (auto &item : pointers_) {
663 if (item.GetPointerId() == pointerId) {
664 item = pointerItem;
665 return;
666 }
667 }
668 pointers_.push_back(pointerItem);
669 }
670
UpdatePointerItem(int32_t pointerId,PointerItem & pointerItem)671 void PointerEvent::UpdatePointerItem(int32_t pointerId, PointerItem &pointerItem)
672 {
673 for (auto &item : pointers_) {
674 if ((item.GetPointerId() % SIMULATE_EVENT_START_ID) == pointerId) {
675 item = pointerItem;
676 return;
677 }
678 }
679 AddPointerItem(pointerItem);
680 }
681
GetPressedButtons() const682 std::set<int32_t> PointerEvent::GetPressedButtons() const
683 {
684 return pressedButtons_;
685 }
686
IsButtonPressed(int32_t buttonId) const687 bool PointerEvent::IsButtonPressed(int32_t buttonId) const
688 {
689 return (pressedButtons_.find(buttonId) != pressedButtons_.end());
690 }
691
SetButtonPressed(int32_t buttonId)692 void PointerEvent::SetButtonPressed(int32_t buttonId)
693 {
694 if (pressedButtons_.size() >= MAX_N_PRESSED_BUTTONS) {
695 MMI_HILOGE("Exceed maximum allowed number of pressed buttons");
696 return;
697 }
698 auto iter = pressedButtons_.insert(buttonId);
699 if (!iter.second) {
700 MMI_HILOGE("Insert value failed, button:%{public}d", buttonId);
701 }
702 }
703
DeleteReleaseButton(int32_t buttonId)704 void PointerEvent::DeleteReleaseButton(int32_t buttonId)
705 {
706 if (pressedButtons_.find(buttonId) != pressedButtons_.end()) {
707 pressedButtons_.erase(buttonId);
708 }
709 }
710
ClearButtonPressed()711 void PointerEvent::ClearButtonPressed()
712 {
713 pressedButtons_.clear();
714 }
715
GetPointerCount() const716 int32_t PointerEvent::GetPointerCount() const
717 {
718 return static_cast<int32_t>(pointers_.size());
719 }
720
GetPointerIds() const721 std::vector<int32_t> PointerEvent::GetPointerIds() const
722 {
723 std::vector<int32_t> pointerIdList;
724 for (const auto &item : pointers_) {
725 pointerIdList.push_back(item.GetPointerId());
726 }
727 return pointerIdList;
728 }
729
GetAllPointerItems() const730 std::list<PointerEvent::PointerItem> PointerEvent::GetAllPointerItems() const
731 {
732 return pointers_;
733 }
734
GetSourceType() const735 int32_t PointerEvent::GetSourceType() const
736 {
737 return sourceType_;
738 }
739
SetSourceType(int32_t sourceType)740 void PointerEvent::SetSourceType(int32_t sourceType)
741 {
742 sourceType_ = sourceType;
743 }
744
DumpSourceType() const745 const char* PointerEvent::DumpSourceType() const
746 {
747 switch (sourceType_) {
748 case PointerEvent::SOURCE_TYPE_MOUSE: {
749 return "mouse";
750 }
751 case PointerEvent::SOURCE_TYPE_TOUCHSCREEN: {
752 return "touch-screen";
753 }
754 case PointerEvent::SOURCE_TYPE_TOUCHPAD: {
755 return "touch-pad";
756 }
757 case PointerEvent::SOURCE_TYPE_JOYSTICK: {
758 return "joystick";
759 }
760 case PointerEvent::SOURCE_TYPE_FINGERPRINT: {
761 return "fingerprint";
762 }
763 case PointerEvent::SOURCE_TYPE_CROWN: {
764 return "crown";
765 }
766 default: {
767 break;
768 }
769 }
770 return "unknown";
771 }
772
GetButtonId() const773 int32_t PointerEvent::GetButtonId() const
774 {
775 return buttonId_;
776 }
777
SetButtonId(int32_t buttonId)778 void PointerEvent::SetButtonId(int32_t buttonId)
779 {
780 buttonId_ = buttonId;
781 }
782
GetFingerCount() const783 int32_t PointerEvent::GetFingerCount() const
784 {
785 return fingerCount_;
786 }
787
SetFingerCount(int32_t fingerCount)788 void PointerEvent::SetFingerCount(int32_t fingerCount)
789 {
790 fingerCount_ = fingerCount;
791 }
792
GetZOrder() const793 float PointerEvent::GetZOrder() const
794 {
795 return zOrder_;
796 }
797
SetZOrder(float zOrder)798 void PointerEvent::SetZOrder(float zOrder)
799 {
800 zOrder_ = zOrder;
801 }
802
GetAxisValue(AxisType axis) const803 double PointerEvent::GetAxisValue(AxisType axis) const
804 {
805 double axisValue {};
806 if ((axis >= AXIS_TYPE_UNKNOWN) && (axis < AXIS_TYPE_MAX)) {
807 axisValue = axisValues_[axis];
808 }
809 return axisValue;
810 }
811
SetAxisValue(AxisType axis,double axisValue)812 void PointerEvent::SetAxisValue(AxisType axis, double axisValue)
813 {
814 if ((axis >= AXIS_TYPE_UNKNOWN) && (axis < AXIS_TYPE_MAX)) {
815 axisValues_[axis] = axisValue;
816 axes_ = static_cast<uint32_t>(axes_ | static_cast<uint32_t>(1 << axis));
817 }
818 }
819
ClearAxisValue()820 void PointerEvent::ClearAxisValue()
821 {
822 axisValues_ = {};
823 axes_ = 0;
824 }
825
ClearAxisStatus(AxisType axis)826 void PointerEvent::ClearAxisStatus(AxisType axis)
827 {
828 axes_ &= ~static_cast<uint32_t>(1U << axis);
829 }
830
HasAxis(uint32_t axes,AxisType axis)831 bool PointerEvent::HasAxis(uint32_t axes, AxisType axis)
832 {
833 bool ret { false };
834 if ((axis >= AXIS_TYPE_UNKNOWN) && (axis < AXIS_TYPE_MAX)) {
835 ret = static_cast<bool>(static_cast<uint32_t>(axes) & (1 << static_cast<uint32_t>(axis)));
836 }
837 return ret;
838 }
839
GetVelocity() const840 double PointerEvent::GetVelocity() const
841 {
842 return velocity_;
843 }
844
SetVelocity(double velocity)845 void PointerEvent::SetVelocity(double velocity)
846 {
847 velocity_ = velocity;
848 }
849
SetPressedKeys(const std::vector<int32_t> pressedKeys)850 void PointerEvent::SetPressedKeys(const std::vector<int32_t> pressedKeys)
851 {
852 pressedKeys_ = pressedKeys;
853 }
854
GetPressedKeys() const855 std::vector<int32_t> PointerEvent::GetPressedKeys() const
856 {
857 return pressedKeys_;
858 }
859
GetAxisEventType() const860 int32_t PointerEvent::GetAxisEventType() const
861 {
862 return axisEventType_;
863 }
864
SetAxisEventType(int32_t axisEventType)865 void PointerEvent::SetAxisEventType(int32_t axisEventType)
866 {
867 axisEventType_ = axisEventType;
868 }
869
GetPullId() const870 int32_t PointerEvent::GetPullId() const
871 {
872 return pullId_;
873 }
874
SetPullId(int32_t pullId)875 void PointerEvent::SetPullId(int32_t pullId)
876 {
877 pullId_ = pullId;
878 }
879
880 #ifdef OHOS_BUILD_ENABLE_SECURITY_COMPONENT
SetEnhanceData(const std::vector<uint8_t> & enhanceData)881 void PointerEvent::SetEnhanceData(const std::vector<uint8_t>& enhanceData)
882 {
883 enhanceData_ = enhanceData;
884 }
885
GetEnhanceData() const886 std::vector<uint8_t> PointerEvent::GetEnhanceData() const
887 {
888 return enhanceData_;
889 }
890 #endif // OHOS_BUILD_ENABLE_SECURITY_COMPONENT
891
WriteToParcel(Parcel & out) const892 bool PointerEvent::WriteToParcel(Parcel &out) const
893 {
894 if (!InputEvent::WriteToParcel(out)) {
895 return false;
896 }
897
898 WRITEINT32(out, pointerId_);
899
900 WRITEINT32(out, static_cast<int32_t>(pointers_.size()));
901
902 for (const auto &item : pointers_) {
903 if (!item.WriteToParcel(out)) {
904 return false;
905 }
906 }
907
908 WRITEINT32(out, static_cast<int32_t>(buffer_.size()));
909
910 for (const auto& buff : buffer_) {
911 WRITEUINT8(out, buff);
912 }
913
914 WRITEINT32(out, static_cast<int32_t>(pressedButtons_.size()));
915
916 for (const auto &item : pressedButtons_) {
917 WRITEINT32(out, item);
918 }
919
920 WRITEINT32(out, sourceType_);
921
922 WRITEINT32(out, pointerAction_);
923
924 WRITEINT32(out, originPointerAction_);
925
926 WRITEINT32(out, buttonId_);
927
928 WRITEINT32(out, fingerCount_);
929
930 WRITEFLOAT(out, zOrder_);
931
932 const uint32_t axes { GetAxes() };
933 WRITEUINT32(out, axes);
934
935 for (int32_t i = AXIS_TYPE_UNKNOWN; i < AXIS_TYPE_MAX; ++i) {
936 const AxisType axis { static_cast<AxisType>(i) };
937 if (HasAxis(axes, axis)) {
938 WRITEDOUBLE(out, GetAxisValue(axis));
939 }
940 }
941
942 WRITEINT32(out, axisEventType_);
943 WRITEINT32(out, pullId_);
944 #ifdef OHOS_BUILD_ENABLE_SECURITY_COMPONENT
945 WRITEINT32(out, static_cast<int32_t>(enhanceData_.size()));
946 for (uint32_t i = 0; i < enhanceData_.size(); i++) {
947 WRITEUINT32(out, enhanceData_[i]);
948 }
949 #endif // OHOS_BUILD_ENABLE_SECURITY_COMPONENT
950
951 #ifdef OHOS_BUILD_ENABLE_FINGERPRINT
952 WRITEDOUBLE(out, fingerprintDistanceX_);
953 WRITEDOUBLE(out, fingerprintDistanceY_);
954 #endif // OHOS_BUILD_ENABLE_FINGERPRINT
955 WRITEINT32(out, static_cast<int32_t>(fixedMode_));
956 WRITEINT32(out, handOption_);
957 return true;
958 }
959
ReadFromParcel(Parcel & in)960 bool PointerEvent::ReadFromParcel(Parcel &in)
961 {
962 if (!InputEvent::ReadFromParcel(in)) {
963 return false;
964 }
965
966 READINT32(in, pointerId_);
967
968 int32_t nPointers;
969 READINT32(in, nPointers);
970 if (nPointers > static_cast<int32_t>(MAX_N_POINTER_ITEMS)) {
971 return false;
972 }
973
974 for (int32_t i = 0; i < nPointers; ++i) {
975 PointerItem item;
976 if (!item.ReadFromParcel(in)) {
977 return false;
978 }
979 AddPointerItem(item);
980 }
981
982 if (!ReadBufferFromParcel(in)) {
983 return false;
984 }
985
986 int32_t nPressedButtons;
987 READINT32(in, nPressedButtons);
988 if (nPressedButtons > static_cast<int32_t>(MAX_N_PRESSED_BUTTONS)) {
989 return false;
990 }
991
992 for (int32_t i = 0; i < nPressedButtons; ++i) {
993 int32_t buttonId = 0;
994 READINT32(in, buttonId);
995 SetButtonPressed(buttonId);
996 }
997
998 READINT32(in, sourceType_);
999
1000 READINT32(in, pointerAction_);
1001
1002 READINT32(in, originPointerAction_);
1003
1004 READINT32(in, buttonId_);
1005
1006 READINT32(in, fingerCount_);
1007
1008 READFLOAT(in, zOrder_);
1009
1010 if (!ReadAxisFromParcel(in)) {
1011 return false;
1012 }
1013
1014 READINT32(in, axisEventType_);
1015 READINT32(in, pullId_);
1016 #ifdef OHOS_BUILD_ENABLE_SECURITY_COMPONENT
1017 if (!ReadEnhanceDataFromParcel(in)) {
1018 return false;
1019 }
1020 #endif // OHOS_BUILD_ENABLE_SECURITY_COMPONENT
1021
1022 #ifdef OHOS_BUILD_ENABLE_FINGERPRINT
1023 READDOUBLE(in, fingerprintDistanceX_);
1024 READDOUBLE(in, fingerprintDistanceY_);
1025 #endif // OHOS_BUILD_ENABLE_FINGERPRINT
1026 if (!ReadFixedModeFromParcel(in)) {
1027 return false;
1028 }
1029 READINT32(in, handOption_);
1030 return true;
1031 }
1032
ReadFixedModeFromParcel(Parcel & in)1033 bool PointerEvent::ReadFixedModeFromParcel(Parcel &in)
1034 {
1035 int32_t value = 0;
1036 READINT32(in, value);
1037 if (value < static_cast<int32_t>(FixedMode::SCREEN_MODE_UNKNOWN) ||
1038 value >= static_cast<int32_t>(FixedMode::SCREEN_MODE_MAX)) {
1039 MMI_HILOGE("invalid fixed mode %{public}d", value);
1040 return false;
1041 }
1042 fixedMode_ = static_cast<FixedMode>(value);
1043 return true;
1044 }
1045
ReadAxisFromParcel(Parcel & in)1046 bool PointerEvent::ReadAxisFromParcel(Parcel &in)
1047 {
1048 uint32_t axes = 0;
1049 READUINT32(in, axes);
1050
1051 for (int32_t i = AXIS_TYPE_UNKNOWN; i < AXIS_TYPE_MAX; ++i) {
1052 const AxisType axis { static_cast<AxisType>(i) };
1053 if (HasAxis(axes, axis)) {
1054 double val;
1055 READDOUBLE(in, val);
1056 SetAxisValue(axis, val);
1057 }
1058 }
1059 return true;
1060 }
1061
1062 #ifdef OHOS_BUILD_ENABLE_FINGERPRINT
SetFingerprintDistanceX(double x)1063 void PointerEvent::SetFingerprintDistanceX(double x)
1064 {
1065 fingerprintDistanceX_ = x;
1066 }
1067
SetFingerprintDistanceY(double y)1068 void PointerEvent::SetFingerprintDistanceY(double y)
1069 {
1070 fingerprintDistanceY_ = y;
1071 }
1072
GetFingerprintDistanceX() const1073 double PointerEvent::GetFingerprintDistanceX() const
1074 {
1075 return fingerprintDistanceX_;
1076 }
1077
GetFingerprintDistanceY() const1078 double PointerEvent::GetFingerprintDistanceY() const
1079 {
1080 return fingerprintDistanceY_;
1081 }
1082 #endif // OHOS_BUILD_ENABLE_FINGERPRINT
1083
1084 #ifdef OHOS_BUILD_ENABLE_SECURITY_COMPONENT
ReadEnhanceDataFromParcel(Parcel & in)1085 bool PointerEvent::ReadEnhanceDataFromParcel(Parcel &in)
1086 {
1087 int32_t size = 0;
1088 READINT32(in, size);
1089 if (size > static_cast<int32_t>(MAX_N_ENHANCE_DATA_SIZE) || size < 0) {
1090 MMI_HILOGE("enhanceData_ size is invalid");
1091 return false;
1092 }
1093
1094 for (int32_t i = 0; i < size; i++) {
1095 uint32_t val = 0;
1096 READUINT32(in, val);
1097 enhanceData_.emplace_back(val);
1098 }
1099 return true;
1100 }
1101 #endif // OHOS_BUILD_ENABLE_SECURITY_COMPONENT
1102
ReadBufferFromParcel(Parcel & in)1103 bool PointerEvent::ReadBufferFromParcel(Parcel &in)
1104 {
1105 int32_t bufflen = 0;
1106 READINT32(in, bufflen);
1107 if (bufflen > static_cast<int32_t>(MAX_N_BUFFER_SIZE)) {
1108 return false;
1109 }
1110
1111 for (int32_t i = 0; i < bufflen; ++i) {
1112 uint8_t data;
1113 READUINT8(in, data);
1114 buffer_.push_back(data);
1115 }
1116 return true;
1117 }
1118
IsValidCheckMouseFunc() const1119 bool PointerEvent::IsValidCheckMouseFunc() const
1120 {
1121 CALL_DEBUG_ENTER;
1122 if (pointers_.size() != 1) {
1123 MMI_HILOGE("Pointers_ is invalid");
1124 return false;
1125 }
1126
1127 const size_t maxPressedButtons = 3;
1128 if (pressedButtons_.size() > maxPressedButtons) {
1129 MMI_HILOGE("PressedButtons_.size is greater than three and is invalid");
1130 return false;
1131 }
1132
1133 for (const auto &item : pressedButtons_) {
1134 if (item != MOUSE_BUTTON_LEFT && item != MOUSE_BUTTON_RIGHT && item != MOUSE_BUTTON_MIDDLE) {
1135 MMI_HILOGE("PressedButtons_ is invalid");
1136 return false;
1137 }
1138 }
1139
1140 int32_t pointAction = GetPointerAction();
1141 bool checkFlag = pointAction != POINTER_ACTION_CANCEL && pointAction != POINTER_ACTION_MOVE &&
1142 pointAction != POINTER_ACTION_AXIS_BEGIN && pointAction != POINTER_ACTION_AXIS_UPDATE &&
1143 pointAction != POINTER_ACTION_AXIS_END && pointAction != POINTER_ACTION_BUTTON_DOWN &&
1144 pointAction != POINTER_ACTION_BUTTON_UP;
1145 if (checkFlag) {
1146 MMI_HILOGE("PointAction is invalid");
1147 return false;
1148 }
1149
1150 int32_t buttonId = GetButtonId();
1151 if (pointAction == POINTER_ACTION_BUTTON_DOWN || pointAction == POINTER_ACTION_BUTTON_UP) {
1152 if (buttonId != MOUSE_BUTTON_LEFT && buttonId != MOUSE_BUTTON_RIGHT && buttonId != MOUSE_BUTTON_MIDDLE) {
1153 MMI_HILOGE("ButtonId is invalid");
1154 return false;
1155 }
1156 } else {
1157 if (buttonId != BUTTON_NONE) {
1158 MMI_HILOGE("ButtonId is not BUTTON_NONE and is invalid");
1159 return false;
1160 }
1161 }
1162 return true;
1163 }
1164
IsValidCheckMouse() const1165 bool PointerEvent::IsValidCheckMouse() const
1166 {
1167 CALL_DEBUG_ENTER;
1168 int32_t mousePointID = GetPointerId();
1169 if (mousePointID < 0) {
1170 MMI_HILOGE("MousePointID is invalid");
1171 return false;
1172 }
1173
1174 if (!IsValidCheckMouseFunc()) {
1175 MMI_HILOGE("IsValidCheckMouseFunc is invalid");
1176 return false;
1177 }
1178
1179 for (const auto &item : pointers_) {
1180 if (item.GetPointerId() < 0) {
1181 MMI_HILOGE("Item.pointerid is invalid");
1182 return false;
1183 }
1184
1185 if (item.GetPointerId() != mousePointID) {
1186 MMI_HILOGE("Item.pointerid is not same to mousePointID and is invalid");
1187 return false;
1188 }
1189
1190 if (item.GetDownTime() > 0) {
1191 MMI_HILOGE("Item.downtime is invalid");
1192 return false;
1193 }
1194
1195 if (item.IsPressed() != false) {
1196 MMI_HILOGE("Item.ispressed is not false and is invalid");
1197 return false;
1198 }
1199 }
1200 return true;
1201 }
1202
IsValidCheckTouchFunc() const1203 bool PointerEvent::IsValidCheckTouchFunc() const
1204 {
1205 CALL_DEBUG_ENTER;
1206 if (GetPointerId() < 0) {
1207 MMI_HILOGE("TouchPointID is invalid");
1208 return false;
1209 }
1210
1211 if (!pressedButtons_.empty()) {
1212 MMI_HILOGE("PressedButtons_.size is invalid");
1213 return false;
1214 }
1215
1216 int32_t pointAction = GetPointerAction();
1217 if (pointAction != POINTER_ACTION_CANCEL && pointAction != POINTER_ACTION_MOVE &&
1218 pointAction != POINTER_ACTION_DOWN && pointAction != POINTER_ACTION_UP) {
1219 MMI_HILOGE("PointAction is invalid");
1220 return false;
1221 }
1222
1223 if (GetButtonId() != BUTTON_NONE) {
1224 MMI_HILOGE("ButtonId is invalid");
1225 return false;
1226 }
1227 return true;
1228 }
1229
IsValidCheckTouch() const1230 bool PointerEvent::IsValidCheckTouch() const
1231 {
1232 CALL_DEBUG_ENTER;
1233 if (!IsValidCheckTouchFunc()) {
1234 MMI_HILOGE("IsValidCheckTouchFunc is invalid");
1235 return false;
1236 }
1237 bool isSameItem = false;
1238 int32_t touchPointID = GetPointerId();
1239 for (auto item = pointers_.begin(); item != pointers_.end(); item++) {
1240 if (item->GetPointerId() < 0) {
1241 MMI_HILOGE("Item.pointerid is invalid");
1242 return false;
1243 }
1244
1245 if (item->GetPointerId() == touchPointID) {
1246 isSameItem = true;
1247 }
1248
1249 if (item->GetDownTime() <= 0) {
1250 MMI_HILOGE("Item.downtime is invalid");
1251 return false;
1252 }
1253
1254 if (item->IsPressed() != false) {
1255 MMI_HILOGE("Item.ispressed is not false and is invalid");
1256 return false;
1257 }
1258
1259 auto itemtmp = item;
1260 for (++itemtmp; itemtmp != pointers_.end(); itemtmp++) {
1261 if (item->GetPointerId() == itemtmp->GetPointerId()) {
1262 MMI_HILOGE("Pointitems pointerid exist same items and is invalid");
1263 return false;
1264 }
1265 }
1266 }
1267
1268 if (!isSameItem) {
1269 MMI_HILOGE("Item.pointerid is not same to touchPointID and is invalid");
1270 return false;
1271 }
1272 return true;
1273 }
1274
IsValid() const1275 bool PointerEvent::IsValid() const
1276 {
1277 CALL_DEBUG_ENTER;
1278 switch (GetSourceType()) {
1279 case SOURCE_TYPE_MOUSE: {
1280 if (!IsValidCheckMouse()) {
1281 MMI_HILOGE("IsValidCheckMouse is invalid");
1282 return false;
1283 }
1284 break;
1285 }
1286 case SOURCE_TYPE_TOUCHSCREEN:
1287 case SOURCE_TYPE_TOUCHPAD: {
1288 if (!IsValidCheckTouch()) {
1289 MMI_HILOGE("IsValidCheckTouch is invalid");
1290 return false;
1291 }
1292 break;
1293 }
1294 case SOURCE_TYPE_JOYSTICK:
1295 break;
1296 default: {
1297 MMI_HILOGE("SourceType is invalid");
1298 return false;
1299 }
1300 }
1301 return true;
1302 }
1303
SetBuffer(std::vector<uint8_t> buffer)1304 void PointerEvent::SetBuffer(std::vector<uint8_t> buffer)
1305 {
1306 buffer_ = buffer;
1307 }
1308
ClearBuffer()1309 void PointerEvent::ClearBuffer()
1310 {
1311 buffer_.clear();
1312 }
1313
GetBuffer() const1314 std::vector<uint8_t> PointerEvent::GetBuffer() const
1315 {
1316 return buffer_;
1317 }
1318
GetDispatchTimes() const1319 int32_t PointerEvent::GetDispatchTimes() const
1320 {
1321 return dispatchTimes_;
1322 }
1323
SetDispatchTimes(int32_t dispatchTimes)1324 void PointerEvent::SetDispatchTimes(int32_t dispatchTimes)
1325 {
1326 dispatchTimes_ = dispatchTimes;
1327 }
1328
SetHandlerEventType(HandleEventType eventType)1329 void PointerEvent::SetHandlerEventType(HandleEventType eventType)
1330 {
1331 handleEventType_ = eventType;
1332 }
1333
GetHandlerEventType() const1334 HandleEventType PointerEvent::GetHandlerEventType() const
1335 {
1336 return handleEventType_;
1337 }
1338
1339 #ifdef OHOS_BUILD_ENABLE_ANCO
SetAncoDeal(bool ancoDeal)1340 void PointerEvent::SetAncoDeal(bool ancoDeal)
1341 {
1342 ancoDeal_ = ancoDeal;
1343 }
1344
GetAncoDeal() const1345 bool PointerEvent::GetAncoDeal() const
1346 {
1347 return ancoDeal_;
1348 }
1349 #endif // OHOS_BUILD_ENABLE_ANCO
1350
SetAutoToVirtualScreen(bool autoToVirtualScreen)1351 void PointerEvent::SetAutoToVirtualScreen(bool autoToVirtualScreen)
1352 {
1353 autoToVirtualScreen_ = autoToVirtualScreen;
1354 }
1355
GetAutoToVirtualScreen() const1356 bool PointerEvent::GetAutoToVirtualScreen() const
1357 {
1358 return autoToVirtualScreen_;
1359 }
1360
SetFixedMode(PointerEvent::FixedMode fixedMode)1361 void PointerEvent::SetFixedMode(PointerEvent::FixedMode fixedMode)
1362 {
1363 fixedMode_ = fixedMode;
1364 }
1365
GetFixedMode() const1366 PointerEvent::FixedMode PointerEvent::GetFixedMode() const
1367 {
1368 return fixedMode_;
1369 }
1370
GetFixedModeStr() const1371 std::string PointerEvent::GetFixedModeStr() const
1372 {
1373 switch (fixedMode_) {
1374 case PointerEvent::FixedMode::NORMAL:
1375 return std::move("normal");
1376 case PointerEvent::FixedMode::ONE_HAND:
1377 return std::move("one-hand");
1378 default:
1379 return std::move("unknown");
1380 }
1381 }
1382
ActionToShortStr(int32_t action)1383 std::string_view PointerEvent::ActionToShortStr(int32_t action)
1384 {
1385 // 该函数逻辑简单,功能单一,考虑性能影响,使用switch-case而不是表驱动实现。
1386 switch (action) {
1387 case PointerEvent::POINTER_ACTION_CANCEL:
1388 return "P:C:";
1389 case PointerEvent::POINTER_ACTION_DOWN:
1390 return "P:D:";
1391 case PointerEvent::POINTER_ACTION_MOVE:
1392 return "P:M:";
1393 case PointerEvent::POINTER_ACTION_UP:
1394 return "P:U:";
1395 case PointerEvent::POINTER_ACTION_AXIS_BEGIN:
1396 return "P:AB:";
1397 case PointerEvent::POINTER_ACTION_AXIS_UPDATE:
1398 return "P:AU:";
1399 case PointerEvent::POINTER_ACTION_AXIS_END:
1400 return "P:AE:";
1401 case PointerEvent::POINTER_ACTION_BUTTON_DOWN:
1402 return "P:BD:";
1403 case PointerEvent::POINTER_ACTION_BUTTON_UP:
1404 return "P:BU:";
1405 case PointerEvent::POINTER_ACTION_ENTER_WINDOW:
1406 return "P:EW:";
1407 case PointerEvent::POINTER_ACTION_LEAVE_WINDOW:
1408 return "P:LW:";
1409 case PointerEvent::POINTER_ACTION_PULL_DOWN:
1410 return "P:PD:";
1411 case PointerEvent::POINTER_ACTION_PULL_MOVE:
1412 return "P:PM:";
1413 case PointerEvent::POINTER_ACTION_PULL_UP:
1414 return "P:PU:";
1415 case PointerEvent::POINTER_ACTION_PULL_IN_WINDOW:
1416 return "P:PI:";
1417 case PointerEvent::POINTER_ACTION_PULL_OUT_WINDOW:
1418 return "P:PO:";
1419 case PointerEvent::POINTER_ACTION_SWIPE_BEGIN:
1420 return "P:SB:";
1421 case PointerEvent::POINTER_ACTION_SWIPE_UPDATE:
1422 return "P:SU:";
1423 case PointerEvent::POINTER_ACTION_SWIPE_END:
1424 return "P:SE:";
1425 case PointerEvent::POINTER_ACTION_ROTATE_BEGIN:
1426 return "P:RB:";
1427 case PointerEvent::POINTER_ACTION_ROTATE_UPDATE:
1428 return "P:RU:";
1429 case PointerEvent::POINTER_ACTION_ROTATE_END:
1430 return "P:RE:";
1431 case PointerEvent::POINTER_ACTION_TRIPTAP:
1432 return "P:TT:";
1433 case PointerEvent::POINTER_ACTION_QUADTAP:
1434 return "P:Q:";
1435 case PointerEvent::POINTER_ACTION_HOVER_MOVE:
1436 return "P:HM:";
1437 case PointerEvent::POINTER_ACTION_HOVER_ENTER:
1438 return "P:HE:";
1439 case PointerEvent::POINTER_ACTION_HOVER_EXIT:
1440 return "P:HEX:";
1441 case PointerEvent::POINTER_ACTION_FINGERPRINT_DOWN:
1442 return "P:FD:";
1443 case PointerEvent::POINTER_ACTION_FINGERPRINT_UP:
1444 return "P:FU:";
1445 case PointerEvent::POINTER_ACTION_FINGERPRINT_SLIDE:
1446 return "P:FS:";
1447 case PointerEvent::POINTER_ACTION_FINGERPRINT_RETOUCH:
1448 return "P:FR:";
1449 case PointerEvent::POINTER_ACTION_FINGERPRINT_CLICK:
1450 return "P:FC:";
1451 case PointerEvent::POINTER_ACTION_FINGERPRINT_CANCEL:
1452 return "P:FCA:";
1453 case PointerEvent::POINTER_ACTION_UNKNOWN:
1454 return "P:UK:";
1455 default:
1456 return "P:?:";
1457 }
1458 }
1459 } // namespace MMI
1460 } // namespace OHOS
1461