• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-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 "gesture_transform_processor.h"
17 
18 #include "mmi_log.h"
19 #include "mouse_device_state.h"
20 
21 #undef MMI_LOG_DOMAIN
22 #define MMI_LOG_DOMAIN MMI_LOG_DISPATCH
23 #undef MMI_LOG_TAG
24 #define MMI_LOG_TAG "GestureTransformProcessor"
25 
26 namespace OHOS {
27 namespace MMI {
GestureTransformProcessor(int32_t deviceId)28 GestureTransformProcessor::GestureTransformProcessor(int32_t deviceId)
29     : deviceId_(deviceId) {}
30 
OnEventTouchPadPinchBegin(libinput_event_gesture * gesture)31 void GestureTransformProcessor::OnEventTouchPadPinchBegin(libinput_event_gesture *gesture)
32 {
33     CALL_DEBUG_ENTER;
34     CHKPV(gesture);
35     int64_t time = static_cast<int64_t>(libinput_event_gesture_get_time(gesture));
36     double scale = libinput_event_gesture_get_scale(gesture);
37     pointerEvent_->SetActionTime(GetSysClockTime());
38     pointerEvent_->SetActionStartTime(time);
39 
40     PointerEvent::PointerItem pointerItem;
41     pointerItem.SetDownTime(time);
42     pointerItem.SetDisplayX(MouseState->GetMouseCoordsX());
43     pointerItem.SetDisplayY(MouseState->GetMouseCoordsY());
44     pointerItem.SetDisplayXPos(MouseState->GetMouseCoordsX());
45     pointerItem.SetDisplayYPos(MouseState->GetMouseCoordsY());
46     pointerItem.SetDeviceId(deviceId_);
47     pointerItem.SetPointerId(defaultPointerId);
48     pointerItem.SetWidth(0);
49     pointerItem.SetHeight(0);
50     pointerItem.SetPressed(MouseState->IsLeftBtnPressed());
51     pointerEvent_->AddPointerItem(pointerItem);
52 
53     pointerEvent_->ClearButtonPressed();
54     std::vector<int32_t> pressedButtons;
55     MouseState->GetPressedButtons(pressedButtons);
56     for (const auto &item : pressedButtons) {
57         pointerEvent_->SetButtonPressed(item);
58     }
59 
60     pointerEvent_->SetDeviceId(deviceId_);
61     pointerEvent_->SetTargetDisplayId(0);
62     pointerEvent_->SetPointerId(defaultPointerId);
63     pointerEvent_->SetAxisValue(PointerEvent::AXIS_TYPE_PINCH, scale);
64 }
65 
OnEventTouchPadPinchUpdate(libinput_event_gesture * gesture)66 void GestureTransformProcessor::OnEventTouchPadPinchUpdate(libinput_event_gesture *gesture)
67 {
68     CALL_DEBUG_ENTER;
69     CHKPV(gesture);
70     int64_t time = static_cast<int64_t>(libinput_event_gesture_get_time(gesture));
71     double scale = libinput_event_gesture_get_scale(gesture);
72     pointerEvent_->SetActionTime(GetSysClockTime());
73     pointerEvent_->SetActionStartTime(time);
74 
75     PointerEvent::PointerItem pointerItem;
76     pointerEvent_->GetPointerItem(defaultPointerId, pointerItem);
77     pointerItem.SetDisplayX(MouseState->GetMouseCoordsX());
78     pointerItem.SetDisplayY(MouseState->GetMouseCoordsY());
79     pointerItem.SetDisplayXPos(MouseState->GetMouseCoordsX());
80     pointerItem.SetDisplayYPos(MouseState->GetMouseCoordsY());
81     pointerItem.SetPressed(MouseState->IsLeftBtnPressed());
82     pointerEvent_->UpdatePointerItem(defaultPointerId, pointerItem);
83 
84     pointerEvent_->ClearButtonPressed();
85     std::vector<int32_t> pressedButtons;
86     MouseState->GetPressedButtons(pressedButtons);
87     for (const auto &item : pressedButtons) {
88         pointerEvent_->SetButtonPressed(item);
89     }
90     pointerEvent_->SetAxisValue(PointerEvent::AXIS_TYPE_PINCH, scale);
91 }
92 
OnEventTouchPadPinchEnd(libinput_event_gesture * gesture)93 void GestureTransformProcessor::OnEventTouchPadPinchEnd(libinput_event_gesture *gesture)
94 {
95     CALL_DEBUG_ENTER;
96     CHKPV(gesture);
97     int64_t time = static_cast<int64_t>(libinput_event_gesture_get_time(gesture));
98     double scale = libinput_event_gesture_get_scale(gesture);
99     pointerEvent_->SetActionTime(GetSysClockTime());
100     pointerEvent_->SetActionStartTime(time);
101 
102     PointerEvent::PointerItem pointerItem;
103     pointerEvent_->GetPointerItem(defaultPointerId, pointerItem);
104     pointerItem.SetDisplayX(MouseState->GetMouseCoordsX());
105     pointerItem.SetDisplayY(MouseState->GetMouseCoordsY());
106     pointerItem.SetDisplayXPos(MouseState->GetMouseCoordsX());
107     pointerItem.SetDisplayYPos(MouseState->GetMouseCoordsY());
108     pointerItem.SetPressed(MouseState->IsLeftBtnPressed());
109     pointerEvent_->UpdatePointerItem(defaultPointerId, pointerItem);
110 
111     pointerEvent_->ClearButtonPressed();
112     std::vector<int32_t> pressedButtons;
113     MouseState->GetPressedButtons(pressedButtons);
114     for (const auto &item : pressedButtons) {
115         pointerEvent_->SetButtonPressed(item);
116     }
117     pointerEvent_->SetAxisValue(PointerEvent::AXIS_TYPE_PINCH, scale);
118 }
119 
OnEvent(struct libinput_event * event)120 std::shared_ptr<PointerEvent> GestureTransformProcessor::OnEvent(struct libinput_event *event)
121 {
122     CALL_DEBUG_ENTER;
123     CHKPP(event);
124     auto gesture = libinput_event_get_gesture_event(event);
125     CHKPP(gesture);
126     if (pointerEvent_ == nullptr) {
127         pointerEvent_ = PointerEvent::Create();
128         CHKPP(pointerEvent_);
129     }
130     auto type = libinput_event_get_type(event);
131     switch (type) {
132         case LIBINPUT_EVENT_GESTURE_PINCH_BEGIN: {
133             pointerEvent_->SetPointerAction(PointerEvent::POINTER_ACTION_AXIS_BEGIN);
134             OnEventTouchPadPinchBegin(gesture);
135             break;
136         }
137         case LIBINPUT_EVENT_GESTURE_PINCH_UPDATE: {
138             pointerEvent_->SetPointerAction(PointerEvent::POINTER_ACTION_AXIS_UPDATE);
139             OnEventTouchPadPinchUpdate(gesture);
140             break;
141         }
142         case LIBINPUT_EVENT_GESTURE_PINCH_END: {
143             pointerEvent_->SetPointerAction(PointerEvent::POINTER_ACTION_AXIS_END);
144             OnEventTouchPadPinchEnd(gesture);
145             break;
146         }
147         case LIBINPUT_EVENT_GESTURE_SWIPE_BEGIN:
148         case LIBINPUT_EVENT_GESTURE_SWIPE_UPDATE:
149         case LIBINPUT_EVENT_GESTURE_SWIPE_END: {
150             MMI_HILOGW("Three refers to the need to use, preserve the code");
151             return nullptr;
152         }
153         default: {
154             MMI_HILOGE("Unknown event_type of pointer class has been reported!\n");
155             return nullptr;
156         }
157     }
158     pointerEvent_->SetSourceType(PointerEvent::SOURCE_TYPE_MOUSE);
159     pointerEvent_->UpdateId();
160     StartLogTraceId(pointerEvent_->GetId(), pointerEvent_->GetEventType(), pointerEvent_->GetPointerAction());
161     return pointerEvent_;
162 }
163 } // namespace MMI
164 } // namespace OHOS