Blame gdk-pixbuf/gdk-pixdata.h

Packit a4058c
/* GdkPixbuf library - GdkPixdata - functions for inlined pixbuf handling
Packit a4058c
 * Copyright (C) 1999, 2001 Tim Janik
Packit a4058c
 *
Packit a4058c
 * This library is free software; you can redistribute it and/or
Packit a4058c
 * modify it under the terms of the GNU Lesser General Public
Packit a4058c
 * License as published by the Free Software Foundation; either
Packit a4058c
 * version 2 of the License, or (at your option) any later version.
Packit a4058c
 *
Packit a4058c
 * This library is distributed in the hope that it will be useful,
Packit a4058c
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit a4058c
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit a4058c
 * Lesser General Public License for more details.
Packit a4058c
 *
Packit a4058c
 * You should have received a copy of the GNU Lesser General Public
Packit a4058c
 * License along with this library; if not, see <http://www.gnu.org/licenses/>.
Packit a4058c
 */
Packit a4058c
#ifndef __GDK_PIXDATA_H__
Packit a4058c
#define __GDK_PIXDATA_H__
Packit a4058c
Packit a4058c
#ifndef GDK_PIXBUF_DISABLE_DEPRECATED
Packit a4058c
#include        <gdk-pixbuf/gdk-pixbuf.h>
Packit a4058c
Packit a4058c
G_BEGIN_DECLS
Packit a4058c
Packit a4058c
/**
Packit a4058c
 * GDK_PIXBUF_MAGIC_NUMBER:
Packit a4058c
 *
Packit a4058c
 * Magic number for #GdkPixdata structures.
Packit a4058c
 **/
Packit a4058c
#define GDK_PIXBUF_MAGIC_NUMBER (0x47646b50)    /* 'GdkP' */
Packit a4058c
Packit a4058c
/**
Packit a4058c
 * GdkPixdataType:
Packit a4058c
 * @GDK_PIXDATA_COLOR_TYPE_RGB:  each pixel has red, green and blue samples.
Packit a4058c
 * @GDK_PIXDATA_COLOR_TYPE_RGBA: each pixel has red, green and blue samples 
Packit a4058c
 *    and an alpha value.
Packit a4058c
 * @GDK_PIXDATA_COLOR_TYPE_MASK: mask for the colortype flags of the enum.
Packit a4058c
 * @GDK_PIXDATA_SAMPLE_WIDTH_8: each sample has 8 bits.
Packit a4058c
 * @GDK_PIXDATA_SAMPLE_WIDTH_MASK: mask for the sample width flags of the enum.
Packit a4058c
 * @GDK_PIXDATA_ENCODING_RAW: the pixel data is in raw form. 
Packit a4058c
 * @GDK_PIXDATA_ENCODING_RLE: the pixel data is run-length encoded. Runs may 
Packit a4058c
 *    be up to 127 bytes long; their length is stored in a single byte 
Packit a4058c
 *    preceding the pixel data for the run. If a run is constant, its length
Packit a4058c
 *    byte has the high bit set and the pixel data consists of a single pixel
Packit a4058c
 *    which must be repeated. 
Packit a4058c
 * @GDK_PIXDATA_ENCODING_MASK: mask for the encoding flags of the enum.
Packit a4058c
 *
Packit a4058c
 * An enumeration containing three sets of flags for a #GdkPixdata struct: 
Packit a4058c
 * one for the used colorspace, one for the width of the samples and one 
Packit a4058c
 * for the encoding of the pixel data.  
Packit a4058c
 **/
