Инструменты пользователя

Инструменты сайта


bb:sdl:newwindowsystem-basics

Основа устройства новой оконной системы

Сначала посмотрим, как устроена оконная система в эталонном Блэкбокс на примере схемы прохождения сигналов от пользователя к фокусу: Поскольку эталонный Блэкбокс использует оконный менеджер Windows (своего у него нет), то сигнал от пользователя сразу попадает в объект HostWindows.Window, реализующий абстрактный интерфейс Windows.Window. Здесь сообщение от Windows транслируется в сообщение каркаса и передаётся в дерево фреймов (корень которого прикреплён к объекту окна), в итоге попадая в фокус.

Если же мы отказываемся от использования платформенного оконного менеджера, то придётся реализовать механизмы управления окнами средствами самого каркаса. Посмотрим, как будет выглядеть прохождение сообщений в этом случае:Итак, к нашей схеме добавились новые элементы.

Поскольку платформой теперь является кроссплатформенная прослойка SDL, то сигнал от пользователя сначала попадает в объект окна SDL. После чего передаётся в главное окно приложения. Это особый объект, который использует функциональность SDL для обработки сообщений, и хранит единый для всех окон каркаса контекст OpenGL.

Кроме этого, главное окно является контейнером для окон каркаса, которые теперь рисуются стандартными средствами, но при этом по-прежнему соблюдают контракт Windows.Window.

Далее сообщения идут обычным образом - по дереву фреймов, которое своё для каждого из стандартных окон каркаса (что совпадает с эталонной схемой).

bb/sdl/newwindowsystem-basics.txt · Последнее изменение: 2020/10/29 07:08 (внешнее изменение)