1 #ifndef __IMLIB_API_H
2 #define __IMLIB_API_H 1
3 
4 #ifdef EAPI
5 #undef EAPI
6 #endif
7 #ifdef WIN32
8 #ifdef BUILDING_DLL
9 #define EAPI __declspec(dllexport)
10 #else
11 #define EAPI __declspec(dllimport)
12 #endif
13 #else
14 #ifdef __GNUC__
15 #if __GNUC__ >= 4
16 #define EAPI __attribute__ ((visibility("default")))
17 #else
18 #define EAPI
19 #endif
20 #else
21 #define EAPI
22 #endif
23 #endif
24 
25 #ifndef X_DISPLAY_MISSING
26 #include <X11/Xlib.h>
27 #endif
28 
29 /* Data types to use */
30 #ifndef DATA64
31 #define DATA64 unsigned long long
32 #define DATA32 unsigned int
33 #define DATA16 unsigned short
34 #define DATA8  unsigned char
35 #endif
36 
37 /* opaque data types */
38 typedef void       *Imlib_Context;
39 typedef void       *Imlib_Image;
40 typedef void       *Imlib_Color_Modifier;
41 typedef void       *Imlib_Updates;
42 typedef void       *Imlib_Font;
43 typedef void       *Imlib_Color_Range;
44 typedef void       *Imlib_Filter;
45 typedef struct _imlib_border Imlib_Border;
46 typedef struct _imlib_color Imlib_Color;
47 typedef void       *ImlibPolygon;
48 
49 /* blending operations */
50 enum _imlib_operation {
51    IMLIB_OP_COPY,
52    IMLIB_OP_ADD,
53    IMLIB_OP_SUBTRACT,
54    IMLIB_OP_RESHADE
55 };
56 
57 enum _imlib_text_direction {
58    IMLIB_TEXT_TO_RIGHT = 0,
59    IMLIB_TEXT_TO_LEFT = 1,
60    IMLIB_TEXT_TO_DOWN = 2,
61    IMLIB_TEXT_TO_UP = 3,
62    IMLIB_TEXT_TO_ANGLE = 4
63 };
64 
65 enum _imlib_load_error {
66    IMLIB_LOAD_ERROR_NONE,
67    IMLIB_LOAD_ERROR_FILE_DOES_NOT_EXIST,
68    IMLIB_LOAD_ERROR_FILE_IS_DIRECTORY,
69    IMLIB_LOAD_ERROR_PERMISSION_DENIED_TO_READ,
70    IMLIB_LOAD_ERROR_NO_LOADER_FOR_FILE_FORMAT,
71    IMLIB_LOAD_ERROR_PATH_TOO_LONG,
72    IMLIB_LOAD_ERROR_PATH_COMPONENT_NON_EXISTANT,
73    IMLIB_LOAD_ERROR_PATH_COMPONENT_NOT_DIRECTORY,
74    IMLIB_LOAD_ERROR_PATH_POINTS_OUTSIDE_ADDRESS_SPACE,
75    IMLIB_LOAD_ERROR_TOO_MANY_SYMBOLIC_LINKS,
76    IMLIB_LOAD_ERROR_OUT_OF_MEMORY,
77    IMLIB_LOAD_ERROR_OUT_OF_FILE_DESCRIPTORS,
78    IMLIB_LOAD_ERROR_PERMISSION_DENIED_TO_WRITE,
79    IMLIB_LOAD_ERROR_OUT_OF_DISK_SPACE,
80    IMLIB_LOAD_ERROR_UNKNOWN
81 };
82 
83 /* Encodings known to Imlib2 (so far) */
84 enum _imlib_TTF_encoding {
85    IMLIB_TTF_ENCODING_ISO_8859_1,
86    IMLIB_TTF_ENCODING_ISO_8859_2,
87    IMLIB_TTF_ENCODING_ISO_8859_3,
88    IMLIB_TTF_ENCODING_ISO_8859_4,
89    IMLIB_TTF_ENCODING_ISO_8859_5
90 };
91 
92 typedef enum _imlib_operation Imlib_Operation;
93 typedef enum _imlib_load_error Imlib_Load_Error;
94 typedef enum _imlib_text_direction Imlib_Text_Direction;
95 typedef enum _imlib_TTF_encoding Imlib_TTF_Encoding;
96 
97 struct _imlib_border {
98    int                 left, right, top, bottom;
99 };
100 
101 struct _imlib_color {
102    int                 alpha, red, green, blue;
103 };
104 
105 /* Progressive loading callbacks */
106 typedef int         (*Imlib_Progress_Function)(Imlib_Image im, char percent,
107                                                int update_x, int update_y,
108                                                int update_w, int update_h);
109 typedef void        (*Imlib_Data_Destructor_Function)(Imlib_Image im,
110                                                       void *data);
111 typedef void       *(*Imlib_Image_Data_Memory_Function)(void *, size_t size);
112 
113 /* *INDENT-OFF* */
114 #ifdef __cplusplus
115 extern "C" {
116 #endif
117 /* *INDENT-ON* */
118 
119 /* context handling */
120 EAPI Imlib_Context  imlib_context_new(void);
121 EAPI void           imlib_context_free(Imlib_Context context);
122 
123 EAPI void           imlib_context_push(Imlib_Context context);
124 EAPI void           imlib_context_pop(void);
125 EAPI Imlib_Context  imlib_context_get(void);
126 
127 /* context setting */
128 #ifndef X_DISPLAY_MISSING
129 EAPI void           imlib_context_set_display(Display * display);
130 EAPI void           imlib_context_disconnect_display(void);
131 EAPI void           imlib_context_set_visual(Visual * visual);
132 EAPI void           imlib_context_set_colormap(Colormap colormap);
133 EAPI void           imlib_context_set_drawable(Drawable drawable);
134 EAPI void           imlib_context_set_mask(Pixmap mask);
135 #endif
136 EAPI void           imlib_context_set_dither_mask(char dither_mask);
137 EAPI void           imlib_context_set_mask_alpha_threshold(int
138                                                            mask_alpha_threshold);
139 EAPI void           imlib_context_set_anti_alias(char anti_alias);
140 EAPI void           imlib_context_set_dither(char dither);
141 EAPI void           imlib_context_set_blend(char blend);
142 EAPI void           imlib_context_set_color_modifier(Imlib_Color_Modifier
143                                                      color_modifier);
144 EAPI void           imlib_context_set_operation(Imlib_Operation operation);
145 EAPI void           imlib_context_set_font(Imlib_Font font);
146 EAPI void           imlib_context_set_direction(Imlib_Text_Direction direction);
147 EAPI void           imlib_context_set_angle(double angle);
148 EAPI void           imlib_context_set_color(int red, int green, int blue,
149                                             int alpha);
150 EAPI void           imlib_context_set_color_hsva(float hue, float saturation,
151                                                  float value, int alpha);
152 EAPI void           imlib_context_set_color_hlsa(float hue, float lightness,
153                                                  float saturation, int alpha);
154 EAPI void           imlib_context_set_color_cmya(int cyan, int magenta,
155                                                  int yellow, int alpha);
156 EAPI void           imlib_context_set_color_range(Imlib_Color_Range
157                                                   color_range);
158 EAPI void           imlib_context_set_image_data_memory_function
159    (Imlib_Image_Data_Memory_Function memory_function);
160 EAPI void           imlib_context_set_progress_function(Imlib_Progress_Function
161                                                         progress_function);
162 EAPI void           imlib_context_set_progress_granularity(char
163                                                            progress_granularity);
164 EAPI void           imlib_context_set_image(Imlib_Image image);
165 EAPI void           imlib_context_set_cliprect(int x, int y, int w, int h);
166 EAPI void           imlib_context_set_TTF_encoding(Imlib_TTF_Encoding encoding);
167 
168 /* context getting */
169 #ifndef X_DISPLAY_MISSING
170 EAPI Display       *imlib_context_get_display(void);
171 EAPI Visual        *imlib_context_get_visual(void);
172 EAPI Colormap       imlib_context_get_colormap(void);
173 EAPI Drawable       imlib_context_get_drawable(void);
174 EAPI Pixmap         imlib_context_get_mask(void);
175 #endif
176 EAPI char           imlib_context_get_dither_mask(void);
177 EAPI char           imlib_context_get_anti_alias(void);
178 EAPI int            imlib_context_get_mask_alpha_threshold(void);
179 EAPI char           imlib_context_get_dither(void);
180 EAPI char           imlib_context_get_blend(void);
181 EAPI Imlib_Color_Modifier imlib_context_get_color_modifier(void);
182 EAPI Imlib_Operation imlib_context_get_operation(void);
183 EAPI Imlib_Font     imlib_context_get_font(void);
184 EAPI double         imlib_context_get_angle(void);
185 EAPI Imlib_Text_Direction imlib_context_get_direction(void);
186 EAPI void           imlib_context_get_color(int *red, int *green, int *blue,
187                                             int *alpha);
188 EAPI void           imlib_context_get_color_hsva(float *hue, float *saturation,
189                                                  float *value, int *alpha);
190 EAPI void           imlib_context_get_color_hlsa(float *hue, float *lightness,
191                                                  float *saturation, int *alpha);
192 EAPI void           imlib_context_get_color_cmya(int *cyan, int *magenta,
193                                                  int *yellow, int *alpha);
194 EAPI Imlib_Color   *imlib_context_get_imlib_color(void);
195 EAPI Imlib_Color_Range imlib_context_get_color_range(void);
196 EAPI                Imlib_Image_Data_Memory_Function
197 imlib_context_get_image_data_memory_function(void);
198 EAPI Imlib_Progress_Function imlib_context_get_progress_function(void);
199 EAPI char           imlib_context_get_progress_granularity(void);
200 EAPI Imlib_Image    imlib_context_get_image(void);
201 EAPI void           imlib_context_get_cliprect(int *x, int *y, int *w, int *h);
202 EAPI Imlib_TTF_Encoding imlib_context_get_TTF_encoding(void);
203 
204 EAPI int            imlib_get_cache_used(void);
205 EAPI int            imlib_get_cache_size(void);
206 EAPI void           imlib_set_cache_size(int bytes);
207 EAPI int            imlib_get_color_usage(void);
208 EAPI void           imlib_set_color_usage(int max);
209 EAPI void           imlib_flush_loaders(void);
210 
211 #ifndef X_DISPLAY_MISSING
212 EAPI int            imlib_get_visual_depth(Display * display, Visual * visual);
213 EAPI Visual        *imlib_get_best_visual(Display * display, int screen,
214                                           int *depth_return);
215 #endif
216 
217 EAPI Imlib_Image    imlib_load_image(const char *file);
218 EAPI Imlib_Image    imlib_load_image_immediately(const char *file);
219 EAPI Imlib_Image    imlib_load_image_without_cache(const char *file);
220 EAPI Imlib_Image    imlib_load_image_immediately_without_cache(const char
221                                                                *file);
222 EAPI Imlib_Image    imlib_load_image_fd(int fd, const char *file);
223 EAPI Imlib_Image    imlib_load_image_with_error_return(const char *file,
224                                                        Imlib_Load_Error *
225                                                        error_return);
226 EAPI void           imlib_free_image(void);
227 EAPI void           imlib_free_image_and_decache(void);
228 
229 /* query/modify image parameters */
230 EAPI int            imlib_image_get_width(void);
231 EAPI int            imlib_image_get_height(void);
232 EAPI const char    *imlib_image_get_filename(void);
233 EAPI DATA32        *imlib_image_get_data(void);
234 EAPI DATA32        *imlib_image_get_data_for_reading_only(void);
235 EAPI void           imlib_image_put_back_data(DATA32 * data);
236 EAPI char           imlib_image_has_alpha(void);
237 EAPI void           imlib_image_set_changes_on_disk(void);
238 EAPI void           imlib_image_get_border(Imlib_Border * border);
239 EAPI void           imlib_image_set_border(Imlib_Border * border);
240 EAPI void           imlib_image_set_format(const char *format);
241 EAPI void           imlib_image_set_irrelevant_format(char irrelevant);
242 EAPI void           imlib_image_set_irrelevant_border(char irrelevant);
243 EAPI void           imlib_image_set_irrelevant_alpha(char irrelevant);
244 EAPI char          *imlib_image_format(void);
245 EAPI void           imlib_image_set_has_alpha(char has_alpha);
246 EAPI void           imlib_image_query_pixel(int x, int y,
247                                             Imlib_Color * color_return);
248 EAPI void           imlib_image_query_pixel_hsva(int x, int y, float *hue,
249                                                  float *saturation,
250                                                  float *value, int *alpha);
251 EAPI void           imlib_image_query_pixel_hlsa(int x, int y, float *hue,
252                                                  float *lightness,
253                                                  float *saturation, int *alpha);
254 EAPI void           imlib_image_query_pixel_cmya(int x, int y, int *cyan,
255                                                  int *magenta, int *yellow,
256                                                  int *alpha);
257 
258 /* rendering functions */
259 #ifndef X_DISPLAY_MISSING
260 EAPI void           imlib_render_pixmaps_for_whole_image(Pixmap * pixmap_return,
261                                                          Pixmap * mask_return);
262 EAPI void           imlib_render_pixmaps_for_whole_image_at_size(Pixmap *
263                                                                  pixmap_return,
264                                                                  Pixmap *
265                                                                  mask_return,
266                                                                  int width,
267                                                                  int height);
268 EAPI void           imlib_free_pixmap_and_mask(Pixmap pixmap);
269 EAPI void           imlib_render_image_on_drawable(int x, int y);
270 EAPI void           imlib_render_image_on_drawable_at_size(int x, int y,
271                                                            int width,
272                                                            int height);
273 EAPI void           imlib_render_image_part_on_drawable_at_size(int source_x,
274                                                                 int source_y,
275                                                                 int
276                                                                 source_width, int
277                                                                 source_height,
278                                                                 int x, int y,
279                                                                 int width,
280                                                                 int height);
281 EAPI DATA32         imlib_render_get_pixel_color(void);
282 #endif
283 EAPI void           imlib_blend_image_onto_image(Imlib_Image source_image,
284                                                  char merge_alpha,
285                                                  int source_x, int source_y,
286                                                  int source_width,
287                                                  int source_height,
288                                                  int destination_x,
289                                                  int destination_y,
290                                                  int destination_width,
291                                                  int destination_height);
292 
293 /* creation functions */
294 EAPI Imlib_Image    imlib_create_image(int width, int height);
295 EAPI Imlib_Image    imlib_create_image_using_data(int width, int height,
296                                                   DATA32 * data);
297 EAPI Imlib_Image    imlib_create_image_using_data_and_memory_function
298    (int width, int height, DATA32 * data,
299     Imlib_Image_Data_Memory_Function func);
300 EAPI Imlib_Image    imlib_create_image_using_copied_data(int width, int height,
301                                                          DATA32 * data);
302 #ifndef X_DISPLAY_MISSING
303 EAPI Imlib_Image    imlib_create_image_from_drawable(Pixmap mask,
304                                                      int x, int y,
305                                                      int width, int height,
306                                                      char need_to_grab_x);
307 EAPI Imlib_Image    imlib_create_image_from_ximage(XImage * image,
308                                                    XImage * mask,
309                                                    int x, int y,
310                                                    int width, int height,
311                                                    char need_to_grab_x);
312 EAPI Imlib_Image    imlib_create_scaled_image_from_drawable(Pixmap mask,
313                                                             int source_x,
314                                                             int source_y,
315                                                             int source_width,
316                                                             int
317                                                             source_height, int
318                                                             destination_width, int
319                                                             destination_height, char
320                                                             need_to_grab_x, char
321                                                             get_mask_from_shape);
322 EAPI char           imlib_copy_drawable_to_image(Pixmap mask, int x, int y,
323                                                  int width, int height,
324                                                  int destination_x,
325                                                  int destination_y,
326                                                  char need_to_grab_x);
327 
328 EAPI int            imlib_get_ximage_cache_count_used(void);
329 EAPI int            imlib_get_ximage_cache_count_max(void);
330 EAPI void           imlib_set_ximage_cache_count_max(int count);
331 EAPI int            imlib_get_ximage_cache_size_used(void);
332 EAPI int            imlib_get_ximage_cache_size_max(void);
333 EAPI void           imlib_set_ximage_cache_size_max(int bytes);
334 #endif
335 EAPI Imlib_Image    imlib_clone_image(void);
336 EAPI Imlib_Image    imlib_create_cropped_image(int x, int y, int width,
337                                                int height);
338 EAPI Imlib_Image    imlib_create_cropped_scaled_image(int source_x,
339                                                       int source_y,
340                                                       int source_width,
341                                                       int source_height,
342                                                       int destination_width,
343                                                       int destination_height);
344 
345 /* imlib updates. lists of rectangles for storing required update draws */
346 EAPI Imlib_Updates  imlib_updates_clone(Imlib_Updates updates);
347 EAPI Imlib_Updates  imlib_update_append_rect(Imlib_Updates updates,
348                                              int x, int y, int w, int h);
349 EAPI Imlib_Updates  imlib_updates_merge(Imlib_Updates updates, int w, int h);
350 EAPI Imlib_Updates  imlib_updates_merge_for_rendering(Imlib_Updates updates,
351                                                       int w, int h);
352 EAPI void           imlib_updates_free(Imlib_Updates updates);
353 EAPI Imlib_Updates  imlib_updates_get_next(Imlib_Updates updates);
354 EAPI void           imlib_updates_get_coordinates(Imlib_Updates updates,
355                                                   int *x_return,
356                                                   int *y_return,
357                                                   int *width_return,
358                                                   int *height_return);
359 EAPI void           imlib_updates_set_coordinates(Imlib_Updates updates,
360                                                   int x, int y,
361                                                   int width, int height);
362 EAPI void           imlib_render_image_updates_on_drawable(Imlib_Updates
363                                                            updates,
364                                                            int x, int y);
365 EAPI Imlib_Updates  imlib_updates_init(void);
366 EAPI Imlib_Updates  imlib_updates_append_updates(Imlib_Updates updates,
367                                                  Imlib_Updates
368                                                  appended_updates);
369 
370 /* image modification */
371 EAPI void           imlib_image_flip_horizontal(void);
372 EAPI void           imlib_image_flip_vertical(void);
373 EAPI void           imlib_image_flip_diagonal(void);
374 EAPI void           imlib_image_orientate(int orientation);
375 EAPI void           imlib_image_blur(int radius);
376 EAPI void           imlib_image_sharpen(int radius);
377 EAPI void           imlib_image_tile_horizontal(void);
378 EAPI void           imlib_image_tile_vertical(void);
379 EAPI void           imlib_image_tile(void);
380 
381 /* fonts and text */
382 EAPI Imlib_Font     imlib_load_font(const char *font_name);
383 EAPI void           imlib_free_font(void);
384 
385    /* NB! The four functions below are deprecated. */
386 EAPI int            imlib_insert_font_into_fallback_chain(Imlib_Font font,
387                                                           Imlib_Font
388                                                           fallback_font);
389 EAPI void           imlib_remove_font_from_fallback_chain(Imlib_Font
390                                                           fallback_font);
391 EAPI Imlib_Font     imlib_get_prev_font_in_fallback_chain(Imlib_Font fn);
392 EAPI Imlib_Font     imlib_get_next_font_in_fallback_chain(Imlib_Font fn);
393 
394    /* NB! The four functions above are deprecated. */
395 EAPI void           imlib_text_draw(int x, int y, const char *text);
396 EAPI void           imlib_text_draw_with_return_metrics(int x, int y,
397                                                         const char *text,
398                                                         int *width_return,
399                                                         int *height_return, int
400                                                         *horizontal_advance_return, int
401                                                         *vertical_advance_return);
402 EAPI void           imlib_get_text_size(const char *text,
403                                         int *width_return, int *height_return);
404 EAPI void           imlib_get_text_advance(const char *text,
405                                            int *horizontal_advance_return,
406                                            int *vertical_advance_return);
407 EAPI int            imlib_get_text_inset(const char *text);
408 EAPI void           imlib_add_path_to_font_path(const char *path);
409 EAPI void           imlib_remove_path_from_font_path(const char *path);
410 EAPI char         **imlib_list_font_path(int *number_return);
411 EAPI int            imlib_text_get_index_and_location(const char *text,
412                                                       int x, int y,
413                                                       int *char_x_return,
414                                                       int *char_y_return,
415                                                       int *char_width_return,
416                                                       int *char_height_return);
417 EAPI void           imlib_text_get_location_at_index(const char *text,
418                                                      int index,
419                                                      int *char_x_return,
420                                                      int *char_y_return,
421                                                      int *char_width_return,
422                                                      int *char_height_return);
423 EAPI char         **imlib_list_fonts(int *number_return);
424 EAPI void           imlib_free_font_list(char **font_list, int number);
425 EAPI int            imlib_get_font_cache_size(void);
426 EAPI void           imlib_set_font_cache_size(int bytes);
427 EAPI void           imlib_flush_font_cache(void);
428 EAPI int            imlib_get_font_ascent(void);
429 EAPI int            imlib_get_font_descent(void);
430 EAPI int            imlib_get_maximum_font_ascent(void);
431 EAPI int            imlib_get_maximum_font_descent(void);
432 
433 /* color modifiers */
434 EAPI Imlib_Color_Modifier imlib_create_color_modifier(void);
435 EAPI void           imlib_free_color_modifier(void);
436 EAPI void           imlib_modify_color_modifier_gamma(double gamma_value);
437 EAPI void           imlib_modify_color_modifier_brightness(double
438                                                            brightness_value);
439 EAPI void           imlib_modify_color_modifier_contrast(double
440                                                          contrast_value);
441 EAPI void           imlib_set_color_modifier_tables(DATA8 * red_table,
442                                                     DATA8 * green_table,
443                                                     DATA8 * blue_table,
444                                                     DATA8 * alpha_table);
445 EAPI void           imlib_get_color_modifier_tables(DATA8 * red_table,
446                                                     DATA8 * green_table,
447                                                     DATA8 * blue_table,
448                                                     DATA8 * alpha_table);
449 EAPI void           imlib_reset_color_modifier(void);
450 EAPI void           imlib_apply_color_modifier(void);
451 EAPI void           imlib_apply_color_modifier_to_rectangle(int x, int y,
452                                                             int width,
453                                                             int height);
454 
455 /* drawing on images */
456 EAPI Imlib_Updates  imlib_image_draw_pixel(int x, int y, char make_updates);
457 EAPI Imlib_Updates  imlib_image_draw_line(int x1, int y1, int x2, int y2,
458                                           char make_updates);
459 EAPI void           imlib_image_draw_rectangle(int x, int y,
460                                                int width, int height);
461 EAPI void           imlib_image_fill_rectangle(int x, int y,
462                                                int width, int height);
463 EAPI void           imlib_image_copy_alpha_to_image(Imlib_Image image_source,
464                                                     int x, int y);
465 EAPI void           imlib_image_copy_alpha_rectangle_to_image(Imlib_Image
466                                                               image_source,
467                                                               int x, int y,
468                                                               int width,
469                                                               int height,
470                                                               int destination_x,
471                                                               int
472                                                               destination_y);
473 EAPI void           imlib_image_scroll_rect(int x, int y, int width, int height,
474                                             int delta_x, int delta_y);
475 EAPI void           imlib_image_copy_rect(int x, int y, int width, int height,
476                                           int new_x, int new_y);
477 
478 /* polygons */
479 EAPI ImlibPolygon   imlib_polygon_new(void);
480 EAPI void           imlib_polygon_free(ImlibPolygon poly);
481 EAPI void           imlib_polygon_add_point(ImlibPolygon poly, int x, int y);
482 EAPI void           imlib_image_draw_polygon(ImlibPolygon poly,
483                                              unsigned char closed);
484 EAPI void           imlib_image_fill_polygon(ImlibPolygon poly);
485 EAPI void           imlib_polygon_get_bounds(ImlibPolygon poly,
486                                              int *px1, int *py1,
487                                              int *px2, int *py2);
488 EAPI unsigned char  imlib_polygon_contains_point(ImlibPolygon poly,
489                                                  int x, int y);
490 
491 /* ellipses */
492 EAPI void           imlib_image_draw_ellipse(int xc, int yc, int a, int b);
493 EAPI void           imlib_image_fill_ellipse(int xc, int yc, int a, int b);
494 
495 /* color ranges */
496 EAPI Imlib_Color_Range imlib_create_color_range(void);
497 EAPI void           imlib_free_color_range(void);
498 EAPI void           imlib_add_color_to_color_range(int distance_away);
499 EAPI void           imlib_image_fill_color_range_rectangle(int x, int y,
500                                                            int width,
501                                                            int height,
502                                                            double angle);
503 EAPI void           imlib_image_fill_hsva_color_range_rectangle(int x, int y,
504                                                                 int width,
505                                                                 int height,
506                                                                 double
507                                                                 angle);
508 
509 /* image data */
510 EAPI void           imlib_image_attach_data_value(const char *key,
511                                                   void *data, int value,
512                                                   Imlib_Data_Destructor_Function
513                                                   destructor_function);
514 EAPI void          *imlib_image_get_attached_data(const char *key);
515 EAPI int            imlib_image_get_attached_value(const char *key);
516 EAPI void           imlib_image_remove_attached_data_value(const char *key);
517 EAPI void           imlib_image_remove_and_free_attached_data_value(const char
518                                                                     *key);
519 
520 /* saving */
521 EAPI void           imlib_save_image(const char *filename);
522 EAPI void           imlib_save_image_with_error_return(const char *filename,
523                                                        Imlib_Load_Error *
524                                                        error_return);
525 
526 /* FIXME: */
527 /* need to add arbitrary rotation routines */
528 
529 /* rotation/skewing */
530 EAPI Imlib_Image    imlib_create_rotated_image(double angle);
531 
532 /* rotation from buffer to context (without copying)*/
533 EAPI void           imlib_rotate_image_from_buffer(double angle,
534                                                    Imlib_Image source_image);
535 
536 EAPI void           imlib_blend_image_onto_image_at_angle(Imlib_Image
537                                                           source_image,
538                                                           char merge_alpha,
539                                                           int source_x,
540                                                           int source_y,
541                                                           int source_width,
542                                                           int source_height,
543                                                           int destination_x,
544                                                           int destination_y,
545                                                           int angle_x,
546                                                           int angle_y);
547 EAPI void           imlib_blend_image_onto_image_skewed(Imlib_Image
548                                                         source_image,
549                                                         char merge_alpha,
550                                                         int source_x,
551                                                         int source_y,
552                                                         int source_width,
553                                                         int source_height,
554                                                         int destination_x,
555                                                         int destination_y,
556                                                         int h_angle_x,
557                                                         int h_angle_y,
558                                                         int v_angle_x,
559                                                         int v_angle_y);
560 #ifndef X_DISPLAY_MISSING
561 EAPI void           imlib_render_image_on_drawable_skewed(int source_x,
562                                                           int source_y,
563                                                           int source_width,
564                                                           int source_height,
565                                                           int destination_x,
566                                                           int destination_y,
567                                                           int h_angle_x,
568                                                           int h_angle_y,
569                                                           int v_angle_x,
570                                                           int v_angle_y);
571 EAPI void           imlib_render_image_on_drawable_at_angle(int source_x,
572                                                             int source_y,
573                                                             int source_width,
574                                                             int source_height,
575                                                             int destination_x,
576                                                             int destination_y,
577                                                             int angle_x,
578                                                             int angle_y);
579 #endif
580 
581 /* image filters */
582 EAPI void           imlib_image_filter(void);
583 EAPI Imlib_Filter   imlib_create_filter(int initsize);
584 EAPI void           imlib_context_set_filter(Imlib_Filter filter);
585 EAPI Imlib_Filter   imlib_context_get_filter(void);
586 EAPI void           imlib_free_filter(void);
587 EAPI void           imlib_filter_set(int xoff, int yoff,
588                                      int a, int r, int g, int b);
589 EAPI void           imlib_filter_set_alpha(int xoff, int yoff,
590                                            int a, int r, int g, int b);
591 EAPI void           imlib_filter_set_red(int xoff, int yoff,
592                                          int a, int r, int g, int b);
593 EAPI void           imlib_filter_set_green(int xoff, int yoff,
594                                            int a, int r, int g, int b);
595 EAPI void           imlib_filter_set_blue(int xoff, int yoff,
596                                           int a, int r, int g, int b);
597 EAPI void           imlib_filter_constants(int a, int r, int g, int b);
598 EAPI void           imlib_filter_divisors(int a, int r, int g, int b);
599 
600 EAPI void           imlib_apply_filter(const char *script, ...);
601 
602 EAPI void           imlib_image_clear(void);
603 EAPI void           imlib_image_clear_color(int r, int g, int b, int a);
604 
605 /* *INDENT-OFF* */
606 #ifdef __cplusplus
607 }
608 #endif
609 /* *INDENT-ON* */
610 #endif
611