diff --git a/service/libinput_adapter/include/libinput_adapter.h b/service/libinput_adapter/include/libinput_adapter.h index 3c22639a86abb0c511b215aeeb6115fb15e65141..45788c77341cd7f76a97e4b6661fee93225f28c9 100644 --- a/service/libinput_adapter/include/libinput_adapter.h +++ b/service/libinput_adapter/include/libinput_adapter.h @@ -79,6 +79,9 @@ enum class VTPStateMachineMessageType : int32_t { SWIPE_BEGIN = 22, SWIPE_UPDATE = 23, SWIPE_END = 24, + SWIPE_FOUR_BEGIN = 25, + SWIPE_FOUR_UPDATE = 26, + SWIPE_FOUR_END = 27, }; enum class VKeyboardActivation : int32_t { @@ -193,6 +196,12 @@ private: const std::vector& msgItem); bool HandleVKeyTrackPadRotateUpdate(libinput_event_touch* touch, const std::vector& msgItem); + bool HandleVKeyTrackPadSwipeFourEnd(libinput_event_touch* touch, + const std::vector& msgItem); + bool HandleVKeyTrackPadRotateFourBegin(libinput_event_touch* touch, + const std::vector& msgItem); + bool HandleVKeyTrackPadRotateFourUpdate(libinput_event_touch* touch, + const std::vector& msgItem); bool HandleVKeyTrackPadRotateEnd(libinput_event_touch* touch, const std::vector& msgItem); void update_pointer_move(VTPStateMachineMessageType msgType); diff --git a/service/libinput_adapter/src/libinput_adapter.cpp b/service/libinput_adapter/src/libinput_adapter.cpp index 65d42e3ca1bfeb12363c3616dcffeefc4f31e456..347893ec57ada98ddcad4a4ddb943c4fdd4a86d2 100644 --- a/service/libinput_adapter/src/libinput_adapter.cpp +++ b/service/libinput_adapter/src/libinput_adapter.cpp @@ -56,6 +56,7 @@ constexpr int32_t VKEY_TP_SM_MSG_SCALE_IDX { 4 }; constexpr int32_t VKEY_TP_SM_MSG_ANGLE_IDX { 5 }; constexpr int32_t VKEY_TP_GSE_TWO_FINGERS { 2 }; constexpr int32_t VKEY_TP_GSE_THREE_FINGERS { 3 }; +constexpr int32_t VKEY_TP_GSE_FOUR_FINGERS { 4 }; constexpr uint32_t VKEY_TP_LB_ID { 272 }; constexpr uint32_t VKEY_TP_RB_ID { 273 }; constexpr uint32_t VKEY_TP_SEAT_BTN_COUNT_NONE { 0 }; @@ -683,6 +684,21 @@ void LibinputAdapter::OnVKeyTrackPadGestureThreeMessage(libinput_event_touch* to MMI_HILOGE("Virtual TrackPad swipe end event cannot be handled"); } break; + case VTPStateMachineMessageType::SWIPE_FOUR_BEGIN: + if (!HandleVKeyTrackPadSwipeFourBegin(touch, msgItem)) { + MMI_HILOGE("Virtual TrackPad swipe four begin event cannot be handled"); + } + break; + case VTPStateMachineMessageType::SWIPE_FOUR_UPDATE: + if (!HandleVKeyTrackPadSwipeFourUpdate(touch, msgItem)) { + MMI_HILOGE("Virtual TrackPad swipe four update event cannot be handled"); + } + break; + case VTPStateMachineMessageType::SWIPE_FOUR_END: + if (!HandleVKeyTrackPadSwipeFourEnd(touch, msgItem)) { + MMI_HILOGE("Virtual TrackPad swipe four end event cannot be handled"); + } + break; } } @@ -795,6 +811,71 @@ bool LibinputAdapter::HandleVKeyTrackPadSwipeEnd(libinput_event_touch* touch, return true; } +bool LibinputAdapter::HandleVKeyTrackPadSwipeFourBegin(libinput_event_touch* touch, + const std::vector& msgItem) +{ + CHKPF(funInputEvent_); + if (msgItem.size() < VKEY_TP_SM_MSG_SIZE) { + MMI_HILOGE("Virtual TrackPad state machine message size:%{public}d is not correct", + static_cast(msgItem.size())); + return false; + } + event_gesture gEvent; + gEvent.event_type = libinput_event_type::LIBINPUT_EVENT_GESTURE_SWIPE_BEGIN; + gEvent.finger_count = VKEY_TP_GSE_FOUR_FINGERS; + PrintVKeyTPGestureLog(gEvent); + libinput_event_gesture* lgEvent = libinput_create_gesture_event(touch, gEvent); + CHKPF(lgEvent); + funInputEvent_((libinput_event*)lgEvent, frameTime); + free(lgEvent); + vtpSwipeState_ = VTPSwipeStateType::SWIPE_BEGIN; + return true; +} + +bool LibinputAdapter::HandleVKeyTrackPadSwipeFourUpdate(libinput_event_touch* touch, + const std::vector& msgItem) +{ + CHKPF(funInputEvent_); + if (msgItem.size() < VKEY_TP_SM_MSG_SIZE) { + MMI_HILOGE("Virtual TrackPad state machine message size:%{public}d is not correct", + static_cast(msgItem.size())); + return false; + } + int32_t msgPPosX = msgItem[VKEY_TP_SM_MSG_POS_X_IDX]; + int32_t msgPPosY = msgItem[VKEY_TP_SM_MSG_POS_Y_IDX]; + event_gesture gEvent; + gEvent.device_coords_x[0] = msgPPosX; + gEvent.device_coords_y[0] = msgPPosY; + gEvent.event_type = libinput_event_type::LIBINPUT_EVENT_GESTURE_SWIPE_UPDATE; + gEvent.finger_count = VKEY_TP_GSE_FOUR_FINGERS; + libinput_event_gesture* lgEvent = libinput_create_gesture_event(touch, gEvent); + CHKPF(lgEvent); + funInputEvent_((libinput_event*)lgEvent, frameTime); + free(lgEvent); + vtpSwipeState_ = VTPSwipeStateType::SWIPE_UPDATE; + return true; +} + +bool LibinputAdapter::HandleVKeyTrackPadSwipeFourEnd(libinput_event_touch* touch, + const std::vector& msgItem) +{ + CHKPF(funInputEvent_); + if (msgItem.size() < VKEY_TP_SM_MSG_SIZE) { + MMI_HILOGE("Virtual TrackPad state machine message size:%{public}d is not correct", + static_cast(msgItem.size())); + return false; + } + event_gesture gEvent; + gEvent.event_type = libinput_event_type::LIBINPUT_EVENT_GESTURE_SWIPE_END; + gEvent.finger_count = VKEY_TP_GSE_FOUR_FINGERS; + libinput_event_gesture* lgEvent = libinput_create_gesture_event(touch, gEvent); + CHKPF(lgEvent); + funInputEvent_((libinput_event*)lgEvent, frameTime); + free(lgEvent); + vtpSwipeState_ = VTPSwipeStateType::SWIPE_END; + return true; +} + bool LibinputAdapter::HandleVKeyTrackPadPointerMove(libinput_event_touch* touch, const std::vector& msgItem) {