RestoreScreen не сразу восстанавливает экран

Место, где разработчики плагинов могут поделиться своим опытом.
Post Reply
Shmuel
Posts: 6167
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 330 times

RestoreScreen не сразу восстанавливает экран

Post by Shmuel »

Думал сначала это в глюки и баги поместить, но не уверен.
Тест-код:

Code: Select all

far.Message("text", "title", "")
local h = far.SaveScreen()
far.Message"hi"
local tt = os.clock()
far.RestoreScreen(h)
while os.clock() - tt < 3 do end
В билдах 4631 и ранее far.RestoreScreen(h) рисует экран сразу по его вызову.
В билдах 4637 и позднее - с задержкой в 3 сек., то есть покуда управление не будет передано от скрипта к Фару. ACTL_REDRAWALL не помогает.

Вот у меня в плагине такая ситуация: юзер нажал Esc во время поиска с панели, а при запросе подтверждения прерывания - отменил. Всё - экран показывает панели, а моё окно прогресса не восстанавливается.
User avatar
zg
zero-gravity
Posts: 5878
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 155 times
Contact:

RestoreScreen не сразу восстанавливает экран

Post by zg »

far.Text(0,0,0,nil)?
Shmuel
Posts: 6167
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 330 times

RestoreScreen не сразу восстанавливает экран

Post by Shmuel »

Спасибо, работает. (Для данного вызова параметры можно все опустить).

Но это дико неинтуитивно (имя функции Text вдруг приводит к отрисовке), это какое-то ноу-хау, которое надо всё время помнить.
Может всё же делать перерисовку по RestoreScreen() немедленно: и код чище будет, и ноу-хау не надо.
User avatar
zg
zero-gravity
Posts: 5878
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 155 times
Contact:

RestoreScreen не сразу восстанавливает экран

Post by zg »

Shmuel wrote:Но это дико неинтуитивно
это очень старая фича, до 1.65, если я правильно помню. очевидно борьба за производительность, чтобы избежать лишних перерисовок.
4925.
Shmuel
Posts: 6167
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 330 times

RestoreScreen не сразу восстанавливает экран

Post by Shmuel »

Спасибо, теперь RestoreScreen работает согласно документации. Поскольку там говорится о восстановлении области экрана, а не какого-то внутреннего буфера.
User avatar
DrKnS
Posts: 5748
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 9 times
Been thanked: 319 times

RestoreScreen не сразу восстанавливает экран

Post by DrKnS »

А как оно раньше "сразу" работало, без Flush()?
Shmuel
Posts: 6167
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 330 times

RestoreScreen не сразу восстанавливает экран

Post by Shmuel »

DrKnS wrote: А как оно раньше "сразу" работало, без Flush()?
Почему работало - можно посмотреть в исходниках билдов 4631 (или, например, 3630). Я в исходниках не копал, только снаружи - проверял кодом из 1-го поста темы.
User avatar
zg
zero-gravity
Posts: 5878
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 155 times
Contact:

RestoreScreen не сразу восстанавливает экран

Post by zg »

думаю, дело в 4634.
Post Reply

Return to “Разработка плагинов”