package Implements_Gtk_Buildable is new Glib.Types.Implements (Gtk.Buildable.Gtk_Buildable, Gtk_Layout_Record, Gtk_Layout);
package Implements_Gtk_Scrollable is new Glib.Types.Implements (Gtk.Scrollable.Gtk_Scrollable, Gtk_Layout_Record, Gtk_Layout);
type Gtk_Layout_Record is new Gtk_Container_Record with null record;
type Gtk_Layout is access all Gtk_Layout_Record'Class;
Height_Property : constant Glib.Properties.Property_Uint;
Width_Property : constant Glib.Properties.Property_Uint;
procedure Gtk_New
( | Layout | : out Gtk_Layout; |
Hadjustment | : Gtk.Adjustment.Gtk_Adjustment := null; | |
Vadjustment | : Gtk.Adjustment.Gtk_Adjustment := null); |
procedure Initialize
( | Layout | : not null access Gtk_Layout_Record'Class; |
Hadjustment | : Gtk.Adjustment.Gtk_Adjustment := null; | |
Vadjustment | : Gtk.Adjustment.Gtk_Adjustment := null); |
function Gtk_Layout_New
( | Hadjustment | : Gtk.Adjustment.Gtk_Adjustment := null; |
Vadjustment | : Gtk.Adjustment.Gtk_Adjustment := null) return Gtk_Layout; |
function Get_Type return Glib.GType;
function Get_Bin_Window
( | Layout | : not null access Gtk_Layout_Record) return Gdk.Gdk_Window; |
procedure Get_Size
( | Layout | : not null access Gtk_Layout_Record; |
Width | : out Guint; | |
Height | : out Guint); |
procedure Set_Size
( | Layout | : not null access Gtk_Layout_Record; |
Width | : Guint; | |
Height | : Guint); |
procedure Move
( | Layout | : not null access Gtk_Layout_Record; |
Child_Widget | : not null access Gtk.Widget.Gtk_Widget_Record'Class; | |
X | : Gint; | |
Y | : Gint); |
procedure Put
( | Layout | : not null access Gtk_Layout_Record; |
Child_Widget | : not null access Gtk.Widget.Gtk_Widget_Record'Class; | |
X | : Gint; | |
Y | : Gint); |
function Get_Hadjustment
( | Self | : not null access Gtk_Layout_Record) return Gtk.Adjustment.Gtk_Adjustment; |
procedure Set_Hadjustment
( | Self | : not null access Gtk_Layout_Record; |
Hadjustment | : access Gtk.Adjustment.Gtk_Adjustment_Record'Class); |
function Get_Hscroll_Policy
( | Self | : not null access Gtk_Layout_Record) return Gtk.Enums.Gtk_Scrollable_Policy; |
procedure Set_Hscroll_Policy
( | Self | : not null access Gtk_Layout_Record; |
Policy | : Gtk.Enums.Gtk_Scrollable_Policy); |
function Get_Vadjustment
( | Self | : not null access Gtk_Layout_Record) return Gtk.Adjustment.Gtk_Adjustment; |
procedure Set_Vadjustment
( | Self | : not null access Gtk_Layout_Record; |
Vadjustment | : access Gtk.Adjustment.Gtk_Adjustment_Record'Class); |
function Get_Vscroll_Policy
( | Self | : not null access Gtk_Layout_Record) return Gtk.Enums.Gtk_Scrollable_Policy; |
procedure Set_Vscroll_Policy
( | Self | : not null access Gtk_Layout_Record; |
Policy | : Gtk.Enums.Gtk_Scrollable_Policy); |
function "+"
( | Widget | : access Gtk_Layout_Record'Class) return Gtk.Buildable.Gtk_Buildable renames Implements_Gtk_Buildable.To_Interface; |
function "-"
( | Interf | : Gtk.Buildable.Gtk_Buildable) return Gtk_Layout renames Implements_Gtk_Buildable.To_Object; |
function "+"
( | Widget | : access Gtk_Layout_Record'Class) return Gtk.Scrollable.Gtk_Scrollable renames Implements_Gtk_Scrollable.To_Interface; |
function "-"
( | Interf | : Gtk.Scrollable.Gtk_Scrollable) return Gtk_Layout renames Implements_Gtk_Scrollable.To_Object; |
Gtk.Layout.Gtk_Layout is similar to Gtk.Drawing_Area.Gtk_Drawing_Area in that it's a "blank slate" and doesn't do anything but paint a blank background by default. It's different in that it supports scrolling natively (you can add it to a Gtk.Scrolled_Window.Gtk_Scrolled_Window), and it can contain child widgets, since it's a Gtk.Container.Gtk_Container.
However if you're just going to draw, a Gtk.Drawing_Area.Gtk_Drawing_Area is a better choice since it has lower overhead.
When handling expose events on a Gtk.Layout.Gtk_Layout, you must draw to GTK_LAYOUT (layout)->bin_window, rather than to GTK_WIDGET (layout)->window, as you would for a drawing area.
A Gtk_Layout is a widget that can have an almost infinite size, without occupying a lot of memory. Its children can be located anywhere within it, but will only appear on the screen if the visible area of the layout contains them. Just like a Gtk_Viewport, its visible area is indicated by two Gtk_Adjustment widgets, and thus a Gtk_Layout can be put as is in a Gtk_Scrolled_Window. As for Gtk_Fixed containers, the children can be located anywhere in the layout (no automatic organization is done). But, as opposed to Gtk_Fixed widgets, a Gtk_Layout does not try to resize itself to show all its children.
Starting from GtkAda 2.0, you have to call Set_Size and specify the maximum size of the layout, otherwise children added with Put outside the size defined for the layout will never be visible. One way to do this is to systematically call Set_Size before calling Put, and make sure you specify a size big enough for the layout.