Меню: события прорисовки

Здесь можно сообщить о найденных багах в Far.
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Меню: события прорисовки

Post by zg »

Latest post of the previous page:

John Doe wrote:Для каких-то целей мне понадобилось воспользоваться событиями перерисовки, это верно.
Но попытавшись это сделать я обнаружил что это абсолютно невозможно ни для каких целей.
Это проблема АПИ, а не xy.
(Разумеется пока в меню "официально" событий нет, это "официально" не проблема, а, скажем, пожелание)
«проблему апи» породили вы. увидев, что far.SubscribeDialogDrawEvents ничего не решает вы вместо того, чтобы честно написать: SubscribeDialogDrawEvents не нужна, проблема на самом деле в диком количестве перерисовок меню и к макросистеме не имеет отношения, пишете: Всё отлично, спасибо!. вы породили очередной костыль в фаре и скрыли это от всех. как вы думаете, какое после этого будет отношения к вашим пожеланиям и багрепортам?
John Doe wrote:С каждым бывает, но не замечал что склонен описывать проблемы такого рода (и сейчас в упор не вижу).
а вы присмотритесь. пост мой предыдущий перечитайте. другой пример. зачёркнутая часть.
John Doe wrote:Бесспорно. Но я не владею c++, и не могу проанализировать исходники фара, поэтому излагаю проблему в терминах того, что получаю через АПИ.
Не могу судить, что тут нужно лечить, а могу лишь описать, как оно проявляется.
так описывайте. не надо лезть туда, где необходим анализ исходников фара и знание c++. сравните: меню в фаре необоснованно часто перерисовываются и то что вы написали в первом посте.
John Doe wrote:С этой точки зрения задача в том, чтобы иметь в ProcessDialogEventW понятные (а значит пригодные для использования) события.
И это не какое-то абстрактное оторванное от практики желание, это реальная необходимость в условиях скудной документации фара, в которой не описывается ряд существенных деталей (таких как например порядок событий, и т.п.).
при странных событиях возможны две ситуации:
1. если реальный баг. его и надо описывать, а не лезть туда, где требуется анализ исходников фара и знание c++.
2. если явного бага нет, значит он был и его закостылили. ждите, пока исправят нормально.
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Меню: события прорисовки

Post by Shmuel »

zg wrote:SubscribeDialogDrawEvents не нужна, проблема на самом деле в диком количестве перерисовок меню
Запрет по умолчанию на передачу событий перерисовки и добавление SubscribeDialogDrawEvents являются нормальным практическим решением. Дело не только в меню, в диалогах тоже много перерисовок, а на преобразование параметров C-Lua уходит много времени. Поэтому, если Lua-плагин не использует события перерисовки, эти преобразования являются чистой и неоправданной потерей времени.

[Off-topic] По-видимому, стоит упростить логику SubscribeDialogDrawEvents: запрещать передачу в Lua событий перерисовки при открытии любого диалога, для разрешения обработчик должен вызвать SubscribeDialogDrawEvents(true).
Last edited by Shmuel on Fri 10 Apr, 2015 11:18, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Меню: события прорисовки

Post by John Doe »

zg wrote: увидев, что far.SubscribeDialogDrawEvents ничего не решает вы вместо того, чтобы честно написать: SubscribeDialogDrawEvents не нужна, проблема на самом деле в диком количестве перерисовок меню и к макросистеме не имеет отношения, пишете: Всё отлично, спасибо!.
Торможение ушло, за это и спасибо. События меня вообще не интересовали, и не знал я о них ни чего.
zg wrote: а вы присмотритесь.
Не помогает. Недостатки разумеется вижу, но не ваше xy.
zg wrote: сравните: меню в фаре необоснованно часто перерисовываются и то что вы написали в первом посте.
"Перерисовывается" это уже интерпретация, а увидеть и описать я могу только "лишние" события, что и сделал.
Ошибку свою вижу в том, что не дал сразу полной картины.
zg wrote: 2. если явного бага нет, значит он был и его закостылили. ждите, пока исправят нормально.
Я и не пытаюсь ничего форсировать. Рад подождать. Но дефект-то надо как-то зафиксировать на багтрекере.
Предварительно я описываю его на форуме. Не в последнюю очередь для того, чтобы исключить собственные ошибки и неверные интерпретации.
Спасибо что поправляете.
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Меню: события прорисовки

