2010-06-07 63 views
0

我有一個應用程序層,我想移植到Gtk,它擁有所有它自己的佈局代碼,我不想花費幾個月的時間重新編寫它以使用Gtk佈局系統,而是隻需使用現有的內部佈局代碼並讓Gtk渲染所產生的小部件。自定義GTK小部件繞過GTK佈局引擎?

我已經開始通過嘗試幾個內置容器後編寫自己的小部件。基本上我正在尋找類似GtkFixed容器的東西,它沒有最小尺寸,即Gtk會將第一個窗口小部件放到整個窗口中,所有子窗口小部件都會自己放置,以便填充該區域。如果我爲此使用GtkFixed,則窗口始終限制爲初始佈局的大小,因爲這是「請求」空間。我無法將其調整爲小於使用窗口裝飾邊緣的大小。

也許我需要在分配和請求上學。到目前爲止,我的谷歌搜索還沒有找到我需要的信息來完成這項工作。我確實嘗試過。

我現在使用的是C API,而我的目標是Win32和Linux。到目前爲止,我有一個在Win32中工作的shell應用程序,它提供了一個空窗口。但是第一個子窗口小部件將調整大小限制爲初始大小。

編輯︰FYI所有這一切的最終結果是可用here。該代碼代表了我可以移動和調整獨立於GTKs佈局引擎的基礎小部件。

回答

0

我的代碼的問題是,我捕捉到「配置事件」並返回TRUE,這阻止了一些正常的GTK佈局工作。我需要該事件來更新我的內部大小變量,但我還需要返回FALSE以允許下一個處理程序獲取該信號。

現在我的小部件可以正確假定窗口客戶區的大小,然後我可以使用GtkFixed樣式定位來佈置我需要它們去的控件。

+0

你如何設置第一個小部件的大小,而沒有它讓你的容器卡在這個大小? – pib 2010-09-27 17:14:03

+0

對於窗口內部最頂層的窗口部件,我請求10x10像素,Gtk展開以填充整個窗口。其餘的子部件準確地請求其定義的大小。 – fret 2010-09-28 05:34:46

2

我相信你想使用一個GtkFixed並連接到size-request信號,它會在每個小部件被要求弄清楚它需要多少空間時被調用。將GtkRequisition結構修改爲您希望小部件具有的空間。如果可能的話,這將是GTK佈局引擎嘗試分配給窗口小部件的空間量,所以它基本上是您希望窗口小部件具有的最小大小。當然,佈局引擎可以自由分配比請求更多(或更少)的空間。

+0

我試過了,一旦我將這個大小返回給GTK,我就無法調整窗口的大小,這比在GtkWindow中有GtkFixed的情況下的大小要小。如果我嘗試使用1x1,那麼它不會被拉伸以填充窗口......它只是坐落在0,0-1,1的左上角。 – fret 2010-06-07 23:44:32