buggins / dlangui

Cross Platform GUI for D programming language
Boost Software License 1.0
816 stars 121 forks source link

MDI support [RU] #449

Open kildin opened 7 years ago

kildin commented 7 years ago

Возможно ли добавить в createWindow() дополнительное значение WindowFlag, чтобы подчиненное окно "существовало" только в пределах родительского окна: изменяло размер, перемещалось, сворачивалось. То есть по сути сделать поддержку MDI интерфейса. И второй связанный вопрос. Я предполагаю, что при программной отрисовке (а может быть и c OpeenGL) на каждое окно создается соответствующий пиксельный буффер-массив. Для HD разрешения это будет 1920x1080x4, т.е. 8 с копейками мб под каждое окно. И если одна программа открывает 30 окон, потребуется порядка 250 мегабайт памяти. Отсюда есть предложение в MDI интерфейсе использовать "самодельную" отрисовку дочерних окон, то есть это будут не полноценные системные окна, а виджеты-контейнеры, отрисовывающиеся по той же схеме, что и остальные контроллы. Только с возможностью перемещения, изменения размера и сворачивания. Тогда, любое кол-во дочерних окон будет размещаться внутри одного главного окна и для отрисовки будет достаточно одного общего буфера, что может кардинально решить проблему использования памяти. Или я не правильно понял работу UI в вопросе программной отрисовки?

buggins commented 7 years ago

примерно так и рисуется - в конфигурации minimal или если OpenGL не удалось инициализировать. С OpenGL вероятно тоже что-то отжирается для каждого нового окна - там создаются контексты.

kildin commented 7 years ago

Вадим, и еще один связанный вопрос. При ресайзе окна пользователем, например со 100x100 на 200x200 будет последовательно вызвано в теоретическом сферическом вакууме 200 изменений размера буфера-массива (понятно, что по факту меньше)? Или он создается один раз под максимальное разрешение?

buggins commented 7 years ago

будет ресайз, возможно, не 200 раз а меньше