GTK:使用Offscreen窗口调查窗口小部件的渲染尺寸

时间:2015-06-24 22:52:17

标签: gtk ada gtk3

我正在利用Gtk.Offscreen_Window来调查各种屏幕外小部件的高度,以便根据它们的高度找出将它们放置在屏幕上的位置。我设法使用以下伪代码完成此操作。

procedure My_Proc 
is
    use Gtk.Offscreen_Window;
    use Gtk.Box;
    Offscreen : Gtk_Offscreen_Window := Gtk_Offscreen_Window_New;
    Box       : Gtk_Box := Gtk_Box_New ( Orientation_Vertical );
begin
    Offscreen.Set_Default_Geometry ( 1000, 1000 );
    Offscreen.Add ( Box );
    Offscreen.Show_All;
    Ada.Text_IO.Put_Line( Glib.Gint'Image ( Box.Get_Allocated_Height ));
end My_Proc;

此代码将正确告诉我Box的高度。请注意,我的原始代码比这更复杂,但我为了这个帖子而简化了它。

这里的问题与Offscreen.Show_All程序有关。我知道这不适合使用Offscreen小部件,因为它不能像普通的Window一样显示。执行此代码时,控制台上会显示一条警告,进一步强调了这一点:

(main:26724): Gdk-WARNING **: /build/buildd/gtk+3.0-3.10.8/./gdk/x11/gdkwindow-x11.c:5531 drawable is not a native X11 window

如果不包含Show_All函数,则大小计算将不正确(返回1),因此Show_All函数似乎正在做一些重要事情,尽管有点过多。我相信解决方案就像找出在Show_All函数中运行分配计算并直接运行它的内容一样简单。不幸的是,我不知道那是什么功能。

所以底线是:如何在不使用Show_All函数的情况下正确指示Offscreen_Window小部件执行其大小调整计算?

谢谢。

我正在使用Ada 2012,GtkAda(自2015年中期以来的最新版本),Linux Kubuntu 14.04,但也期望在Windows 7/8中运行。

1 个答案:

答案 0 :(得分:0)

I've recently learned that using the Gtk.Widget.Size_Request function was more correct for my situation than using Gtk.Widget.Get_Allocated_Height to find out the height of my newly spawned widget. Using this eliminates the erroneous use of Gtk.Widget.Show_All all together.

Thank you again for all your help.