Packit a4058c
typedef enum
Packit a4058c
{
Packit a4058c
  /* colorspace + alpha */
Packit a4058c
  GDK_PIXDATA_COLOR_TYPE_RGB    = 0x01,
Packit a4058c
  GDK_PIXDATA_COLOR_TYPE_RGBA   = 0x02,
Packit a4058c
  GDK_PIXDATA_COLOR_TYPE_MASK   = 0xff,
Packit a4058c
  /* width, support 8bits only currently */
Packit a4058c
  GDK_PIXDATA_SAMPLE_WIDTH_8    = 0x01 << 16,
Packit a4058c
  GDK_PIXDATA_SAMPLE_WIDTH_MASK = 0x0f << 16,
Packit a4058c
  /* encoding */
Packit a4058c
  GDK_PIXDATA_ENCODING_RAW      = 0x01 << 24,
Packit a4058c
  GDK_PIXDATA_ENCODING_RLE      = 0x02 << 24,
Packit a4058c
  GDK_PIXDATA_ENCODING_MASK     = 0x0f << 24
Packit a4058c
} GdkPixdataType;
Packit a4058c
Packit a4058c
/**
Packit a4058c
 * GdkPixdata:
Packit a4058c
 * @magic: magic number. A valid #GdkPixdata structure must have 
Packit a4058c
 *    #GDK_PIXBUF_MAGIC_NUMBER here.
Packit a4058c
 * @length: less than 1 to disable length checks, otherwise 
Packit a4058c
 *    #GDK_PIXDATA_HEADER_LENGTH + length of @pixel_data. 
Packit a4058c
 * @pixdata_type: information about colorspace, sample width and 
Packit a4058c
 *    encoding, in a #GdkPixdataType. 
Packit a4058c
 * @rowstride: Distance in bytes between rows.
Packit a4058c
 * @width: Width of the image in pixels.
Packit a4058c
 * @height: Height of the image in pixels.
Packit a4058c
 * @pixel_data: (array) (element-type guint8): @width x @height pixels, encoded according to @pixdata_type
Packit a4058c
 *   and @rowstride.
Packit a4058c
 *
Packit a4058c
 * A #GdkPixdata contains pixbuf information in a form suitable for 
Packit a4058c
 * serialization and streaming.
Packit a4058c
 **/
Packit a4058c
typedef struct _GdkPixdata GdkPixdata;
Packit a4058c
struct _GdkPixdata
Packit a4058c
{
Packit a4058c
  guint32 magic;        /* GDK_PIXBUF_MAGIC_NUMBER */
Packit a4058c
  gint32  length;       /* <1 to disable length checks, otherwise:
Packit a4058c
			 * GDK_PIXDATA_HEADER_LENGTH + pixel_data length
Packit a4058c
			 */
Packit a4058c
  guint32 pixdata_type; /* GdkPixdataType */
Packit a4058c
  guint32 rowstride;
Packit a4058c
  guint32 width;
Packit a4058c
  guint32 height;
Packit a4058c
  guint8 *pixel_data;
Packit a4058c
};
Packit a4058c
Packit a4058c
/**
Packit a4058c
 * GDK_PIXDATA_HEADER_LENGTH:
Packit a4058c
 *
Packit a4058c
 * The length of a #GdkPixdata structure without the @pixel_data pointer.
Packit a4058c
 **/
Packit a4058c
#define	GDK_PIXDATA_HEADER_LENGTH	(4 + 4 + 4 + 4 + 4 + 4)
Packit a4058c
Packit a4058c
/* the returned stream is plain htonl of GdkPixdata members + pixel_data */
Packit a4058c
GDK_PIXBUF_DEPRECATED_IN_2_32
Packit a4058c
guint8*		gdk_pixdata_serialize	(const GdkPixdata	*pixdata,
Packit a4058c
					 guint			*stream_length_p);
Packit a4058c
GDK_PIXBUF_DEPRECATED_IN_2_32
Packit a4058c
gboolean	gdk_pixdata_deserialize	(GdkPixdata		*pixdata,
Packit a4058c
					 guint			 stream_length,
Packit a4058c
					 const guint8		*stream,
Packit a4058c
					 GError		       **error);
Packit a4058c
GDK_PIXBUF_DEPRECATED_IN_2_32
Packit a4058c
gpointer	gdk_pixdata_from_pixbuf	(GdkPixdata		*pixdata,
Packit a4058c
					 const GdkPixbuf	*pixbuf,
Packit a4058c
					 gboolean		 use_rle);
Packit a4058c
GDK_PIXBUF_DEPRECATED_IN_2_32
Packit a4058c
GdkPixbuf*	gdk_pixbuf_from_pixdata	(const GdkPixdata	*pixdata,
Packit a4058c
					 gboolean		 copy_pixels,
Packit a4058c
					 GError		       **error);
