------------------------------------------------------------------------------
-- --
-- Copyright (C) 1998-2000 E. Briot, J. Brobecker and A. Charlet --
-- Copyright (C) 2000-2014, AdaCore --
-- --
-- This library is free software; you can redistribute it and/or modify it --
-- under terms of the GNU General Public License as published by the Free --
-- Software Foundation; either version 3, or (at your option) any later --
-- version. This library is distributed in the hope that it will be useful, --
-- but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN- --
-- TABILITY or FITNESS FOR A PARTICULAR PURPOSE. --
-- --
-- As a special exception under Section 7 of GPL version 3, you are granted --
-- additional permissions described in the GCC Runtime Library Exception, --
-- version 3.1, as published by the Free Software Foundation. --
-- --
-- You should have received a copy of the GNU General Public License and --
-- a copy of the GCC Runtime Library Exception along with this program; --
-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
-- <http://www.gnu.org/licenses/>. --
-- --
------------------------------------------------------------------------------
-- <description>
-- 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.
--
-- </description>
-- <description>
-- 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.
--
-- </description>
-- <screenshot>gtk-layout</screenshot>
-- <group>Layout containers</group>
-- <testgtk>create_layout.adb</testgtk>
pragma Ada_2005;
pragma Warnings (Off, "*is already use-visible*");
with Gdk; use Gdk;
with Glib; use Glib;
with Glib.Properties; use Glib.Properties;
with Glib.Types; use Glib.Types;
with Gtk.Adjustment; use Gtk.Adjustment;
with Gtk.Buildable; use Gtk.Buildable;
with Gtk.Container; use Gtk.Container;
with Gtk.Enums; use Gtk.Enums;
with Gtk.Scrollable; use Gtk.Scrollable;
with Gtk.Widget; use Gtk.Widget;
package Gtk.Layout is
type Gtk_Layout_Record is new Gtk_Container_Record with null record;
type Gtk_Layout is access all Gtk_Layout_Record'Class;
------------------
-- Constructors --
------------------
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);
-- 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.
-- "hadjustment": horizontal scroll adjustment, or null
-- "vadjustment": vertical scroll adjustment, or null
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.
-- "hadjustment": horizontal scroll adjustment, or null
-- "vadjustment": vertical scroll adjustment, or null
function Get_Type return Glib.GType;
pragma Import (C, Get_Type, "gtk_layout_get_type");
-------------
-- Methods --
-------------
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
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
-- ().
-- "width": location to store the width set on Layout, or null
-- "height": location to store the height set on Layout, or null
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": width of entire scrollable area
-- "height": height of entire scrollable area
procedure Move
(Layout : not null access Gtk_Layout_Record;
Child_Widget : not null access Gtk.Widget.Gtk_Widget_Record'Class;
X : Gint;
Y : Gint);
-- Moves a current child of Layout to a new position.
-- "child_widget": a current child of Layout
-- "x": X position to move to
-- "y": 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 : Gint;
Y : 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": child widget
-- "x": X position of child widget
-- "y": Y position of child widget
---------------------------------------------
-- Inherited subprograms (from interfaces) --
---------------------------------------------
-- Methods inherited from the Buildable interface are not duplicated here
-- since they are meant to be used by tools, mostly. If you need to call
-- them, use an explicit cast through the "-" operator below.
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);
----------------
-- Properties --
----------------
-- The following properties are defined for this widget. See
-- Glib.Properties for more information on properties)
Height_Property : constant Glib.Properties.Property_Uint;
Width_Property : constant Glib.Properties.Property_Uint;
----------------
-- Interfaces --
----------------
-- This class implements several interfaces. See Glib.Types
--
-- - "Buildable"
--
-- - "Scrollable"
package Implements_Gtk_Buildable is new Glib.Types.Implements
(Gtk.Buildable.Gtk_Buildable, Gtk_Layout_Record, Gtk_Layout);
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;
package Implements_Gtk_Scrollable is new Glib.Types.Implements
(Gtk.Scrollable.Gtk_Scrollable, Gtk_Layout_Record, Gtk_Layout);
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;
private
Width_Property : constant Glib.Properties.Property_Uint :=
Glib.Properties.Build ("width");
Height_Property : constant Glib.Properties.Property_Uint :=
Glib.Properties.Build ("height");
end Gtk.Layout;