----------------------------------------------------------------------- -- GtkAda - Ada95 binding for Gtk+/Gnome -- -- -- -- Copyright (C) 2011, AdaCore -- -- -- -- This library is free software; you can redistribute it and/or -- -- modify it under the terms of the GNU General Public -- -- License as published by the Free Software Foundation; either -- -- version 2 of the License, 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 -- -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -- -- General Public License for more details. -- -- -- -- You should have received a copy of the GNU General Public -- -- License along with this library; if not, write to the -- -- Free Software Foundation, Inc., 59 Temple Place - Suite 330, -- -- Boston, MA 02111-1307, USA. -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ----------------------------------------------------------------------- -- -- Utility functions that mimic Gtk.Style drawing methods, but using Cairo -- instead of Gdk. This allow smooth transition to Gtk3 that will get rid -- of those Gdk drawing methods and only use Cairo. -- -- Configuration and Themes with Glib; with Cairo; with Pango.Layout; with Gdk.Color; with Gdk.Pixbuf; with Gtk.Enums; with Gtk.Style; package Gtkada.Style is -------------------- -- Color handling -- -------------------- subtype Cairo_Color_Val is Glib.Gdouble range 0.0 .. 1.0; -- In cairo, the color components are expressed as percents. type Cairo_Color is record R, G, B : Cairo_Color_Val; Alpha : Cairo_Color_Val := 1.0; end record; type HSV_Color is record H, S, V, A : Cairo_Color_Val; end record; -- Used when manipulating Cairo color. The HSV color space is useful when -- wanting to shade a color (change it's value), (de)saturate it, or modify -- its hue. function To_HSV (Color : Cairo_Color) return HSV_Color; function To_Cairo (HSV : HSV_Color) return Cairo_Color; function To_Cairo (Color : Gdk.Color.Gdk_Color) return Cairo_Color; -- Translations between one color definition to another function Shade (Color : Gdk.Color.Gdk_Color; Value : Glib.Gdouble) return Cairo_Color; function Shade (Color : Cairo_Color; Value : Glib.Gdouble) return Cairo_Color; -- Modifies the lightning of the color by the specified value procedure Set_Source_Color (Cr : Cairo.Cairo_Context; Color : Cairo_Color); ----------------------------- -- Extra path manipulation -- ----------------------------- procedure Rounded_Rectangle (Cr : Cairo.Cairo_Context; X, Y, W, H : Glib.Gdouble; Radius : Glib.Gdouble); -- Draws a rounded rectangle at coordinate X, Y with W and H size. -- If Radius > 0, then the corner will be rounded. ------------------------- -- Drawing subprograms -- ------------------------- procedure Draw_Shadow (Cr : Cairo.Cairo_Context; Style : Gtk.Style.Gtk_Style; Shadow_Type : Gtk.Enums.Gtk_Shadow_Type; X, Y, Width, Height : Glib.Gint; Corner_Radius : Glib.Gdouble := 0.0); -- Draws a Frame of size Width x Height at position (X, Y) and (X2, Y2) -- using the specified color. -- Corner_Radius allows you to draw a rounded frame if set to a value > 0. -- -- Additional drawing styles can be specified by using Cairo.Set_Line_XXXX -- on the Cairo_Context before calling this procedure. procedure Draw_Rectangle (Cr : Cairo.Cairo_Context; Color : Cairo_Color; Filled : Boolean; X, Y, Width, Height : Glib.Gint; Corner_Radius : Glib.Gdouble := 0.0); procedure Draw_Rectangle (Cr : Cairo.Cairo_Context; Color : Gdk.Color.Gdk_Color; Filled : Boolean; X, Y, Width, Height : Glib.Gint; Corner_Radius : Glib.Gdouble := 0.0); -- Draws a rectangle of size Width x Height at position (X, Y) and (X2, Y2) -- using the specified color. -- Corner_Radius allows you to draw a rounded rectangle if set to a -- value > 0.0 -- -- Additional drawing styles can be specified by using Cairo.Set_Line_XXXX -- on the Cairo_Context before calling this procedure. procedure Draw_Line (Cr : Cairo.Cairo_Context; Color : Cairo_Color; X1, Y1, X2, Y2 : Glib.Gint); procedure Draw_Line (Cr : Cairo.Cairo_Context; Color : Gdk.Color.Gdk_Color; X1, Y1, X2, Y2 : Glib.Gint); -- Draws a line between (X1, Y1) and (X2, Y2) using the specified color. -- -- Additional drawing styles can be specified by using Cairo.Set_Line_XXXX -- on the Cairo_Context before calling this procedure. procedure Draw_Layout (Cr : Cairo.Cairo_Context; Color : Cairo_Color; X, Y : Glib.Gint; Layout : Pango.Layout.Pango_Layout); procedure Draw_Layout (Cr : Cairo.Cairo_Context; Color : Gdk.Color.Gdk_Color; X, Y : Glib.Gint; Layout : Pango.Layout.Pango_Layout); -- Draws the Pango layout at position (X, Y) using Color. procedure Draw_Pixbuf (Cr : Cairo.Cairo_Context; Pixbuf : Gdk.Pixbuf.Gdk_Pixbuf; X, Y : Glib.Gint); -- Draws a pixbuf at coordinate X, Y -- -- Note that Gdk_Pixmap or Gdk_Bitmap are not supported, as those -- are server-side images, so depend on a surface attached to a screen. -- As a result, those would not be drawn on a non-screen surface (such as -- an internal Image_Surface). end Gtkada.Style;