00001 #ifndef XCF_H_INCLUDED
00002 #define XCF_H_INCLUDED
00003
00004
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
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
00085 #define XCF_SIGNATURE_FULL "gimp xcf file"
00086 #define XCF_SIGNATURE_FULL_LEN 14
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
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
00137 CARD32 width ;
00138 CARD32 height ;
00139 CARD32 type ;
00140
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
00160 CARD32 width ;
00161 CARD32 height ;
00162
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
00176 CARD32 width ;
00177 CARD32 height ;
00178 CARD32 bpp ;
00179
00180
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