------------------------------------------------------------------------------
-- GtkAda - Ada95 binding for Gtk+/Gnome --
-- --
-- Copyright (C) 2011-2015, 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 --
-- . --
-- --
------------------------------------------------------------------------------
-- Regions -- Representing a pixel-aligned area
--
-- Bindings to the Cairo 2D graphics library.
-- Regions are a simple graphical data type representing an area of integer-
-- aligned rectangles. Thay are often used on raster surfaces to track areas
-- of interest, such as change or clip areas.
--
--
-- 1.10
-- Cairo
package Cairo.Region is
type Cairo_Region is private;
-- A Cairo_Region represents a set of integer-aligned rectangles.
--
-- It allows set-theoretical operations like Union and Intersect to be
-- performed on them.
--
-- Memory management of Cairo_Region is done with Reference and
-- Destroy.
--
-- Since: 1.10
Null_Region : constant Cairo_Region;
type Cairo_Rectangle_Int is record
X, Y, Width, Height : aliased Gint;
end record;
type Cairo_Region_Overlap is
(Cairo_Region_Overlap_In, -- Completely inside region
Cairo_Region_Overlap_Out, -- Completely outside region
Cairo_Region_Overlap_Part -- Partly inside region
);
-- Used as the return value for Contains_Rectangle.
pragma Convention (C, Cairo_Region_Overlap);
function Create return Cairo_Region;
-- Allocates a new empty region object.
--
-- Returns: A newly allocated Cairo_Region. Free with Destroy. This
-- function always returns a valid Cairo_Region; if memory cannot be
-- allocated, then a special error object is returned where all operations
-- on the object do nothing. You can check for this with Status.
function Create_Rectangle
(Rectangle : access Cairo_Rectangle_Int) return Cairo_Region;
-- Allocates a new region object containing Rectangle.
--
-- Returns: A newly allocated Cairo_Region. Free with Destroy. This
-- function always returns a valid Cairo_Region; if memory cannot be
-- allocated, then a special error object is returned where all operations
-- on the object do nothing. You can check for this with Status.
function Copy (Original : Cairo_Region) return Cairo_Region;
-- Allocates a new Cairo_Region object copying the area from Original.
--
-- Returns: A newly allocated Cairo_Region. Free with Destroy. This
-- function always returns a valid Cairo_Region; if memory cannot be
-- allocated, then a special error object is returned where all operations
-- on the object do nothing. You can check for this with Status.
function Reference (Region : Cairo_Region) return Cairo_Region;
-- Increases the reference count on Region by one. This prefents Region
-- from being destroyed until a matching call to Destroy is made.
procedure Destroy (Region : Cairo_Region);
-- Destroys a Cairo_Region object created with Create, Copy or
-- Create_Rectangle.
function "=" (A, B : Cairo_Region) return Boolean;
-- Compares whether A is equivalent to B. Null_Region as an argument is
-- equal to itself, but not to any non-Null_Region region.
function Status (Region : Cairo_Region) return Cairo_Status;
-- Checks whether an error has occured for this region object.
--
-- Returns: Cairo_Status_Success or Cairo_Status_No_Memory
procedure Get_Extents
(Region : Cairo_Region;
Extents : out Cairo_Rectangle_Int);
-- Gets the bounding rectangle of Region as a Cairo_Rectangle_Int
function Num_Rectangles (Region : Cairo_Region) return Gint;
-- Returns the number of rectangle contained in Region
procedure Get_Rectangle
(Region : Cairo_Region;
Nth : Gint;
Rectangle : out Cairo_Rectangle_Int);
-- Stores the Nth rectangle from the region in Rectangle.
function Is_Empty (Region : Cairo_Region) return Boolean;
-- Checks whether Region is empty.
function Contains_Rectangle
(Region : Cairo_Region;
Rectangle : access Cairo_Rectangle_Int) return Cairo_Region_Overlap;
-- Checks whether Rectangle is inside, outside or partially contained in
-- Region
function Contains_Point
(Region : Cairo_Region;
X : Gint;
Y : Gint) return Boolean;
-- Checks whether (X,Y) is contained in Region.
procedure Translate
(Region : Cairo_Region;
dX : Gint;
dY : Gint);
-- Translates Region by (dX,dY).
function Subtract
(Dst : Cairo_Region;
Other : Cairo_Region) return Cairo_Status;
-- Subtracts Other from Dst and places the result in Dst.
--
-- Returns: Cairo_Status_Success or Cairo_Status_No_Memory.
function Subtract_Rectangle
(Dst : Cairo_Region;
Rectangle : access Cairo_Rectangle_Int) return Cairo_Status;
-- Subtracts Rectangle from Dst and places the result in Dst.
--
-- Returns: Cairo_Status_Success or Cairo_Status_No_Memory.
function Intersect
(Dst : Cairo_Region;
Other : Cairo_Region) return Cairo_Status;
-- Computes the intersection of Dst with Other and places the result in Dst
--
-- Returns: Cairo_Status_Success or Cairo_Status_No_Memory.
function Intersect_Rectangle
(Dst : Cairo_Region;
Rectangle : access Cairo_Rectangle_Int) return Cairo_Status;
-- Computes the intersection of Dst with Rectangle and places the result in
-- Dst.
--
-- Returns: Cairo_Status_Success or Cairo_Status_No_Memory.
function Union
(Dst : Cairo_Region;
Other : Cairo_Region) return Cairo_Status;
-- Computes the union of Dst with Other and places the result in Dst.
--
-- Returns: Cairo_Status_Success or Cairo_Status_No_Memory.
function Union_Rectangle
(Dst : Cairo_Region;
Rectangle : access Cairo_Rectangle_Int) return Cairo_Status;
-- Computes the union of Dst with Rectangle and places the result in Dst.
--
-- Returns: Cairo_Status_Success or Cairo_Status_No_Memory.
function Do_Xor
(Dst : Cairo_Region;
Other : Cairo_Region) return Cairo_Status;
-- Computes the exclusive difference of Dst with Other and places the
-- result in Dst.
--
-- Returns: Cairo_Status_Success or Cairo_Status_No_Memory.
function Xor_Rectangle
(Dst : Cairo_Region;
Rectangle : access Cairo_Rectangle_Int) return Cairo_Status;
-- Computes the exclusive difference of Dst with Rectangle and places the
-- result in Dst.
--
-- Returns: Cairo_Status_Success or Cairo_Status_No_Memory.
private
pragma Convention (C, Cairo_Rectangle_Int);
type Cairo_Region is new System.Address;
Null_Region : constant Cairo_Region := Cairo_Region (System.Null_Address);
pragma Import (C, Create, "cairo_region_create");
pragma Import (C, Create_Rectangle, "cairo_region_create_rectangle");
pragma Import (C, Copy, "cairo_region_copy");
pragma Import (C, Reference, "cairo_region_reference");
pragma Import (C, Destroy, "cairo_region_destroy");
pragma Import (C, Status, "cairo_region_status");
pragma Import (C, Get_Extents, "cairo_region_get_extents");
pragma Import (C, Num_Rectangles, "cairo_region_num_rectangles");
pragma Import (C, Get_Rectangle, "cairo_region_get_rectangle");
pragma Import (C, Contains_Rectangle, "cairo_region_contains_rectangle");
pragma Import (C, Translate, "cairo_region_translate");
pragma Import (C, Subtract, "cairo_region_subtract");
pragma Import (C, Subtract_Rectangle, "cairo_region_subtract_rectangle");
pragma Import (C, Intersect, "cairo_region_intersect");
pragma Import (C, Intersect_Rectangle, "cairo_region_intersect_rectangle");
pragma Import (C, Union, "cairo_region_union");
pragma Import (C, Union_Rectangle, "cairo_region_union_rectangle");
pragma Import (C, Do_Xor, "cairo_region_xor");
pragma Import (C, Xor_Rectangle, "cairo_region_xor_rectangle");
pragma Inline ("=");
pragma Inline (Is_Empty);
end Cairo.Region;