Post by zg »

John Doe wrote:"Перерисовывается" это уже интерпретация, а увидеть и описать я могу только "лишние" события, что и сделал.
Ошибку свою вижу в том, что не дал сразу полной картины.
ваша проблема в чём? тормозят меню — это x. рапортуете вы что? в простое приходят события перерисовки — это y. связаны ли x и y. вы считаете, что это одно и тоже. аристотель, если я не ошиаюсь, тоже считал, что у мужчин зубов больше, чем у женщин. теоретически это обосновывал. прямо как вы. женат при этом был четыре раза.
так вот я отключил перерисовку в простое в меню и прогнал ваш же тест из вышеупомянутого тикета. разницы нет. т.е. решение y никак не влияет на x.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Меню: события прорисовки

Post by John Doe »

zg wrote: ваша проблема в чём? тормозят меню — это x.
Так не в этом же!

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

Но в данном случае необходимость отследить момент обновления списка истории — это лишь предыстория, а вовсе не x (я не рассчитываю, что события перерисовки в этом помогут).
X, и он же Y, с моей точки зрения состоят именно в том, что в меню невозможно вообще никак с пользой использовать события перерисовки.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Меню: события прорисовки

Post by John Doe »

zg wrote: из того, что я вижу, в VMenu2::Call (которая вызывается на каждый чих) дёргается DM_ENABLEREDRAW, что возможно приводит к частым перерисовкам. т.е. если была нажата стрелка вверх, то будет как минимум 4 перерисовки: собственно перерисовка из-за смены позиции, DN_INPUT для нажатия, DN_INPUT для отжатия, DN_CONTROLINPUT для нажатия. реально — что-то ещё. это плохо.
Хочу заметить, что всё это характерно и для листбоксов в диалогах.
А описанное в первом посте свойственно только меню.
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Меню: события прорисовки

Post by zg »

John Doe wrote:Предположил, что события перерисовки могут помочь, но обнаружил, что в меню их использовать не могу.
Не потому, что тормозит, а потому, что они не по делу приходят.
1. события приходят не по делу — это когда событие пришло, а перерисовки не было.
2. где в документации написано, что листбокс перерисовывается только при изменении содержимого?
John Doe wrote:что в меню невозможно вообще никак с пользой использовать события перерисовки.
и в чём проблема? нельзя — не пользуйтесь.
John Doe wrote:
zg wrote: из того, что я вижу, в VMenu2::Call (которая вызывается на каждый чих) дёргается DM_ENABLEREDRAW, что возможно приводит к частым перерисовкам. т.е. если была нажата стрелка вверх, то будет как минимум 4 перерисовки: собственно перерисовка из-за смены позиции, DN_INPUT для нажатия, DN_INPUT для отжатия, DN_CONTROLINPUT для нажатия. реально — что-то ещё. это плохо.
Хочу заметить, что всё это характерно и для листбоксов в диалогах.
А описанное в первом посте свойственно только меню.
вот не знаете вы c++, не умеете исходники анализировать, зачем чушь-то писать? листбокс и комбобокс на базе VMenu. на базе VMenu2 автодополнение и история.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Меню: события прорисовки

Post by John Doe »

zg wrote: 1. события приходят не по делу — это когда событие пришло, а перерисовки не было.
Была перерисовка или нет я знать не могу, моё дело описать симптомы, ваше — верно истолковать их.
Впредь буду ссылаться на это явление как "перерисовку, вероятно излишнюю".
zg wrote: и в чём проблема? нельзя — не пользуйтесь.
Проблема видимо в стремлении разобраться.

P.S.
Добавил в первый пост последовательность событий, приходящих после нажатия в меню курсорной клавиши.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Меню: события прорисовки

Post by John Doe »

Закомментировал строку 169 и особенности, указанные в первом посте, исчезли.
DN_DRAWDIALOG / DN_DRAWDIALOGDONE стало возможно использовать.

Проблем от отсутствия лишних перерисовок пока не заметил.
Post Reply

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