«я перечитал Кинга, и понял что так и было.» (ц) Олег Медведев.
короче, я перечитал Controls и WinCFrames, и понял, что делал всё неправильно. так что пилю заново. извините, но никак по пути не смог удержаться от
этого. очень уж нежню я люблю Window Maker (и NextSTEP через него).
также сильно прошу добавить в StdCFrames вот это:
Код:
PROCEDURE (f: Frame) KeyDownEx* (ch: CHAR; mods: SET), NEW, EXTENSIBLE;
BEGIN f.KeyDown(ch) END KeyDownEx;
оно совершенно ничему не мешает, ничего не ломает, а мне надо до зарезу чтобы редактор нормально запилить. ну, корявость, конечно, ради сохранения API, в идеале просто сигнатуру `KeyDown` поменять надо; но Совместимость Über Alles.
ну, и в Controls везде вызовы поменять, там их немного.
в принципе, за исключением вышеприведённого нюанса меня CFrames особо не ограничивают пока. может со временем даже undo/redo в редакторе будет нормальный (я пока не буду делать TextModel, наверное, и заморачиваться с прочей ундо-механикой, но потом надо будет; пока мне просто не очень ясно, не придётся ли снова расширять CFrames чуть-чуть).
ещё не хватает штатных сообщений MouseEnter/MouseLeave, чтобы сделать нормальный hover. ну да, MouseEnter можно через `Controllers.PollCursorMsg`, но MouseLeave нету. а опрашивать каждый раз в Restore «где мышь» как-то некультурно, получается помесь рисовалки и менеджера состояний (и, кстати, это как раз будет тот патологический пример, когда каждый контрол постоянно вызывает `.Input()`, и из-за пауз всё тормозит).
а. ещё я не понял точно, поддерживает ли система для форм прозрачный double buffering. кажется, нет — потому что мне удалось рисованием кучи линий заставить текст радиокнопки моргать. жаль, если так: рисование чего-то сложного в контролах тогда off limits.
p.s.: омики недодали dashed lines! хоть бы dashed hairline для рисования фокуса бы дали…