Packit a4058c
/** 
Packit a4058c
 * GdkPixdataDumpType:
Packit a4058c
 * @GDK_PIXDATA_DUMP_PIXDATA_STREAM: Generate pixbuf data stream (a single 
Packit a4058c
 *    string containing a serialized #GdkPixdata structure in network byte 
Packit a4058c
 *    order).
Packit a4058c
 * @GDK_PIXDATA_DUMP_PIXDATA_STRUCT: Generate #GdkPixdata structure (needs 
Packit a4058c
 *    the #GdkPixdata structure definition from gdk-pixdata.h).
Packit a4058c
 * @GDK_PIXDATA_DUMP_MACROS: Generate <function>*_ROWSTRIDE</function>,     
Packit a4058c
 *    <function>*_WIDTH</function>, <function>*_HEIGHT</function>,
Packit a4058c
 *    <function>*_BYTES_PER_PIXEL</function> and 
Packit a4058c
 *    <function>*_RLE_PIXEL_DATA</function> or <function>*_PIXEL_DATA</function>
Packit a4058c
 *    macro definitions for the image.
Packit a4058c
 * @GDK_PIXDATA_DUMP_GTYPES: Generate GLib data types instead of 
Packit a4058c
 *    standard C data types.
Packit a4058c
 * @GDK_PIXDATA_DUMP_CTYPES: Generate standard C data types instead of 
Packit a4058c
 *    GLib data types.
Packit a4058c
 * @GDK_PIXDATA_DUMP_STATIC: Generate static symbols.
Packit a4058c
 * @GDK_PIXDATA_DUMP_CONST: Generate const symbols.
Packit a4058c
 * @GDK_PIXDATA_DUMP_RLE_DECODER: Provide a <function>*_RUN_LENGTH_DECODE(image_buf, rle_data, size, bpp)</function> 
Packit a4058c
 *    macro definition  to  decode  run-length encoded image data.
Packit a4058c
 *  
Packit a4058c
 * An enumeration which is used by gdk_pixdata_to_csource() to
Packit a4058c
 * determine the form of C source to be generated. The three values
Packit a4058c
 * @GDK_PIXDATA_DUMP_PIXDATA_STREAM, @GDK_PIXDATA_DUMP_PIXDATA_STRUCT
Packit a4058c
 * and @GDK_PIXDATA_DUMP_MACROS are mutually exclusive, as are
Packit a4058c
 * @GDK_PIXBUF_DUMP_GTYPES and @GDK_PIXBUF_DUMP_CTYPES. The remaining
Packit a4058c
 * elements are optional flags that can be freely added. 
Packit a4058c
 **/
Packit a4058c
typedef enum
Packit a4058c
{
Packit a4058c
  /* type of source to save */
Packit a4058c
  GDK_PIXDATA_DUMP_PIXDATA_STREAM	= 0,
Packit a4058c
  GDK_PIXDATA_DUMP_PIXDATA_STRUCT	= 1,
Packit a4058c
  GDK_PIXDATA_DUMP_MACROS		= 2,
Packit a4058c
  /* type of variables to use */
Packit a4058c
  GDK_PIXDATA_DUMP_GTYPES		= 0,
Packit a4058c
  GDK_PIXDATA_DUMP_CTYPES		= 1 << 8,
Packit a4058c
  GDK_PIXDATA_DUMP_STATIC		= 1 << 9,
Packit a4058c
  GDK_PIXDATA_DUMP_CONST		= 1 << 10,
Packit a4058c
  /* save RLE decoder macro? */
Packit a4058c
  GDK_PIXDATA_DUMP_RLE_DECODER		= 1 << 16
Packit a4058c
} GdkPixdataDumpType;
Packit a4058c
  
Packit a4058c
Packit a4058c
GDK_PIXBUF_DEPRECATED_IN_2_32
Packit a4058c
GString*	gdk_pixdata_to_csource	(GdkPixdata		*pixdata,
Packit a4058c
					 const gchar		*name,
Packit a4058c
					 GdkPixdataDumpType	 dump_type);
Packit a4058c
Packit a4058c
Packit a4058c
G_END_DECLS
Packit a4058c
Packit a4058c
#endif /* GDK_PIXBUF_DISABLE_DEPRECATED */
Packit a4058c
Packit a4058c
#endif /* __GDK_PIXDATA_H__ */