The SDL wiki говорит:
Пожалуйста, обратите внимание, что это только обсуждает «мышей» с понятием графического интерфейса рабочего стола. У вас (как правило) есть один системный курсор, и ОС скрывает детали оборудования от вас. Если вы подключите 10 мышей, все десять перемещают этот один курсор. Для многих приложений и игр это идеально, и этот API уже со дня своего рождения обслуживал сотни SDL-программ.
Похоже, вам может быть не повезло, по крайней мере, используя простой SDL. Поскольку вы находитесь в Linux (и предположительно используете Xorg), вы можете посмотреть, как xinput обрабатывает несколько входов; source code for testing XI2 events может быть особенно полезен.
Например, на моей машине xinput
показывает целую кучу устройств:
$ xinput
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Logitech USB-PS/2 Optical Mouse id=11 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=14 [slave pointer (2)]
⎜ ↳ TPPS/2 IBM TrackPoint id=16 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Video Bus id=8 [slave keyboard (3)]
↳ Sleep Button id=9 [slave keyboard (3)]
↳ Integrated Camera id=10 [slave keyboard (3)]
↳ HID 046a:0011 id=12 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=13 [slave keyboard (3)]
↳ ThinkPad Extra Buttons id=15 [slave keyboard (3)]
можно затем использовать команду test-xi2
, чтобы получить события только для одного устройства (например, мой USB мышь), как это:
$ xinput test-xi2 11
...
EVENT type 17 (RawMotion)
device: 11 (11)
detail: 0
valuators:
flags:
0: -5.25 (-3.00)
1: 12.75 (8.00)
...
Это выводит только движения указателей, вызванные моей мышью, но не вызванные, например, с помощью трекпада. Если xinput является для вас вариантом, то source code может помочь вам на правильном пути реализовать свой собственный механизм.
Вы имели в виду 'event.which '? event.button, похоже, является uint8, а не объектом. – jhbh
[Вики-страница SDL] (http://wiki.libsdl.org/CategoryMouse) говорит: _ Обратите внимание, что это ТОЛЬКО обсуждает «мышей» с понятием графического интерфейса рабочего стола. У вас (как правило) есть один системный курсор, и ОС скрывает детали оборудования от вас. ** Если вы подключаете 10 мышей, все десять перемещают этот один курсор. ** Для многих приложений и игр это идеально, и этот API уже сорок лет обслуживал сотни SDL-программ. Похоже, вам может быть не повезло , – mindriot
Спасибо, человек. Вы можете разместить это как ответ, если хотите. – user1511417