2010-06-07 44 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