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

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

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

Post by Shmuel » Fri 24 Mar, 2017 18:21

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

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: 5312
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 48 times
Contact:

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

Post by zg » Fri 24 Mar, 2017 18:53

far.Text(0,0,0,nil)?

Shmuel
Posts: 5234
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

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

Post by Shmuel » Fri 24 Mar, 2017 19:32

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

Но это дико неинтуитивно (имя функции Text вдруг приводит к отрисовке), это какое-то ноу-хау, которое надо всё время помнить.
Может всё же делать перерисовку по RestoreScreen() немедленно: и код чище будет, и ноу-хау не надо.

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

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

Post by zg » Sun 26 Mar, 2017 12:59

Shmuel wrote:Но это дико неинтуитивно
это очень старая фича, до 1.65, если я правильно помню. очевидно борьба за производительность, чтобы избежать лишних перерисовок.
4925.

Shmuel
Posts: 5234
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

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

Post by Shmuel » Sun 26 Mar, 2017 13:31

Спасибо, теперь RestoreScreen работает согласно документации. Поскольку там говорится о восстановлении области экрана, а не какого-то внутреннего буфера.

User avatar
DrKnS
Posts: 4646
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 125 times
Contact:

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

Post by DrKnS » Sun 26 Mar, 2017 14:17

А как оно раньше "сразу" работало, без Flush()?

Shmuel
Posts: 5234
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

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

Post by Shmuel » Sun 26 Mar, 2017 14:32

DrKnS wrote: А как оно раньше "сразу" работало, без Flush()?
Почему работало - можно посмотреть в исходниках билдов 4631 (или, например, 3630). Я в исходниках не копал, только снаружи - проверял кодом из 1-го поста темы.

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

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

Post by zg » Sun 26 Mar, 2017 15:33

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

Post Reply

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