Как избежать прыжков курсора мыши при использовании матрицы преобразования координат xinput, когда приложение отпускает мышь

В современных производных версиях Debian, включая Mint, mingw32больше не доступен; он был заменен наmingw-w64:

sudo apt install mingw-w64

должно работать.

Этот пакет содержит 32-битные -и 64-битные -компиляторы для Windows. При переключении с mingw32на mingw-w64вам необходимо настроить целевые триоли :

.

  • i686-w64-mingw32для 32-битной -Windows;
  • x86_64-w64-mingw32для 64-битной -Windows.

3
11.01.2019, 01:09
3 ответа

Вместо этого используйте ускорение. Для 16000 DPI на моем HyperX Pulsefire Surge нормальное значение составляет -0,935. Эта ошибка также работает с панелью, которая автоматически скрывается, телепортирует мышь.

0
17.10.2020, 11:06

Попробуйте использовать XIWarpPointer для своей версии XWarpPointer. Что-то вроде:

#include <X11/extensions/XInput2.h>
int XWarpPointer(Display *display, Window src_w, Window dest_w, int src_x, int
            src_y, unsigned int src_width, unsigned int src_height, int dest_x, int
            dest_y){
    static int isnew=1;
    static int device=0;
    int dev_temp;
    if(XIGetClientPointer(display,dest_w,&dev_temp)){
        isnew=0;
        device=dev_temp;
    }
    if(isnew) return 1;
    return XIWarpPointer(display,device,src_w,dest_w,src_x,src_y,src_width,src_height,dest_x,dest_y);
}

Скомпилируйте его с помощью gcc xwarp.c --shared -или xwarp.so -lXi, а затем просто используйте LD _PRELOAD

0
29.01.2021, 12:54

Мое «решение» состояло в том, чтобы выбрать матрицу преобразования, которая удерживает курсор на месте, когда он находится в центре.

Вы хотите использовать матрицу:

3 by 3 matrix s 0 (1-s)x 0 s (1-s)y 0 0 1

Где s — коэффициент масштабирования, который вы хотите использовать для своей мыши, например. 0,5 для половинной скорости. А x и y — это координаты центра вашего экрана.

Простой способ получить значение x,y — использовать xdotool getmouselocationперед переходом.

Пример

Я хотел, чтобы моя чувствительность s = 0,4

После открытия инвентаря в minecraft,xdotool getmouseloationсообщает, что у меня x = 960 и y = 1729. Вычисление моих смещений (1 -с )*x = 0,6 *960 = 576 и (1 -с )*y = 0,6 *1729 = 1037,4

Затем я соответствующим образом изменил матрицу преобразования координат

xinput set-prop 8 'Coordinate Transformation Matrix' 0.4 0 576 0 0.4 1037.4 0 0 1

(Моя мышь — устройство 8, скорее всего, для вас будет другим.)

Недостатки

Это устраняет проблему только для определенной координаты. Для чего-то вроде Minecraft, где вы обычно держите окно в одном и том же положении, этого исправления достаточно, и ваша мышь больше не будет прыгать при входе в ваш инвентарь.

В других случаях использования вы все равно будете испытывать скачки, но скачки будут меньше, когда ваша мышь находится близко к выбранным вами x, y.

Математические детали

Дополнительные сведения о математике см. в https://math.stackexchange.com/questions/2954781/calculating-the-translation-of-an-affine-matrix-so-that-it-centres-during-scalin

.
2
17.03.2021, 12:08

Теги

Похожие вопросы