1 /*
2 * Copyright (c) 2023 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 "core/event/mouse_event.h"
17
18 #include "core/pipeline/pipeline_base.h"
19
20 namespace OHOS::Ace {
HandleHoverEvent(bool isHovered,const MouseEvent & event)21 bool HoverEventTarget::HandleHoverEvent(bool isHovered, const MouseEvent& event)
22 {
23 if (!onHoverEventCallback_) {
24 return false;
25 }
26 HoverInfo hoverInfo;
27 hoverInfo.SetTimeStamp(event.time);
28 hoverInfo.SetDeviceId(event.deviceId);
29 hoverInfo.SetSourceDevice(event.sourceType);
30 hoverInfo.SetSourceTool(event.sourceTool);
31 hoverInfo.SetPressedKeyCodes(event.pressedKeyCodes_);
32 // onHoverEventCallback_ may be overwritten in its invoke so we copy it first
33 auto onHoverEventCallback = onHoverEventCallback_;
34 onHoverEventCallback(isHovered, hoverInfo);
35 return !hoverInfo.IsStopPropagation();
36 }
37
HandlePenHoverEvent(bool isHovered,const TouchEvent & event)38 bool HoverEventTarget::HandlePenHoverEvent(bool isHovered, const TouchEvent& event)
39 {
40 if (!onPenHoverEventCallback_) {
41 return false;
42 }
43 HoverInfo hoverInfo;
44 hoverInfo.SetTimeStamp(event.time);
45 hoverInfo.SetDeviceId(event.deviceId);
46 hoverInfo.SetSourceDevice(event.sourceType);
47 hoverInfo.SetSourceTool(event.sourceTool);
48 if (event.tiltX.has_value()) {
49 hoverInfo.SetTiltX(event.tiltX.value_or(0.0f));
50 }
51 if (event.tiltY.has_value()) {
52 hoverInfo.SetTiltY(event.tiltY.value_or(0.0f));
53 }
54 hoverInfo.SetTarget(GetEventTarget().value_or(EventTarget()));
55 // onPenHoverEventCallback_ may be overwritten in its invoke so we copy it first
56 auto onPenHoverEventCallback = onPenHoverEventCallback_;
57 onPenHoverEventCallback(isHovered, hoverInfo);
58 return !hoverInfo.IsStopPropagation();
59 }
60
HandleAccessibilityHoverEvent(bool isHovered,const TouchEvent & event)61 void HoverEventTarget::HandleAccessibilityHoverEvent(bool isHovered, const TouchEvent& event)
62 {
63 if (!onAccessibilityHoverCallback_) {
64 return;
65 }
66 AccessibilityHoverInfo hoverInfo;
67 hoverInfo.SetTimeStamp(event.time);
68 hoverInfo.SetDeviceId(event.deviceId);
69 hoverInfo.SetSourceDevice(event.sourceType);
70 hoverInfo.SetSourceTool(event.sourceTool);
71 NG::PointF lastLocalPoint(event.x, event.y);
72 NG::NGGestureRecognizer::Transform(lastLocalPoint, GetAttachedNode(), false,
73 isPostEventResult_, event.postEventNodeId);
74 auto localX = static_cast<float>(lastLocalPoint.GetX());
75 auto localY = static_cast<float>(lastLocalPoint.GetY());
76 hoverInfo.SetLocalLocation(Offset(localX, localY));
77 hoverInfo.SetGlobalLocation(Offset(event.x, event.y));
78 hoverInfo.SetScreenLocation(Offset(event.screenX, event.screenY));
79 hoverInfo.SetActionType(ConvertAccessibilityHoverAction(event.type));
80 hoverInfo.SetTarget(GetEventTarget().value_or(EventTarget()));
81 // onAccessibilityHoverCallback_ may be overwritten in its invoke so we copy it first
82 auto onAccessibilityHoverCallback = onAccessibilityHoverCallback_;
83 onAccessibilityHoverCallback(isHovered, hoverInfo);
84 }
85
ConvertAccessibilityHoverAction(TouchType type)86 AccessibilityHoverAction HoverEventTarget::ConvertAccessibilityHoverAction(TouchType type)
87 {
88 switch (type) {
89 case TouchType::HOVER_ENTER:
90 return AccessibilityHoverAction::HOVER_ENTER;
91 case TouchType::HOVER_MOVE:
92 return AccessibilityHoverAction::HOVER_MOVE;
93 case TouchType::HOVER_EXIT:
94 return AccessibilityHoverAction::HOVER_EXIT;
95 case TouchType::HOVER_CANCEL:
96 return AccessibilityHoverAction::HOVER_CANCEL;
97 case TouchType::DOWN:
98 case TouchType::UP:
99 case TouchType::MOVE:
100 case TouchType::CANCEL:
101 case TouchType::PULL_DOWN:
102 case TouchType::PULL_UP:
103 case TouchType::PULL_MOVE:
104 case TouchType::PULL_IN_WINDOW:
105 case TouchType::PULL_OUT_WINDOW:
106 case TouchType::PROXIMITY_IN:
107 case TouchType::PROXIMITY_OUT:
108 case TouchType::UNKNOWN:
109 return AccessibilityHoverAction::UNKNOWN;
110 }
111 }
112
113 } // namespace OHOS::Ace
114