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

Здесь можно сообщить о найденных багах в Far.
User avatar
HaRT
Moderator
Posts: 9105
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 90 times
Been thanked: 164 times

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

Post by HaRT » Wed 16 Oct, 2019 16:23

Как воспроизвожу:
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.
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
zg
zero-gravity
Posts: 5628
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 105 times
Contact:

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

Post by zg » Wed 16 Oct, 2019 16:33

на 10-ке всё ок. на w2k3 та же фигня. баг консоли?

User avatar
DrKnS
Posts: 5404
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 6 times
Been thanked: 240 times

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

Post by DrKnS » Wed 16 Oct, 2019 16:39

Скорее всего, такое присылает ОС.

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

User avatar
HaRT
Moderator
Posts: 9105
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 90 times
Been thanked: 164 times

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

Post by HaRT » Wed 16 Oct, 2019 16:49

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

User avatar
DrKnS
Posts: 5404
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 6 times
Been thanked: 240 times

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

Post by DrKnS » Wed 16 Oct, 2019 17:49

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

User avatar
HaRT
Moderator
Posts: 9105
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 90 times
Been thanked: 164 times

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

Post by HaRT » Wed 16 Oct, 2019 17:56

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
Это, думаю, форумчане легко проверят.
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
DrKnS
Posts: 5404
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 6 times
Been thanked: 240 times

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

Post by DrKnS » Wed 16 Oct, 2019 18:48

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

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

User avatar
HaRT
Moderator
Posts: 9105
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 90 times
Been thanked: 164 times

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

Post by HaRT » Wed 16 Oct, 2019 19:04

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 — это сборочный сервак, он обычно сильно занят.
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
DrKnS
Posts: 5404
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 6 times
Been thanked: 240 times

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

Post by DrKnS » Wed 16 Oct, 2019 19:17

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

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

User avatar
HaRT
Moderator
Posts: 9105
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 90 times
Been thanked: 164 times

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

Post by HaRT » Wed 16 Oct, 2019 19:25

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

User avatar
DrKnS
Posts: 5404
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 6 times
Been thanked: 240 times

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

Post by DrKnS » Wed 16 Oct, 2019 19:37

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

User avatar
HaRT
Moderator
Posts: 9105
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 90 times
Been thanked: 164 times

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

Post by HaRT » Wed 16 Oct, 2019 23:46

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

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

User avatar
DrKnS
Posts: 5404
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 6 times
Been thanked: 240 times

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

Post by DrKnS » Thu 17 Oct, 2019 00:35

Вроде бы так правильно показывает, только надо ещё ограничивать координаты сверху и снизу, а то сейчас они уходят в минус / в космос, если крутить за пределами окна.

User avatar
HaRT
Moderator
Posts: 9105
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 90 times
Been thanked: 164 times

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

Post by HaRT » Thu 17 Oct, 2019 00:44

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

User avatar
DrKnS
Posts: 5404
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 6 times
Been thanked: 240 times

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

Post by DrKnS » Thu 17 Oct, 2019 00:46

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

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

User avatar
HaRT
Moderator
Posts: 9105
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 90 times
Been thanked: 164 times

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

Post by HaRT » Thu 17 Oct, 2019 03:11

DrKnS wrote:
Thu 17 Oct, 2019 00:46
Еще надо учитывать, что начало координат - в левом верхнем углу буфера, а не окна (т.е. при наличии вертикальной прокрутки в левом верхем углу окна должно быть не [0, 0], а [0, N]).
Насколько я вижу, в мышиных событиях (скажем, щелчок ЛКМ) в Фаре координаты от окна, а не от буфера, поэтому так и реализовал. Да и в макросах интерфейса (например, ClickToTitleDir) от окна удобнее (разумеется, когда интерфейс Фара целиком в окне).
Фар есть инструмент, а не нянька. © 2009 DrKnS

Post Reply

Return to “Глюки и баги”