----------------------------------------------------------------------- -- GtkAda - Ada95 binding for Gtk+/Gnome -- -- -- -- Copyright (C) 1998-2000 E. Briot, J. Brobecker and A. Charlet -- -- Copyright (C) 2000-2007, 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. -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ----------------------------------------------------------------------- -- -- -- This package implements a client-side pixmap. As opposed to the pixmaps -- found in Gdk.Pixmap, this one simply implements a local buffer, which -- can be manipulated at the pixel level easily. This buffer then needs to -- be sent to the server. -- The major efficiency difference is that the same amount of data needs -- to be sent to the server no matter how much things were modified. -- Gdk.Pixmaps requires one communication with the server per drawing -- function. -- Some X servers are also optimized so that the buffers in this package -- can be implemented in shared memory with the server, which of course -- makes it much faster to transfer the data. -- This package is basically an implementation of XImage (on X-Window), -- which means that it handles transparently different depths, byte -- ordering,... It also provides some color dithering functions. -- -- See the commands Get_Visual and Get_Cmap below on how to use the -- colormaps and visual with this package -- -- Dithering simulates a higher number of colors than what is available on -- the current visual (only for 8-bit and 16-bit displays). -- -- -- 1.3.6 -- Gdk, the low-level API with Glib; with Gdk.Color; with Gdk.Visual; with Gdk.GC; with Gdk.Drawable; package Gdk.Rgb is function Get_Visual return Gdk.Visual.Gdk_Visual; -- See Get_Cmap. function Get_Cmap return Gdk.Color.Gdk_Colormap; -- Return the visual and the color map used internally in this package. -- Note that these are not the same as returned by Gtk.Widget or -- Gdk.Window, and you should use these if you are using this package. -- -- The drawable you intend to copy the RGB buffer to must use this visual -- and this colormap. Therefore, before creating the widget, you need to do -- the following: -- - Gtk.Widget.Push_Colormap (Gdk.Rgb.Get_Cmap); -- - Gtk_New (....) -- - Gtk.Widget.Pop_Colormap; type Rgb_Record is record Red, Green, Blue : Glib.Guchar; end record; pragma Convention (C, Rgb_Record); type Rgb_Buffer is array (Glib.Guint range <>) of Rgb_Record; pragma Pack (Rgb_Buffer); -- This is the buffer that will contain the image. You can manipulate each -- byte in it independantly, although there is no high level routine -- to draw lines, circles, ... -- Once you are done drawing into this buffer, you can copy it to any -- drawable on the screen, *if* the widget was created with the correct -- visual and colormap (see above). type Unchecked_Rgb_Buffer is array (Glib.Guint) of Rgb_Record; pragma Convention (C, Unchecked_Rgb_Buffer); type Rgb_Buffer_Access is access all Unchecked_Rgb_Buffer; pragma Convention (C, Rgb_Buffer_Access); -- Type used By Gdk.Pixbufs.Get_Pixels to return an array with no -- bound checks that is compatible with C (also known as a flat array). type Gdk_Rgb_Dither is (Dither_None, Dither_Normal, Dither_Max); -- The three kinds of dithering that are implemented in this package: -- - Dither_None: No dithering will be done -- - Dither_Normal: Specifies dithering on 8 bit displays, but not 16-bit. -- Usually the best choice. -- - Dither_Max: Specifies dithering on every kind of display for Gdk_Rgb_Dither'Size use Glib.Gint'Size; ------------------------ -- Color manipulation -- ------------------------ subtype Rgb_Item is Glib.Guint32; -- This represents the coding for a rbg value. The exact encoding depends -- on the visual used and its depth (pseudo-color, true-color, ...) function Xpixel_From_Rgb (Value : in Rgb_Item) return Glib.Gulong; -- Convert the Rgb representation to the usual one found in Gdk.Color. -- pragma Deprecated (Xpixel_From_Rgb); procedure GC_Set_Foreground (GC : Gdk.GC.Gdk_GC; Value : Rgb_Item); -- See GC_Set_Background. -- pragma Deprecated (GC_Set_Foreground); procedure GC_Set_Background (GC : Gdk.GC.Gdk_GC; Value : Rgb_Item); -- Modify the foreground and the background of a graphic context with a -- value. These are exactly the same functions has found in Gdk.Gc, but do -- not use the same parameters. -- pragma Deprecated (GC_Set_Background); --------------------------- -- Colormap manipulation -- --------------------------- type Gdk_Rgb_Cmap is new Gdk.C_Proxy; -- This is the full colormap, ie a set of 256 Rgb items. -- You can extract values using the functions Get or Set below. type Rgb_Cmap_Index is new Natural range 0 .. 255; function Get (Cmap : Gdk_Rgb_Cmap; Index : Rgb_Cmap_Index) return Rgb_Item; -- Access an item in a colormap. procedure Set (Cmap : Gdk_Rgb_Cmap; Index : Rgb_Cmap_Index; Value : Rgb_Item); -- Set an item in Cmap. procedure Gdk_New (Cmap : out Gdk_Rgb_Cmap; Colors : Glib.Guint32_Array); -- Create a colormap. procedure Free (Cmap : Gdk_Rgb_Cmap); -- Free a colormap. -------------------- -- Drawing Images -- -------------------- procedure Draw_Rgb_Image (Drawable : Gdk.Drawable.Gdk_Drawable; GC : Gdk.GC.Gdk_GC; X, Y : Glib.Gint; Width, Height : Glib.Gint; Dith : Gdk_Rgb_Dither; Rgb_Buf : Rgb_Buffer; Rowstride : Glib.Gint); procedure Draw_Rgb_Image (Drawable : Gdk.Drawable.Gdk_Drawable; GC : Gdk.GC.Gdk_GC; X, Y : Glib.Gint; Width, Height : Glib.Gint; Dith : Gdk_Rgb_Dither; Rgb_Buf : Unchecked_Rgb_Buffer; Rowstride : Glib.Gint); -- Render a Gdk buffer with 24 bit Data. -- Such a buffer is a one dimensional array of bytes, where every byte -- triplet makes up a pixel (byte 0 is red, byte 1 is green and byte 2 is -- blue). -- -- - Width: Number of pixels (byte triplets) per row of the image. -- - Height: Number of rows in the image. -- - RowStride: Number of bytes between rows... (row n+1 will start at byte -- row n + Rowstride). Gdk.Rgb is faster if both the source pointer and -- the rowstride are aligned to a 4 byte boundary. -- - (X, Y, Width, Height): Define a region in the target to copy the -- buffer to. procedure Draw_Rgb_Image_Dithalign (Drawable : Gdk.Drawable.Gdk_Drawable; GC : Gdk.GC.Gdk_GC; X, Y : Glib.Gint; Width, Height : Glib.Gint; Dith : Gdk_Rgb_Dither; Rgb_Buf : Rgb_Buffer; Rowstride : Glib.Gint; Xdith, Ydith : Glib.Gint); procedure Draw_Rgb_Image_Dithalign (Drawable : Gdk.Drawable.Gdk_Drawable; GC : Gdk.GC.Gdk_GC; X, Y : Glib.Gint; Width, Height : Glib.Gint; Dith : Gdk_Rgb_Dither; Rgb_Buf : Unchecked_Rgb_Buffer; Rowstride : Glib.Gint; Xdith, Ydith : Glib.Gint); -- Same kind of function as above, but for different buffer types (???). procedure Draw_Rgb_32_Image (Drawable : Gdk.Drawable.Gdk_Drawable; GC : Gdk.GC.Gdk_GC; X, Y : Glib.Gint; Width, Height : Glib.Gint; Dith : Gdk_Rgb_Dither; Rgb_Buf : Rgb_Buffer; Rowstride : Glib.Gint); procedure Draw_Rgb_32_Image (Drawable : Gdk.Drawable.Gdk_Drawable; GC : Gdk.GC.Gdk_GC; X, Y : Glib.Gint; Width, Height : Glib.Gint; Dith : Gdk_Rgb_Dither; Rgb_Buf : Unchecked_Rgb_Buffer; Rowstride : Glib.Gint); -- Same kind of function as above, but for different buffer types (???). procedure Draw_Rgb_32_Image_Dithalign (Drawable : Gdk.Drawable.Gdk_Drawable; GC : Gdk.GC.Gdk_GC; X, Y : Glib.Gint; Width, Height : Glib.Gint; Dith : Gdk_Rgb_Dither; Rgb_Buf : Rgb_Buffer; Rowstride : Glib.Gint; Xdith, Ydith : Glib.Gint); procedure Draw_Rgb_32_Image_Dithalign (Drawable : Gdk.Drawable.Gdk_Drawable; GC : Gdk.GC.Gdk_GC; X, Y : Glib.Gint; Width, Height : Glib.Gint; Dith : Gdk_Rgb_Dither; Rgb_Buf : Unchecked_Rgb_Buffer; Rowstride : Glib.Gint; Xdith, Ydith : Glib.Gint); -- Same kind of function as above, but for different buffer types (???). procedure Draw_Gray_Image (Drawable : Gdk.Drawable.Gdk_Drawable; GC : Gdk.GC.Gdk_GC; X, Y : Glib.Gint; Width, Height : Glib.Gint; Dith : Gdk_Rgb_Dither; Rgb_Buf : Rgb_Buffer; Rowstride : Glib.Gint); procedure Draw_Gray_Image (Drawable : Gdk.Drawable.Gdk_Drawable; GC : Gdk.GC.Gdk_GC; X, Y : Glib.Gint; Width, Height : Glib.Gint; Dith : Gdk_Rgb_Dither; Rgb_Buf : Unchecked_Rgb_Buffer; Rowstride : Glib.Gint); -- Same kind of function as above, but for different buffer types (???). procedure Draw_Indexed_Image (Drawable : Gdk.Drawable.Gdk_Drawable; GC : Gdk.GC.Gdk_GC; X, Y : Glib.Gint; Width, Height : Glib.Gint; Dith : Gdk_Rgb_Dither; Rgb_Buf : Rgb_Buffer; Rowstride : Glib.Gint; Cmap : Gdk_Rgb_Cmap); procedure Draw_Indexed_Image (Drawable : Gdk.Drawable.Gdk_Drawable; GC : Gdk.GC.Gdk_GC; X, Y : Glib.Gint; Width, Height : Glib.Gint; Dith : Gdk_Rgb_Dither; Rgb_Buf : Unchecked_Rgb_Buffer; Rowstride : Glib.Gint; Cmap : Gdk_Rgb_Cmap); -- Same kind of function as above, but for different buffer types (???). private pragma Inline (Get); pragma Inline (Set); pragma Import (C, GC_Set_Background, "gdk_rgb_gc_set_background"); pragma Import (C, GC_Set_Foreground, "gdk_rgb_gc_set_foreground"); pragma Import (C, Get_Cmap, "gdk_rgb_get_colormap"); pragma Import (C, Get_Visual, "gdk_rgb_get_visual"); pragma Import (C, Xpixel_From_Rgb, "gdk_rgb_xpixel_from_rgb"); pragma Import (C, Get, "ada_rgb_cmap_get"); pragma Import (C, Set, "ada_rgb_cmap_set"); pragma Import (C, Free, "gdk_rgb_cmap_free"); end Gdk.Rgb;