You've already forked libinput-touch-translator
mirror of
https://github.com/ukui/libinput-touch-translator.git
synced 2026-03-09 09:30:27 -07:00
fix touchpad gesture problems.
This commit is contained in:
@@ -32,6 +32,8 @@
|
||||
|
||||
#include <poll.h>
|
||||
|
||||
#include <QDebug>
|
||||
|
||||
static int finger_count = 0;
|
||||
|
||||
static int open_restricted(const char *path, int flags, void *user_data)
|
||||
@@ -120,7 +122,7 @@ void EventMonitor::startMonitor()
|
||||
|
||||
if (type == LIBINPUT_EVENT_TOUCH_DOWN) {
|
||||
finger_count++;
|
||||
} else if (type = LIBINPUT_EVENT_TOUCH_UP) {
|
||||
} else if (type == LIBINPUT_EVENT_TOUCH_UP) {
|
||||
finger_count--;
|
||||
}
|
||||
|
||||
@@ -129,7 +131,7 @@ void EventMonitor::startMonitor()
|
||||
case LIBINPUT_EVENT_TOUCH_MOTION:
|
||||
case LIBINPUT_EVENT_TOUCH_UP:
|
||||
case LIBINPUT_EVENT_TOUCH_FRAME:
|
||||
case LIBINPUT_EVENT_TOUCH_CANCEL:
|
||||
case LIBINPUT_EVENT_TOUCH_CANCEL: {
|
||||
//printf("touch event %d\n", type);
|
||||
if (m_touchScreenGestureManager) {
|
||||
m_touchScreenGestureManager->processEvent(event);
|
||||
@@ -138,6 +140,7 @@ void EventMonitor::startMonitor()
|
||||
m_touchScreenGestureManager->forceReset();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case LIBINPUT_EVENT_GESTURE_SWIPE_BEGIN:
|
||||
case LIBINPUT_EVENT_GESTURE_SWIPE_UPDATE:
|
||||
|
||||
@@ -36,6 +36,8 @@
|
||||
#include "touch-screen/touch-screen-two-finger-zoom-gesture.h"
|
||||
#include "touch-screen/touch-screen-two-finger-drag-and-tap-gesture.h"
|
||||
|
||||
#include "touchpad/touchpad-gesture-manager.h"
|
||||
|
||||
#include "settings-manager.h"
|
||||
#include "uinput-helper.h"
|
||||
|
||||
@@ -49,6 +51,7 @@ int main(int argc, char *argv[])
|
||||
|
||||
// init manager
|
||||
auto manager = TouchScreenGestureManager::getManager();
|
||||
TouchpadGestureManager::getManager();
|
||||
SettingsManager::getManager();
|
||||
|
||||
UInputHelper::getInstance();
|
||||
|
||||
@@ -93,6 +93,9 @@ SettingsManager::SettingsManager(QObject *parent) : QObject(parent)
|
||||
setTouchPadShortCut(TouchpadGestureManager::Pinch, TouchpadGestureManager::Finished, TouchpadGestureManager::ZoomIn, 4, QKeySequence("F11"));
|
||||
setTouchPadShortCut(TouchpadGestureManager::Pinch, TouchpadGestureManager::Finished, TouchpadGestureManager::ZoomOut, 4, QKeySequence("F11"));
|
||||
|
||||
setTouchPadShortCut(TouchpadGestureManager::Pinch, TouchpadGestureManager::Finished, TouchpadGestureManager::ZoomIn, 2, QKeySequence("Ctrl++"));
|
||||
setTouchPadShortCut(TouchpadGestureManager::Pinch, TouchpadGestureManager::Finished, TouchpadGestureManager::ZoomOut, 2, QKeySequence("Ctrl+-"));
|
||||
|
||||
m_settings->sync();
|
||||
}
|
||||
|
||||
|
||||
@@ -57,6 +57,32 @@ void TouchpadGestureManager::processEvent(libinput_event *event)
|
||||
// total offset
|
||||
m_totalDxmm += dx;
|
||||
m_totalDymm += dy;
|
||||
|
||||
m_lastDxmm += dx;
|
||||
m_lastDymm += dy;
|
||||
if (qAbs(m_lastDxmm) > 20 || qAbs(m_lastDymm) > 20) {
|
||||
// update
|
||||
if (qAbs(m_lastDxmm) > qAbs(m_lastDymm)) {
|
||||
if (m_lastDxmm > 0) {
|
||||
// right
|
||||
emit eventTriggered(Swipe, m_lastFinger, Update, Right);
|
||||
} else {
|
||||
// left
|
||||
emit eventTriggered(Swipe, m_lastFinger, Update, Left);
|
||||
}
|
||||
} else {
|
||||
if (m_lastDymm > 0) {
|
||||
// down
|
||||
emit eventTriggered(Swipe, m_lastFinger, Update, Down);
|
||||
} else {
|
||||
// up
|
||||
emit eventTriggered(Swipe, m_lastFinger, Update, Up);
|
||||
}
|
||||
}
|
||||
|
||||
m_lastDxmm = 0;
|
||||
m_lastDymm = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case LIBINPUT_EVENT_GESTURE_SWIPE_END: {
|
||||
@@ -96,11 +122,30 @@ void TouchpadGestureManager::processEvent(libinput_event *event)
|
||||
case LIBINPUT_EVENT_GESTURE_PINCH_BEGIN: {
|
||||
reset();
|
||||
m_lastFinger = libinput_event_gesture_get_finger_count(t);
|
||||
m_lastScale = -1;
|
||||
break;
|
||||
}
|
||||
case LIBINPUT_EVENT_GESTURE_PINCH_UPDATE: {
|
||||
m_totalScale = libinput_event_gesture_get_scale(t);
|
||||
m_totalAngle += libinput_event_gesture_get_angle_delta(t); // useless now
|
||||
qDebug()<<m_totalScale;
|
||||
|
||||
if (m_lastScale < 0) {
|
||||
m_lastScale = m_totalScale;
|
||||
break;
|
||||
}
|
||||
|
||||
if (qMax(m_totalScale/m_lastScale, m_lastScale/m_totalScale) > 1.5) {
|
||||
if (m_totalScale > m_lastScale) {
|
||||
// zoom in
|
||||
emit eventTriggered(Pinch, m_lastFinger, Update, ZoomIn);
|
||||
} else {
|
||||
// zoom out
|
||||
emit eventTriggered(Pinch, m_lastFinger, Update, ZoomOut);
|
||||
}
|
||||
m_lastScale = m_totalScale;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case LIBINPUT_EVENT_GESTURE_PINCH_END: {
|
||||
@@ -135,8 +180,14 @@ void TouchpadGestureManager::reset()
|
||||
m_totalDxmm = 0;
|
||||
m_totalDymm = 0;
|
||||
|
||||
m_lastDxmm = 0;
|
||||
m_lastDymm = 0;
|
||||
|
||||
m_totalScale = 0;
|
||||
m_totalAngle = 0;
|
||||
|
||||
m_lastScale = -1;
|
||||
m_lastAngle = 0;
|
||||
}
|
||||
|
||||
void TouchpadGestureManager::onEventTriggerd(TouchpadGestureManager::GestureType type, int fingerCount, TouchpadGestureManager::State state, TouchpadGestureManager::Direction direction)
|
||||
@@ -150,5 +201,8 @@ void TouchpadGestureManager::onEventTriggerd(TouchpadGestureManager::GestureType
|
||||
|
||||
TouchpadGestureManager::TouchpadGestureManager(QObject *parent) : QObject(parent)
|
||||
{
|
||||
qRegisterMetaType<GestureType>("GestureType");
|
||||
qRegisterMetaType<State>("State");
|
||||
qRegisterMetaType<Direction>("Direction");
|
||||
connect(this, &TouchpadGestureManager::eventTriggered, this, &TouchpadGestureManager::onEventTriggerd);
|
||||
}
|
||||
|
||||
@@ -73,9 +73,15 @@ private:
|
||||
int m_lastFinger = 0;
|
||||
bool m_isCancelled = 0;
|
||||
|
||||
double m_lastDxmm = 0;
|
||||
double m_lastDymm = 0;
|
||||
|
||||
double m_totalDxmm = 0;
|
||||
double m_totalDymm = 0;
|
||||
|
||||
double m_lastScale = 0;
|
||||
double m_lastAngle = 0;
|
||||
|
||||
double m_totalScale = 0;
|
||||
double m_totalAngle = 0;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user