Собственный виджет GTK для обхода движка GTK? - PullRequest
0 голосов
/ 07 июня 2010

У меня есть прикладной уровень, который я хотел бы перенести на Gtk, у которого есть весь собственный код макета, и я не хочу тратить «n» месяцев на его переписку для работы с системой макетов Gtk, но скорее просто используя существующий внутренний код компоновки, и пусть Gtk отобразит полученные виджеты.

Я начал с написания собственного виджета после того, как попробовал несколько встроенных контейнеров. По сути, я ищу что-то вроде контейнера GtkFixed, который не имеет минимального размера, то есть Gtk поместит первый виджет во все окно, и все дочерние виджеты будут размещены так, чтобы они заполняли область. Если я использую GtkFixed для этого, окно всегда ограничено размером исходного макета, так как это «запрошенное» пространство. Я не могу изменить его размер меньше, чем используя края декора окна.

Может быть, мне нужно учиться в распределении против запроса. До сих пор я не нашел информацию, которая мне нужна для этой работы. Я попробовал.

Я сейчас использую C API и нацеливаюсь на Win32 и Linux. До сих пор у меня есть приложение оболочки, работающее в Win32, которое отображает пустое окно. Но первый дочерний виджет ограничивает изменение размера первоначальным размером.

Редактировать: к вашему сведению конечный результат всего этого доступен здесь . Этот код представляет базовый виджет, который я могу перемещать и изменять размер независимо от механизма компоновки GTK.

Ответы [ 2 ]

2 голосов
/ 07 июня 2010

Я полагаю, что вы хотите использовать GtkFixed и подключиться к нему по сигналу size-request, который вызывается всякий раз, когда виджет запрашивается, чтобы выяснить, сколько места ему нужно. Измените структуру GtkRequisition, чтобы освободить столько места, сколько нужно виджету. Это будет объем пространства, которое механизм компоновки GTK пытается выделить виджету, если это возможно, так что это, по сути, минимальный размер, который должен иметь виджет. Разумеется, механизм верстки может выделять больше (или меньше!) Места, чем вы запрашиваете.

0 голосов
/ 10 июня 2010

Проблема с моим кодом заключается в том, что я перехватывал «configure-event» и возвращал TRUE, что мешало работе некоторых обычных элементов компоновки GTK.Мне нужно, чтобы это событие обновило переменные внутреннего размера, но мне также нужно вернуть FALSE, чтобы позволить следующему обработчику получить этот сигнал.

Теперь мой виджет может правильно принять размер клиентской области окна, и язатем можно использовать позиционирование в стиле GtkFixed для размещения моих элементов управления там, где они мне нужны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...