снова разрешил битмаповый скролл. смотреть
отсюда и дальше.
битмаповый скролл отлично работает если не открыт ни один оверлей (меню или попап, например). соответственно, StdDocuments.Document должен блочить такие попытки, если у его оверлей болтается. стддок я научил, и в Views надо начинать спрашивать не с двух фрэймов выше, а с одного. я фиг знает, почему там делается сначала `f.up`, а потом ещё и проверяется на `g.up # NIL` вместо `g # NIL`. таким образом мы пролетаем мимо документа из текущего окна, и если оверлей открыт не в UltimateRoot, то ой, беда. а у меня такие оверлеи открываются (автодополнятор, например). также это не работает для detached windows.
короче, проверяю на `g # NIL`. хотя я вообще сильно подозреваю, что и `g := f.up` надо заменить на `g := f`, потому что текущий фрэйм тоже должен иметь право заблочить безобразие.
ещё, подозреваю, будет фигня, если у нас есть перекрывающиеся фреймы (нижний частично закрыт верхним), и мы пытаемся поскроллить нижний. он скопирует часть перекрытого, и будет страшно. это тоже надо бы проверять.
и ещё сильно подозреваю, что битмаповый скролл документа с горизонтальным скроллбаром этот самый скроллбар тоже захватит (потому что скроллится весь документ с границами). по какому поводу надо вообще не только спрашивать разрешения на скролл, но и вдобавок у текущего фрэйма спросить, какую часть он может скопировать, а какие надо заново отрисовать.
вот если доделать всё, что я тут описал, то битмаповый скролл вполне себе сможет работать. что, в общем-то, полезно, потому что для тех же текстов при медленном скроллировании позволяет избежать полной перерисовки (которая может изрядно тормозить, если у нас есть абзацы больших размеров).