Page 1 of 2

Неправильные координаты мыши в событиях колёсика

Posted: Wed 16 Oct, 2019 16:23
by HaRT
Как воспроизвожу:
1. Запускаю Фар только с плагином LuaMacro без скриптов, с настройками по умолчанию: start "" "%FarHome%\far.exe" /p"%FarHome%\Plugins\LuaMacro" -ro -s %TEMP%\FarProfile\%RANDOM% (окно должно занимать не весь экран и не быть прижатым в угол).
2. В командной строке запускаю lua: =mf.msgbox(mf.waitkey(),Mouse.X..','..Mouse.Y).
3. Сдвигаю мышь в левое верхнее знакоместо, кручу колёсико.
Ожидаю: 0,0, как, например, .
Получаю: . Дальнейшее исследование показывает, что получаемое значение неотличимо от результата пересчёта в знакоместа координат мыши от левого верхнего угла экрана, а не внутренности окна. В частности, если задвинуть консольное окно клиентской областью в левый верхний угол экрана, то координаты получаются правильные.

Windows 8.1 x64; Far Manager, version 3.0.0.5487 x86.

Неправильные координаты мыши в событиях колёсика

Posted: Wed 16 Oct, 2019 16:33
by zg
на 10-ке всё ок. на w2k3 та же фигня. баг консоли?

Неправильные координаты мыши в событиях колёсика

Posted: Wed 16 Oct, 2019 16:39
by DrKnS
Скорее всего, такое присылает ОС.

Проверье на https://farmanager.com/farbugs/readkey.zip - оно просто печатает всё, что приходит в консоль.

Неправильные координаты мыши в событиях колёсика

Posted: Wed 16 Oct, 2019 16:49
by HaRT
zg wrote: Wed 16 Oct, 2019 16:33баг консоли?
Весьма вероятно. К сожалению, доставляет вполне практические неудобства.
DrKnS wrote: Wed 16 Oct, 2019 16:39Скорее всего, такое присылает ОС.
Да, так и есть (ОС, очевидно, присылает координаты от начала буфера). Насколько сложно внести исправление в зависимости от версии Винды?

Неправильные координаты мыши в событиях колёсика

Posted: Wed 16 Oct, 2019 17:49
by DrKnS
HaRT wrote: Wed 16 Oct, 2019 16:49Насколько сложно внести исправление в зависимости от версии Винды?
Теоретически, наверное, можно выудить координаты окна в пикселях, пересчитать в знакоместа и вычесть, но:
- надо знать, когда именно это починили
- надо проверить работу в телнете
- надо проверить, воспроизводится ли баг в legacy mode в windows 10, и, если да:
- надо уметь определять, что legacy mode активен.

Неправильные координаты мыши в событиях колёсика

Posted: Wed 16 Oct, 2019 17:56
by HaRT
DrKnS wrote: Wed 16 Oct, 2019 17:49 надо знать, когда именно это починили
А грубое первое приближение с водоразделом между Win8 и Win10 не подойдёт?
Я также могу проверить в Windows Server 2016 и 2019.
DrKnS wrote: Wed 16 Oct, 2019 17:49 надо проверить работу в телнете
Хотел бы я знать, какая доля того промилле пользователей, которые запускают Фар в телнете, используют макросы на колёсико мышки.
DrKnS wrote: Wed 16 Oct, 2019 17:49 надо проверить, воспроизводится ли баг в legacy mode в windows 10
Это, думаю, форумчане легко проверят.

Неправильные координаты мыши в событиях колёсика

Posted: Wed 16 Oct, 2019 18:48
by DrKnS
HaRT wrote: Wed 16 Oct, 2019 17:56А грубое первое приближение с водоразделом между Win8 и Win10 не подойдёт?
Я проверил, в legacy mode воспроизводится (что логично, его обещали не трогать). Поэтому водораздел должен быть win10 new console / всё остальное.

Я пока что не планирую этим заниматься. Если вам это сильно мешает жить - вот и повод попробовать набросать и отладить черновую реализацию. В макросах есть FFI, так что всё доступно. Засунуть очередной костыль в far.exe мы всегда успеем.

Неправильные координаты мыши в событиях колёсика

