Обзор модели отрисовки
В этой главе подробно описывается модель отрисовки GTK. Если вас интересует процесс, который GTK использует для отрисовки своих виджетов и окон, вам следует прочитать эту главу; это будет полезно, если вы решите реализовать свои собственные виджеты. Эта глава также прояснит причины, по которым определенные вещи выполняются в GTK.
Приложения, использующие оконную систему, обычно создают прямоугольные области на экране, называемые поверхностями (GTK следует терминологии Wayland, другие оконные системы, такие как X11, могут называть их окнами). Традиционные оконные системы не автоматически сохраняют графическое содержимое поверхностей, а вместо этого просят приложения предоставлять новое содержимое всякий раз, когда это необходимо. Например, если окно, которое расположено под другими окнами, поднимается наверх, приложение должно перерисовать его, чтобы отобразить ранее скрытую область. Когда оконная система просит приложение перерисовать окно, она отправляет событие кадра (событие expose в терминологии X11) для этого окна.
Каждое верхнее окно или диалоговое окно GTK связано с поверхностью оконной системы. Дочерние виджеты, такие как кнопки или поля ввода, не имеют собственной поверхности; они используют поверхность своего верхнего окна.
Обычно цикл отрисовки начинается, когда GTK получает событие кадра от базовой оконной системы: если пользователь перетаскивает окно поверх другого, оконная система сообщит базовой поверхности, что ей нужно перерисовать себя. Цикл отрисовки также может быть инициирован, когда сам виджет решит, что ему нужно обновить свой дисплей. Например, когда пользователь вводит символ в виджет поля ввода, поле ввода просит GTK добавить операцию перерисовки в очередь для себя.
Оконная система генерирует события кадров для поверхностей. Интерфейс GDK к оконной системе преобразует такие события в выброс сигнала ::render на затронутых поверхностях. Верхнее окно GTK подключается к этому сигналу и реагирует соответствующим образом.
В следующих разделах описывается, как GTK определяет, какие виджеты необходимо перерисовать в ответ на такие события, и как виджеты работают внутри, в отношении ресурсов, которые они используют от оконной системы.
© 2005–2020 The GNOME Project
Licensed under the GNU Lesser General Public License version 2.1 or later.
https://developer-old.gnome.org/gtk4/4.0/drawing-overview.html