我正在利用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中运行。
答案 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.