xcf.h

Go to the documentation of this file.
00001 #ifndef XCF_H_INCLUDED
00002 #define XCF_H_INCLUDED
00003 
00004 /* GIMP's XCF file properties/structures : */
00005 
00006 #include "asvisual.h"
00007 #include "scanline.h"
00008 
00009 #ifdef __cplusplus
00010 extern "C" {
00011 #endif
00012 
00013 #define XCF_MAX_CHANNELS     4
00014 
00015 #define XCF_GRAY_PIX         0
00016 #define XCF_ALPHA_G_PIX      1
00017 #define XCF_RED_PIX          0
00018 #define XCF_GREEN_PIX        1
00019 #define XCF_BLUE_PIX         2
00020 #define XCF_ALPHA_PIX        3
00021 #define XCF_INDEXED_PIX      0
00022 #define XCF_ALPHA_I_PIX      1
00023 
00024 #define XCF_COLORMAP_SIZE    768
00025 
00026 typedef enum
00027 {
00028   XCF_PROP_END = 0,
00029   XCF_PROP_COLORMAP = 1,
00030   XCF_PROP_ACTIVE_LAYER = 2,
00031   XCF_PROP_ACTIVE_CHANNEL = 3,
00032   XCF_PROP_SELECTION = 4,
00033   XCF_PROP_FLOATING_SELECTION = 5,
00034   XCF_PROP_OPACITY = 6,
00035   XCF_PROP_MODE = 7,
00036   XCF_PROP_VISIBLE = 8,
00037   XCF_PROP_LINKED = 9,
00038   XCF_PROP_PRESERVE_TRANSPARENCY = 10,
00039   XCF_PROP_APPLY_MASK = 11,
00040   XCF_PROP_EDIT_MASK = 12,
00041   XCF_PROP_SHOW_MASK = 13,
00042   XCF_PROP_SHOW_MASKED = 14,
00043   XCF_PROP_OFFSETS = 15,
00044   XCF_PROP_COLOR = 16,
00045   XCF_PROP_COMPRESSION = 17,
00046   XCF_PROP_GUIDES = 18,
00047   XCF_PROP_RESOLUTION = 19,
00048   XCF_PROP_TATTOO = 20,
00049   XCF_PROP_PARASITES = 21,
00050   XCF_PROP_UNIT = 22,
00051   XCF_PROP_PATHS = 23,
00052   XCF_PROP_USER_UNIT = 24,
00053   XCF_PROP_Total = 25
00054 } XcfPropType;
00055 
00056 typedef enum
00057 {
00058   XCF_COMPRESS_NONE = 0,
00059   XCF_COMPRESS_RLE = 1,
00060   XCF_COMPRESS_ZLIB = 2,
00061   XCF_COMPRESS_FRACTAL = 3  /* Unused. */
00062 } XcfCompressionType;
00063 
00064 typedef enum
00065 {
00066   XCF_RED_CHANNEL,
00067   XCF_GREEN_CHANNEL,
00068   XCF_BLUE_CHANNEL,
00069   XCF_GRAY_CHANNEL,
00070   XCF_INDEXED_CHANNEL,
00071   XCF_ALPHA_CHANNEL,
00072   XCF_AUXILLARY_CHANNEL
00073 } XcfChannelType;
00074 
00075 typedef enum
00076 {
00077   XCF_EXPAND_AS_NECESSARY,
00078   XCF_CLIP_TO_IMAGE,
00079   XCF_CLIP_TO_BOTTOM_LAYER,
00080   XCF_FLATTEN_IMAGE
00081 } XcfMergeType;
00082 
00083 #define XCF_SIGNATURE                   "gimp xcf"
00084 #define XCF_SIGNATURE_LEN               8              /* use in strncmp() */
00085 #define XCF_SIGNATURE_FULL              "gimp xcf file"
00086 #define XCF_SIGNATURE_FULL_LEN  14             /* use in seek() */
00087 
00088 #define XCF_TILE_WIDTH                  64
00089 #define XCF_TILE_HEIGHT                 64
00090 
00091 struct XcfProperty;
00092 struct XcfLayer;
00093 struct XcfChannel;
00094 struct XcfHierarchy;
00095 struct XcfLevel;
00096 struct XcfTile;
00097 
00098 
00099 typedef struct XcfImage
00100 {
00101         int             version;
00102         CARD32          width;
00103         CARD32          height;
00104         CARD32          type ;
00105 
00106         CARD8           compression ;
00107         CARD32      num_cols ;
00108         CARD8      *colormap ;
00109 
00110         struct XcfProperty   *properties ;
00111         struct XcfLayer          *layers;
00112         struct XcfChannel        *channels;
00113 
00114         struct XcfLayer          *floating_selection;
00115         struct XcfChannel        *selection;
00116 
00117         ASScanline                        scanline_buf[XCF_TILE_HEIGHT];
00118         CARD8                             tile_buf[XCF_TILE_WIDTH*XCF_TILE_HEIGHT*6];
00119 }XcfImage;
00120 
00121 typedef struct XcfProperty
00122 {
00123         CARD32                            id ;
00124         CARD32                            len;
00125         CARD8                        *data;
00126 /* most properties will fit in here - save on memory allocation */
00127         CARD32                            buffer[20] ;
00128 
00129         struct XcfProperty   *next;
00130 }XcfProperty;
00131 
00132 typedef struct XcfLayer
00133 {
00134         struct XcfLayer          *next;
00135         CARD32                        offset ;
00136         /* layer data goes here */
00137         CARD32                    width ;
00138         CARD32                    height ;
00139         CARD32                    type ;
00140         /* we don't give a damn about layer's name - skip it */
00141         struct XcfProperty   *properties ;
00142         CARD32                            opacity ;
00143         Bool                              visible ;
00144         Bool                              preserve_transparency ;
00145         CARD32                            mode ;
00146         CARD32                            offset_x, offset_y ;
00147 
00148         CARD32                            hierarchy_offset;
00149         CARD32                    mask_offset ;
00150         struct XcfHierarchy      *hierarchy ;
00151         struct XcfChannel        *mask ;
00152 
00153 }XcfLayer;
00154 
00155 typedef struct XcfChannel
00156 {
00157         struct XcfChannel *next;
00158         CARD32          offset ;
00159         /* Channel data goes here */
00160         CARD32      width ;
00161         CARD32      height ;
00162         /* we don't give a damn about layer's name - skip it */
00163         struct XcfProperty   *properties ;
00164         CARD32                            opacity ;
00165         Bool                              visible ;
00166         ARGB32                            color ;
00167 
00168         CARD32          hierarchy_offset;
00169         struct XcfHierarchy      *hierarchy ;
00170 
00171 }XcfChannel;
00172 
00173 typedef struct XcfHierarchy
00174 {
00175         /* layer data goes here */
00176         CARD32      width ;
00177         CARD32      height ;
00178         CARD32          bpp ;
00179 
00180         /* we don't give a damn about layer's name - skip it */
00181         struct XcfLevel          *levels ;
00182 
00183         ASImage                          *image ;
00184 }XcfHierarchy;
00185 
00186 typedef struct XcfLevel
00187 {
00188         struct XcfLevel *next ;
00189         CARD32          offset ;
00190         CARD32      width ;
00191         CARD32      height ;
00192 
00193         struct XcfTile *tiles ;
00194 }XcfLevel;
00195 
00196 typedef struct XcfTile
00197 {
00198         struct XcfTile *next ;
00199         CARD32          offset ;
00200         CARD32      estimated_size ;
00201 
00202         CARD8      *data;
00203 }XcfTile;
00204 
00205 union XcfListElem;
00206 
00207 typedef struct XcfAnyListElem
00208 {
00209         union XcfListElem *next;
00210         CARD32 offset ;
00211 }XcfAnyListElem;
00212 
00213 typedef union XcfListElem{
00214         XcfAnyListElem  any;
00215         XcfLayer                layer;
00216         XcfChannel              channel;
00217         XcfLevel                level;
00218         XcfTile                 tile;
00219 }XcfListElem ;
00220 
00221 
00222 XcfImage   *read_xcf_image( FILE *fp );
00223 void            print_xcf_image( XcfImage *xcf_im );
00224 void            free_xcf_image( XcfImage *xcf_im );
00225 
00226 #ifdef __cplusplus
00227 }
00228 #endif
00229 
00230 #endif /* #ifndef XCF_H_INCLUDED */

Generated on Tue Jul 5 14:13:33 2011 for ROOT_528-00b_version by  doxygen 1.5.1