1 | /* GdkPixbuf library - Io handling. This is an internal header for |
2 | * GdkPixbuf. You should never use it unless you are doing development for |
3 | * GdkPixbuf itself. |
4 | * |
5 | * Copyright (C) 1999 The Free Software Foundation |
6 | * |
7 | * Authors: Mark Crichton <crichton@gimp.org> |
8 | * Miguel de Icaza <miguel@gnu.org> |
9 | * Federico Mena-Quintero <federico@gimp.org> |
10 | * Jonathan Blandford <jrb@redhat.com> |
11 | * Michael Fulbright <drmike@redhat.com> |
12 | * |
13 | * This library is free software; you can redistribute it and/or |
14 | * modify it under the terms of the GNU Lesser General Public |
15 | * License as published by the Free Software Foundation; either |
16 | * version 2 of the License, or (at your option) any later version. |
17 | * |
18 | * This library is distributed in the hope that it will be useful, |
19 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
20 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
21 | * Lesser General Public License for more details. |
22 | * |
23 | * You should have received a copy of the GNU Lesser General Public |
24 | * License along with this library; if not, see <http://www.gnu.org/licenses/>. |
25 | */ |
26 | |
27 | #ifndef GDK_PIXBUF_IO_H |
28 | #define GDK_PIXBUF_IO_H |
29 | |
30 | #if defined(GDK_PIXBUF_DISABLE_SINGLE_INCLUDES) && !defined (GDK_PIXBUF_H_INSIDE) && !defined (GDK_PIXBUF_COMPILATION) |
31 | #error "Only <gdk-pixbuf/gdk-pixbuf.h> can be included directly." |
32 | #endif |
33 | |
34 | #include <stdio.h> |
35 | #include <glib.h> |
36 | #include <gmodule.h> |
37 | #include <gdk-pixbuf/gdk-pixbuf-core.h> |
38 | #include <gdk-pixbuf/gdk-pixbuf-animation.h> |
39 | |
40 | G_BEGIN_DECLS |
41 | |
42 | typedef struct _GdkPixbufFormat GdkPixbufFormat; |
43 | |
44 | GDK_PIXBUF_AVAILABLE_IN_ALL |
45 | GType gdk_pixbuf_format_get_type (void) G_GNUC_CONST; |
46 | |
47 | GDK_PIXBUF_AVAILABLE_IN_ALL |
48 | GSList *gdk_pixbuf_get_formats (void); |
49 | GDK_PIXBUF_AVAILABLE_IN_2_2 |
50 | gchar *gdk_pixbuf_format_get_name (GdkPixbufFormat *format); |
51 | GDK_PIXBUF_AVAILABLE_IN_2_2 |
52 | gchar *gdk_pixbuf_format_get_description (GdkPixbufFormat *format); |
53 | GDK_PIXBUF_AVAILABLE_IN_2_2 |
54 | gchar **gdk_pixbuf_format_get_mime_types (GdkPixbufFormat *format); |
55 | GDK_PIXBUF_AVAILABLE_IN_2_2 |
56 | gchar **gdk_pixbuf_format_get_extensions (GdkPixbufFormat *format); |
57 | GDK_PIXBUF_AVAILABLE_IN_2_36 |
58 | gboolean gdk_pixbuf_format_is_save_option_supported (GdkPixbufFormat *format, |
59 | const gchar *option_key); |
60 | GDK_PIXBUF_AVAILABLE_IN_2_2 |
61 | gboolean gdk_pixbuf_format_is_writable (GdkPixbufFormat *format); |
62 | GDK_PIXBUF_AVAILABLE_IN_2_6 |
63 | gboolean gdk_pixbuf_format_is_scalable (GdkPixbufFormat *format); |
64 | GDK_PIXBUF_AVAILABLE_IN_2_6 |
65 | gboolean gdk_pixbuf_format_is_disabled (GdkPixbufFormat *format); |
66 | GDK_PIXBUF_AVAILABLE_IN_2_6 |
67 | void gdk_pixbuf_format_set_disabled (GdkPixbufFormat *format, |
68 | gboolean disabled); |
69 | GDK_PIXBUF_AVAILABLE_IN_2_6 |
70 | gchar *gdk_pixbuf_format_get_license (GdkPixbufFormat *format); |
71 | |
72 | GDK_PIXBUF_AVAILABLE_IN_2_4 |
73 | GdkPixbufFormat *gdk_pixbuf_get_file_info (const gchar *filename, |
74 | gint *width, |
75 | gint *height); |
76 | GDK_PIXBUF_AVAILABLE_IN_2_32 |
77 | void gdk_pixbuf_get_file_info_async (const gchar *filename, |
78 | GCancellable *cancellable, |
79 | GAsyncReadyCallback callback, |
80 | gpointer user_data); |
81 | GDK_PIXBUF_AVAILABLE_IN_2_32 |
82 | GdkPixbufFormat *gdk_pixbuf_get_file_info_finish (GAsyncResult *async_result, |
83 | gint *width, |
84 | gint *height, |
85 | GError **error); |
86 | |
87 | GDK_PIXBUF_AVAILABLE_IN_ALL |
88 | GdkPixbufFormat *gdk_pixbuf_format_copy (const GdkPixbufFormat *format); |
89 | GDK_PIXBUF_AVAILABLE_IN_ALL |
90 | void gdk_pixbuf_format_free (GdkPixbufFormat *format); |
91 | |
92 | #ifdef GDK_PIXBUF_ENABLE_BACKEND |
93 | |
94 | |
95 | |
96 | /** |
97 | * GdkPixbufModuleSizeFunc: |
98 | * @width: pointer to a location containing the current image width |
99 | * @height: pointer to a location containing the current image height |
100 | * @user_data: the loader. |
101 | * |
102 | * Defines the type of the function that gets called once the size |
103 | * of the loaded image is known. |
104 | * |
105 | * The function is expected to set @width and @height to the desired |
106 | * size to which the image should be scaled. If a module has no efficient |
107 | * way to achieve the desired scaling during the loading of the image, it may |
108 | * either ignore the size request, or only approximate it - gdk-pixbuf will |
109 | * then perform the required scaling on the completely loaded image. |
110 | * |
111 | * If the function sets @width or @height to zero, the module should interpret |
112 | * this as a hint that it will be closed soon and shouldn't allocate further |
113 | * resources. This convention is used to implement gdk_pixbuf_get_file_info() |
114 | * efficiently. |
115 | * |
116 | * Since: 2.2 |
117 | */ |
118 | typedef void (* GdkPixbufModuleSizeFunc) (gint *width, |
119 | gint *height, |
120 | gpointer user_data); |
121 | |
122 | /** |
123 | * GdkPixbufModulePreparedFunc: |
124 | * @pixbuf: the #GdkPixbuf that is currently being loaded. |
125 | * @anim: if an animation is being loaded, the #GdkPixbufAnimation, else %NULL. |
126 | * @user_data: the loader. |
127 | * |
128 | * Defines the type of the function that gets called once the initial |
129 | * setup of @pixbuf is done. |
130 | * |
131 | * #GdkPixbufLoader uses a function of this type to emit the |
132 | * "<link linkend="GdkPixbufLoader-area-prepared">area_prepared</link>" |
133 | * signal. |
134 | * |
135 | * Since: 2.2 |
136 | */ |
137 | typedef void (* GdkPixbufModulePreparedFunc) (GdkPixbuf *pixbuf, |
138 | GdkPixbufAnimation *anim, |
139 | gpointer user_data); |
140 | |
141 | /** |
142 | * GdkPixbufModuleUpdatedFunc: |
143 | * @pixbuf: the #GdkPixbuf that is currently being loaded. |
144 | * @x: the X origin of the updated area. |
145 | * @y: the Y origin of the updated area. |
146 | * @width: the width of the updated area. |
147 | * @height: the height of the updated area. |
148 | * @user_data: the loader. |
149 | * |
150 | * Defines the type of the function that gets called every time a region |
151 | * of @pixbuf is updated. |
152 | * |
153 | * #GdkPixbufLoader uses a function of this type to emit the |
154 | * "<link linkend="GdkPixbufLoader-area-updated">area_updated</link>" |
155 | * signal. |
156 | * |
157 | * Since: 2.2 |
158 | */ |
159 | typedef void (* GdkPixbufModuleUpdatedFunc) (GdkPixbuf *pixbuf, |
160 | int x, |
161 | int y, |
162 | int width, |
163 | int height, |
164 | gpointer user_data); |
165 | |
166 | /** |
167 | * GdkPixbufModulePattern: |
168 | * @prefix: the prefix for this pattern |
169 | * @mask: mask containing bytes which modify how the prefix is matched against |
170 | * test data |
171 | * @relevance: relevance of this pattern |
172 | * |
173 | * The signature of a module is a set of prefixes. Prefixes are encoded as |
174 | * pairs of ordinary strings, where the second string, called the mask, if |
175 | * not %NULL, must be of the same length as the first one and may contain |
176 | * ' ', '!', 'x', 'z', and 'n' to indicate bytes that must be matched, |
177 | * not matched, "don't-care"-bytes, zeros and non-zeros. |
178 | * Each prefix has an associated integer that describes the relevance of |
179 | * the prefix, with 0 meaning a mismatch and 100 a "perfect match". |
180 | * |
181 | * Starting with gdk-pixbuf 2.8, the first byte of the mask may be '*', |
182 | * indicating an unanchored pattern that matches not only at the beginning, |
183 | * but also in the middle. Versions prior to 2.8 will interpret the '*' |
184 | * like an 'x'. |
185 | * |
186 | * The signature of a module is stored as an array of |
187 | * #GdkPixbufModulePatterns. The array is terminated by a pattern |
188 | * where the @prefix is %NULL. |
189 | * |
190 | * |
191 | * <informalexample><programlisting> |
192 | * GdkPixbufModulePattern *signature[] = { |
193 | * { "abcdx", " !x z", 100 }, |
194 | * { "bla", NULL, 90 }, |
195 | * { NULL, NULL, 0 } |
196 | * }; |
197 | * </programlisting> |
198 | * The example matches e.g. "auud\0" with relevance 100, and "blau" with |
199 | * relevance 90.</informalexample> |
200 | * |
201 | * Since: 2.2 |
202 | */ |
203 | typedef struct _GdkPixbufModulePattern GdkPixbufModulePattern; |
204 | struct _GdkPixbufModulePattern { |
205 | char *prefix; |
206 | char *mask; |
207 | int relevance; |
208 | }; |
209 | |
210 | /** |
211 | * GdkPixbufModule: |
212 | * @module_name: the name of the module, usually the same as the |
213 | * usual file extension for images of this type, eg. "xpm", "jpeg" or "png". |
214 | * @module_path: the path from which the module is loaded. |
215 | * @module: the loaded #GModule. |
216 | * @info: a #GdkPixbufFormat holding information about the module. |
217 | * @load: loads an image from a file. |
218 | * @load_xpm_data: loads an image from data in memory. |
219 | * @begin_load: begins an incremental load. |
220 | * @stop_load: stops an incremental load. |
221 | * @load_increment: continues an incremental load. |
222 | * @load_animation: loads an animation from a file. |
223 | * @save: saves a #GdkPixbuf to a file. |
224 | * @save_to_callback: saves a #GdkPixbuf by calling the given #GdkPixbufSaveFunc. |
225 | * @is_save_option_supported: returns whether a save option key is supported by the module |
226 | * |
227 | * A #GdkPixbufModule contains the necessary functions to load and save |
228 | * images in a certain file format. |
229 | * |
230 | * A #GdkPixbufModule can be loaded dynamically from a #GModule. |
231 | * Each loadable module must contain a #GdkPixbufModuleFillVtableFunc function |
232 | * named <function>fill_vtable</function>, which will get called when the module |
233 | * is loaded and must set the function pointers of the #GdkPixbufModule. |
234 | */ |
235 | typedef struct _GdkPixbufModule GdkPixbufModule; |
236 | struct _GdkPixbufModule { |
237 | char *module_name; |
238 | char *module_path; |
239 | GModule *module; |
240 | GdkPixbufFormat *info; |
241 | |
242 | GdkPixbuf *(* load) (FILE *f, |
243 | GError **error); |
244 | GdkPixbuf *(* load_xpm_data) (const char **data); |
245 | |
246 | /* Incremental loading */ |
247 | |
248 | gpointer (* begin_load) (GdkPixbufModuleSizeFunc size_func, |
249 | GdkPixbufModulePreparedFunc prepare_func, |
250 | GdkPixbufModuleUpdatedFunc update_func, |
251 | gpointer user_data, |
252 | GError **error); |
253 | gboolean (* stop_load) (gpointer context, |
254 | GError **error); |
255 | gboolean (* load_increment) (gpointer context, |
256 | const guchar *buf, |
257 | guint size, |
258 | GError **error); |
259 | |
260 | /* Animation loading */ |
261 | GdkPixbufAnimation *(* load_animation) (FILE *f, |
262 | GError **error); |
263 | |
264 | /* Saving */ |
265 | gboolean (* save) (FILE *f, |
266 | GdkPixbuf *pixbuf, |
267 | gchar **param_keys, |
268 | gchar **param_values, |
269 | GError **error); |
270 | |
271 | gboolean (*save_to_callback) (GdkPixbufSaveFunc save_func, |
272 | gpointer user_data, |
273 | GdkPixbuf *pixbuf, |
274 | gchar **option_keys, |
275 | gchar **option_values, |
276 | GError **error); |
277 | |
278 | gboolean (* is_save_option_supported) (const gchar *option_key); |
279 | |
280 | /*< private >*/ |
281 | void (*_reserved1) (void); |
282 | void (*_reserved2) (void); |
283 | void (*_reserved3) (void); |
284 | void (*_reserved4) (void); |
285 | }; |
286 | |
287 | /** |
288 | * GdkPixbufModuleFillVtableFunc: |
289 | * @module: a #GdkPixbufModule. |
290 | * |
291 | * Defines the type of the function used to set the vtable of a |
292 | * #GdkPixbufModule when it is loaded. |
293 | * |
294 | * Since: 2.2 |
295 | */ |
296 | |
297 | typedef void (* GdkPixbufModuleFillVtableFunc) (GdkPixbufModule *module); |
298 | |
299 | /** |
300 | * GdkPixbufModuleFillInfoFunc: |
301 | * @info: a #GdkPixbufFormat. |
302 | * |
303 | * Defines the type of the function used to fill a |
304 | * #GdkPixbufFormat structure with information about a module. |
305 | * |
306 | * Since: 2.2 |
307 | */ |
308 | typedef void (* GdkPixbufModuleFillInfoFunc) (GdkPixbufFormat *info); |
309 | |
310 | /** |
311 | * GdkPixbufFormatFlags: |
312 | * @GDK_PIXBUF_FORMAT_WRITABLE: the module can write out images in the format. |
313 | * @GDK_PIXBUF_FORMAT_SCALABLE: the image format is scalable |
314 | * @GDK_PIXBUF_FORMAT_THREADSAFE: the module is threadsafe. gdk-pixbuf |
315 | * ignores modules that are not marked as threadsafe. (Since 2.28). |
316 | * |
317 | * Flags which allow a module to specify further details about the supported |
318 | * operations. |
319 | * |
320 | * Since: 2.2 |
321 | */ |
322 | typedef enum /*< skip >*/ |
323 | { |
324 | GDK_PIXBUF_FORMAT_WRITABLE = 1 << 0, |
325 | GDK_PIXBUF_FORMAT_SCALABLE = 1 << 1, |
326 | GDK_PIXBUF_FORMAT_THREADSAFE = 1 << 2 |
327 | } GdkPixbufFormatFlags; |
328 | |
329 | /** |
330 | * GdkPixbufFormat: |
331 | * @name: the name of the image format. |
332 | * @signature: the signature of the module. |
333 | * @domain: the message domain for the @description. |
334 | * @description: a description of the image format. |
335 | * @mime_types: a %NULL-terminated array of MIME types for the image format. |
336 | * @extensions: a %NULL-terminated array of typical filename extensions for the |
337 | * image format. |
338 | * @flags: a combination of #GdkPixbufFormatFlags. |
339 | * @disabled: a boolean determining whether the loader is disabled. |
340 | * @license: a string containing license information, typically set to |
341 | * shorthands like "GPL", "LGPL", etc. |
342 | * |
343 | * A #GdkPixbufFormat contains information about the image format accepted by a |
344 | * module. Only modules should access the fields directly, applications should |
345 | * use the <function>gdk_pixbuf_format_*</function> functions. |
346 | * |
347 | * Since: 2.2 |
348 | */ |
349 | struct _GdkPixbufFormat { |
350 | gchar *name; |
351 | GdkPixbufModulePattern *signature; |
352 | gchar *domain; |
353 | gchar *description; |
354 | gchar **mime_types; |
355 | gchar **extensions; |
356 | guint32 flags; |
357 | gboolean disabled; |
358 | gchar *license; |
359 | }; |
360 | |
361 | #endif /* GDK_PIXBUF_ENABLE_BACKEND */ |
362 | |
363 | G_END_DECLS |
364 | |
365 | #endif /* GDK_PIXBUF_IO_H */ |
366 | |