Posted: Wed 16 Oct, 2019 19:04
by HaRT
DrKnS wrote: Wed 16 Oct, 2019 18:48 Поэтому водораздел должен быть win10 new console / всё остальное.
В идеале — да. Но под Win10 есть workaround — переключиться в новую консоль, а в более ранних ОС такой возможности нет. Т.ч. с точки зрения облегчения (по Парето) жизни пользователей есть прямой смысл исправить хотя бы для Win8 и ранее. А уже более сложные условия применения фикса можно было бы вырабатывать по мере дальнейшего энтузиазма.
DrKnS wrote: Wed 16 Oct, 2019 18:48 набросать и отладить черновую реализацию
А ещё у меня нет Win10 для экспериментов. Упомянутый выше Server 2019 — это сборочный сервак, он обычно сильно занят.

Неправильные координаты мыши в событиях колёсика

Posted: Wed 16 Oct, 2019 19:17
by DrKnS
HaRT wrote: Wed 16 Oct, 2019 19:04А ещё у меня нет Win10 для экспериментов.
А зачем? Оно там по умолчанию не воспрозиводится, сами же предлагаете "хотя бы для Win8 и ранее".

Подозреваю, большая часть работы будет не в определении новой консоли, а в корректном пересчёте (т.к., наверное, придётся учитывать еще и ширину рамки и заголовка окна).

Неправильные координаты мыши в событиях колёсика

Posted: Wed 16 Oct, 2019 19:25
by HaRT
DrKnS wrote: Wed 16 Oct, 2019 19:17 Подозреваю, большая часть работы будет не в определении новой консоли, а в корректном пересчёте
Не знаете ли в Фаре или плагинах готовый код, который получает ширину/высоту знакоместа в пикселях?

Неправильные координаты мыши в событиях колёсика

Posted: Wed 16 Oct, 2019 19:37
by DrKnS
HaRT wrote: Wed 16 Oct, 2019 19:25ширину/высоту знакоместа в пикселях
  1. CONSOLE_FONT_INFO FontInfo;
  2.  
  3.  
  4.  
  5. if (GetCurrentConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE), FALSE, &FontInfo))
  6.  
  7. {
  8.  
  9.     // use FontInfo.dwFontSize.X
  10.  
  11.     // use FontInfo.dwFontSize.Y
  12.  
  13. }

Неправильные координаты мыши в событиях колёсика

Posted: Wed 16 Oct, 2019 23:46
by HaRT
Вот, основываясь на предположении, что между закладкой события колёсика в очередь сообщений и его обработкой позиция указателя мыши не успела существенно измениться:
Прошу задействовать в Win 8.1 и более ранних.

Если всё же пытаться обрабатывать случай, когда мышка успела сильно сдвинуться, то нужно либо просто считать, что её координаты были в середине знакоместа, либо смотреть, в каком направлении она сдвинулась относительно знакоместа, и брать какой-то пиксель на его границе.

Неправильные координаты мыши в событиях колёсика

Posted: Thu 17 Oct, 2019 00:35
by DrKnS
Вроде бы так правильно показывает, только надо ещё ограничивать координаты сверху и снизу, а то сейчас они уходят в минус / в космос, если крутить за пределами окна.

Неправильные координаты мыши в событиях колёсика

Posted: Thu 17 Oct, 2019 00:44
by HaRT
DrKnS wrote: Thu 17 Oct, 2019 00:35 Вроде бы так правильно показывает, только надо ещё ограничивать координаты сверху и снизу, а то сейчас они уходят в минус / в космос, если крутить за пределами окна.
А в новой консоли Win10 они в минус и в космос не уходят? Тогда да, хорошо бы максимально похожий диапазон.

Неправильные координаты мыши в событиях колёсика

Posted: Thu 17 Oct, 2019 00:46
by DrKnS
HaRT wrote: Thu 17 Oct, 2019 00:44А в новой консоли Win10 они в минус и в космос не уходят?
Не уходят.

Еще надо учитывать, что начало координат - в левом верхнем углу буфера, а не окна (т.е. при наличии вертикальной прокрутки в левом верхем углу окна должно быть не [0, 0], а [0, N]).