Разница между Gdk.Window, GtkWindow и GWindow в lablgtk
В Lablgtk есть (как минимум) три типа оконно-названных модулей:
- Gdk.Window
- GtkWindow
- GWindow
В чем разница между ними, и как я могу перейти от одного к другому?
1 ответ
GTK изначально был для систем X11. В X11 "окно" - это прямоугольная область, на которой можно рисовать и выбирать события. Они могут быть вложены в дерево с "корневым окном" вверху для всего экрана. Gdk.window
это тонкая оболочка вокруг окна X11, но достаточно абстрактная для поддержки бэкэндов не-X11.
Окно GTK - это то, что пользователь может считать окном - изменяемая область экрана с заголовком, рамкой и т. Д. Фактически, это, вероятно, окно X11, предоставляемое диспетчером окон, содержащим заголовок и рамку, и другой X11. окно для области содержимого. Это внутреннее окно может содержать подокна, например, одно для каждой кнопки. Тем не менее, я думаю, что современный GTK обычно не заботится о подокнах и управляет всем сам, чтобы избежать мерцания.
Gtk.window Gtk.obj
представляет объект C, предоставленный библиотекой GTK C. Функции, предоставляемые библиотекой C, доступны в GtkWindow.Window
,
Тем не менее, объект C обычно оборачивается GWindow.window
класс для предоставления ему OO OCaml API.
использование gtk_window#misc#window
чтобы получить окно GDK из GWindow.window
,