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 except paint a blank background by default. It's different in that it supports scrolling natively due to implementing Gtk.Scrollable.Gtk_Scrollable, and can contain child widgets since it's a Gtk.Container.Gtk_Container.
If you just want to draw, a Gtk.Drawing_Area.Gtk_Drawing_Area is a better choice since it has lower overhead. If you just need to position child widgets at specific points, then Gtk.Fixed.Gtk_Fixed provides that functionality on its own.
When handling expose events on a Gtk.Layout.Gtk_Layout, you must draw to the Gdk.Gdk_Window returned by Gtk.Layout.Get_Bin_Window, rather than to the one returned by Gtk.Widget.Get_Window as you would for a Gtk.Drawing_Area.Gtk_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.
<screenshot>gtk-layout</screenshot> <group>Layout containers</group> <testgtk>create_layout.adb</testgtk>
function "+"
(Widget : access Gtk_Layout_Record'Class)
return Gtk.Buildable.Gtk_Buildable
function "+"
(Widget : access Gtk_Layout_Record'Class)
return Gtk.Scrollable.Gtk_Scrollable
function "-"
(Interf : Gtk.Buildable.Gtk_Buildable)
return Gtk_Layout
function "-"
(Interf : Gtk.Scrollable.Gtk_Scrollable)
return Gtk_Layout
function Get_Bin_Window
(Layout : not null access Gtk_Layout_Record) return Gdk.Gdk_Window
Retrieve the bin window of the layout used for drawing operations. Since: gtk+ 2.14
a Gdk.Gdk_Window
function Get_Border
(Self : not null access Gtk_Layout_Record;
Border : access Gtk.Style.Gtk_Border) return Boolean
function Get_Hadjustment
(Self : not null access Gtk_Layout_Record)
return Gtk.Adjustment.Gtk_Adjustment
function Get_Hscroll_Policy
(Self : not null access Gtk_Layout_Record)
return Gtk.Enums.Gtk_Scrollable_Policy
procedure Get_Size
(Layout : not null access Gtk_Layout_Record;
Width : out Guint;
Height : out Guint)
Gets the size that has been set on the layout, and that determines the total extents of the layout's scrollbar area. See gtk_layout_set_size ().
location to store the width set on Layout, or null
location to store the height set on Layout, or null
function Get_Type return Glib.GType
function Get_Vadjustment
(Self : not null access Gtk_Layout_Record)
return Gtk.Adjustment.Gtk_Adjustment
function Get_Vscroll_Policy
(Self : not null access Gtk_Layout_Record)
return Gtk.Enums.Gtk_Scrollable_Policy
type Gtk_Layout is access all Gtk_Layout_Record'Class;
function Gtk_Layout_New
(Hadjustment : Gtk.Adjustment.Gtk_Adjustment := null;
Vadjustment : Gtk.Adjustment.Gtk_Adjustment := null)
return Gtk_Layout
Creates a new Gtk.Layout.Gtk_Layout. Unless you have a specific adjustment you'd like the layout to use for scrolling, pass null for Hadjustment and Vadjustment.
horizontal scroll adjustment, or null
vertical scroll adjustment, or null
type Gtk_Layout_Record is new Gtk_Container_Record with null record;
procedure Gtk_New
(Layout : out Gtk_Layout;
Hadjustment : Gtk.Adjustment.Gtk_Adjustment := null;
Vadjustment : Gtk.Adjustment.Gtk_Adjustment := null)
Creates a new Gtk.Layout.Gtk_Layout. Unless you have a specific adjustment you'd like the layout to use for scrolling, pass null for Hadjustment and Vadjustment. Initialize does nothing if the object was already created with another call to Initialize* or G_New.
horizontal scroll adjustment, or null
vertical scroll adjustment, or null
Height_Property : constant Glib.Properties.Property_Uint;
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);
procedure Initialize
(Layout : not null access Gtk_Layout_Record'Class;
Hadjustment : Gtk.Adjustment.Gtk_Adjustment := null;
Vadjustment : Gtk.Adjustment.Gtk_Adjustment := null)
Creates a new Gtk.Layout.Gtk_Layout. Unless you have a specific adjustment you'd like the layout to use for scrolling, pass null for Hadjustment and Vadjustment. Initialize does nothing if the object was already created with another call to Initialize* or G_New.
horizontal scroll adjustment, or null
vertical scroll adjustment, or null
procedure Move
(Layout : not null access Gtk_Layout_Record;
Child_Widget : not null access Gtk.Widget.Gtk_Widget_Record'Class;
X : Glib.Gint;
Y : Glib.Gint)
Moves a current child of Layout to a new position.
a current child of Layout
X position to move to
Y position to move to
procedure Put
(Layout : not null access Gtk_Layout_Record;
Child_Widget : not null access Gtk.Widget.Gtk_Widget_Record'Class;
X : Glib.Gint;
Y : Glib.Gint)
The child will be displayed on the screen only if at least part of it intersects the visible area of the layout. The layout does not resize itself to automatically show the widget. You also need to call Set_Size, if the size you initially defined is smaller than (X, Y), or the child will never be visible even if the layout is scrolled.
child widget
X position of child widget
Y position of child widget
procedure Set_Hadjustment
(Self : not null access Gtk_Layout_Record;
Hadjustment : access Gtk.Adjustment.Gtk_Adjustment_Record'Class)
procedure Set_Hscroll_Policy
(Self : not null access Gtk_Layout_Record;
Policy : Gtk.Enums.Gtk_Scrollable_Policy)
procedure Set_Size
(Layout : not null access Gtk_Layout_Record;
Width : Guint;
Height : Guint)
Sets the size of the scrollable area of the layout.
width of entire scrollable area
height of entire scrollable area
procedure Set_Vadjustment
(Self : not null access Gtk_Layout_Record;
Vadjustment : access Gtk.Adjustment.Gtk_Adjustment_Record'Class)
procedure Set_Vscroll_Policy
(Self : not null access Gtk_Layout_Record;
Policy : Gtk.Enums.Gtk_Scrollable_Policy)
Width_Property : constant Glib.Properties.Property_Uint;