summaryrefslogtreecommitdiffstats
path: root/debian/imlib/imlib-1.9.15/gdk_imlib/modules.c
diff options
context:
space:
mode:
Diffstat (limited to 'debian/imlib/imlib-1.9.15/gdk_imlib/modules.c')
-rw-r--r--debian/imlib/imlib-1.9.15/gdk_imlib/modules.c288
1 files changed, 288 insertions, 0 deletions
diff --git a/debian/imlib/imlib-1.9.15/gdk_imlib/modules.c b/debian/imlib/imlib-1.9.15/gdk_imlib/modules.c
new file mode 100644
index 00000000..d2c333dc
--- /dev/null
+++ b/debian/imlib/imlib-1.9.15/gdk_imlib/modules.c
@@ -0,0 +1,288 @@
+/*
+ * modules.c: Dynamically loading the format handlers for save and load
+ * operations in Imlib.
+ *
+ * Author:
+ * Miguel de Icaza (miguel@gnu.org).
+ */
+#include <config.h>
+#include <glib.h>
+#include <gmodule.h>
+#include "gdk_imlib.h"
+#define id _gdk_imlib_data
+#include "gdk_imlib_private.h"
+
+#ifdef USE_GMODULE
+
+static unsigned char *loader_bmp (FILE *f, int *w, int *h, int *t);
+static unsigned char *loader_xpm (FILE *f, int *w, int *h, int *t);
+static unsigned char *loader_gif (FILE *f, int *w, int *h, int *t);
+static unsigned char *loader_tiff (FILE *f, char *n, int *w, int *h, int *t);
+static unsigned char *loader_jpeg (FILE *f, int *w, int *h, int *t);
+static unsigned char *loader_png (FILE *f, int *w, int *h, int *t);
+static unsigned char *loader_ppm (FILE *f, int *w, int *h, int *t);
+
+static gint saver_tiff (GdkImlibImage *im, char *file, GdkImlibSaveInfo *info);
+static gint saver_png (GdkImlibImage *im, char *file, GdkImlibSaveInfo *info);
+static gint saver_jpeg (GdkImlibImage *im, char *file, GdkImlibSaveInfo *info);
+static gint saver_ps (GdkImlibImage *im, char *file, GdkImlibSaveInfo *info);
+static gint saver_ppm (GdkImlibImage *im, char *file, GdkImlibSaveInfo *info);
+
+static GdkImlibImage *loader_alpha_png (char *file);
+
+static GdkImlibImage *inline_png (unsigned char *data, int data_size);
+
+#else
+# include "io-png.c"
+# include "io-bmp.c"
+# include "io-gif.c"
+# include "io-jpeg.c"
+# include "io-ppm.c"
+# include "io-ps.c"
+# include "io-tiff.c"
+# include "io-xpm.c"
+#endif
+
+gdk_imlib_loader_fn _gdk_imlib_LoadBMP = loader_bmp;
+gdk_imlib_loader_fn _gdk_imlib_LoadXPM = loader_xpm;
+gdk_imlib_loader_fn _gdk_imlib_LoadGIF = loader_gif;
+gdk_imlib_loader_fn2 _gdk_imlib_LoadTIFF = loader_tiff;
+gdk_imlib_loader_fn _gdk_imlib_LoadJPEG = loader_jpeg;
+gdk_imlib_loader_fn _gdk_imlib_LoadPNG = loader_png;
+gdk_imlib_loader_fn _gdk_imlib_LoadPPM = loader_ppm;
+
+gdk_imlib_saver_fn _gdk_imlib_SaveTIFF = saver_tiff;
+gdk_imlib_saver_fn _gdk_imlib_SavePNG = saver_png;
+gdk_imlib_saver_fn _gdk_imlib_SaveJPEG = saver_jpeg;
+gdk_imlib_saver_fn _gdk_imlib_SavePS = saver_ps;
+gdk_imlib_saver_fn _gdk_imlib_SavePPM = saver_ppm;
+
+gdk_imlib_inline_fn _gdk_imlib_inlined_png_to_image = inline_png;
+gdk_imlib_load_alpha_fn _gdk_imlib_load_alpha_png = loader_alpha_png;
+
+#ifdef USE_GMODULE
+static unsigned char *
+load_fail_fn (FILE *f, int *w, int *h, int *t)
+{
+ return NULL;
+}
+
+static gint
+save_fail_fn (GdkImlibImage *im, char *file, GdkImlibSaveInfo *info)
+{
+ return 0;
+}
+
+static gboolean
+get_module_loader_saver (char *mod,
+ void **loader, void *def_loader,
+ void **saver, void *def_saver)
+{
+ char *path, *modname;
+ GModule *m;
+ gboolean v;
+ void *ptr;
+
+ modname = g_strconcat ("imlib-", mod, NULL);
+ path = g_module_build_path (IMLIB_LIB, modname);
+ g_free (modname);
+
+ m = g_module_open (path, G_MODULE_BIND_LAZY);
+ g_free (path);
+ if (!m){
+ if (loader)
+ *loader = def_loader;
+ if (saver)
+ *saver = def_saver;
+ return FALSE;
+ }
+
+ if (loader){
+ char *loader_name;
+
+ loader_name = g_strconcat ("loader_", mod, NULL);
+ v = g_module_symbol (m, loader_name, (void **) &ptr);
+ if (v)
+ *loader = ptr;
+ else
+ *loader = def_loader;
+ g_free (loader_name);
+ }
+
+ if (saver){
+ char *saver_name;
+
+ saver_name = g_strconcat ("saver_", mod, NULL);
+ v = g_module_symbol (m, saver_name, (void **) &ptr);
+ if (v)
+ *saver = ptr;
+ else
+ *saver = def_saver;
+ g_free (saver_name);
+ }
+
+ /* Ugly hack, this is an exception */
+ if (strcmp (mod, "png") == 0){
+ char *inline_name, *alpha_name;
+
+ inline_name = g_strconcat ("inline_", mod, NULL);
+ v = g_module_symbol (m, inline_name, (void **) &ptr);
+ if (v)
+ _gdk_imlib_inlined_png_to_image = ptr;
+ else
+ _gdk_imlib_inlined_png_to_image = (gdk_imlib_inline_fn) load_fail_fn;
+ g_free (inline_name);
+
+ alpha_name = g_strconcat ("loader_alpha_", mod, NULL);
+ v = g_module_symbol (m, alpha_name, (void **) &ptr);
+ if (v)
+ _gdk_imlib_load_alpha_png = ptr;
+ else
+ _gdk_imlib_load_alpha_png = (gdk_imlib_load_alpha_fn) load_fail_fn;
+ g_free (alpha_name);
+ }
+
+ return TRUE; /* FIXME: return value is never checked */
+}
+
+static unsigned char *
+load_module_relay (char *mod, gdk_imlib_loader_fn *lf, gdk_imlib_saver_fn *sf, FILE *f, int *w, int *h, int *t)
+{
+ get_module_loader_saver (mod,
+ (void **) lf, (void *) load_fail_fn,
+ (void **) sf, (void *) save_fail_fn);
+
+ return (*lf)(f, w, h, t);
+}
+
+static gint
+save_module_relay (char *mod, gdk_imlib_loader_fn *lf, gdk_imlib_saver_fn *sf,
+ GdkImlibImage *im, char *fname, GdkImlibSaveInfo *info)
+{
+ get_module_loader_saver (mod,
+ (void **) lf, (void *) load_fail_fn,
+ (void **) sf, (void *) save_fail_fn);
+
+ return (*sf)(im, fname, info);
+}
+
+static unsigned char *
+loader_tiff (FILE *f, char *n, int *w, int *h, int *t)
+{
+ get_module_loader_saver ("tiff",
+ (void **) &_gdk_imlib_LoadTIFF, (void *) load_fail_fn,
+ (void **) &_gdk_imlib_SaveTIFF, (void *) save_fail_fn);
+
+ return _gdk_imlib_LoadTIFF (f, n, w, h, t);
+}
+
+static unsigned char *
+loader_bmp (FILE *f, int *w, int *h, int *t)
+{
+ return load_module_relay ("bmp", &_gdk_imlib_LoadBMP, NULL, f, w, h, t);
+}
+
+static unsigned char *
+loader_xpm (FILE *f, int *w, int *h, int *t)
+{
+ return load_module_relay ("xpm", &_gdk_imlib_LoadXPM, NULL, f, w, h, t);
+}
+
+static unsigned char *
+loader_gif (FILE *f, int *w, int *h, int *t)
+{
+ return load_module_relay ("gif", &_gdk_imlib_LoadGIF, NULL, f, w, h, t);
+}
+
+static unsigned char *
+loader_jpeg (FILE *f, int *w, int *h, int *t)
+{
+ return load_module_relay ("jpeg",
+ &_gdk_imlib_LoadJPEG,
+ &_gdk_imlib_SaveJPEG, f, w, h, t);
+}
+
+static unsigned char *
+loader_png (FILE *f, int *w, int *h, int *t)
+{
+ return load_module_relay ("png",
+ &_gdk_imlib_LoadPNG,
+ &_gdk_imlib_SavePNG, f, w, h, t);
+}
+
+static unsigned char *
+loader_ppm (FILE *f, int *w, int *h, int *t)
+{
+ return load_module_relay ("ppm",
+ &_gdk_imlib_LoadPPM,
+ &_gdk_imlib_SavePPM, f, w, h, t);
+}
+
+static gint
+saver_tiff (GdkImlibImage *im, char *file, GdkImlibSaveInfo *info)
+{
+ return save_module_relay ("tiff",
+ (gdk_imlib_loader_fn *) &_gdk_imlib_LoadTIFF,
+ &_gdk_imlib_SaveTIFF, im, file, info);
+}
+
+static gint
+saver_png (GdkImlibImage *im, char *file, GdkImlibSaveInfo *info)
+{
+ return save_module_relay ("png",
+ &_gdk_imlib_LoadPNG,
+ &_gdk_imlib_SavePNG, im, file, info);
+}
+
+static gint
+saver_jpeg (GdkImlibImage *im, char *file, GdkImlibSaveInfo *info)
+{
+ return save_module_relay ("jpeg",
+ &_gdk_imlib_LoadJPEG,
+ &_gdk_imlib_SaveJPEG, im, file, info);
+}
+
+static gint
+saver_ps (GdkImlibImage *im, char *file, GdkImlibSaveInfo *info)
+{
+ return save_module_relay ("ps", NULL, &_gdk_imlib_SavePS, im, file, info);
+}
+
+static gint
+saver_ppm (GdkImlibImage *im, char *file, GdkImlibSaveInfo *info)
+{
+ return save_module_relay ("ppm", &_gdk_imlib_LoadPPM, &_gdk_imlib_SavePPM, im, file, info);
+}
+
+static GdkImlibImage *
+inline_png (unsigned char *data, int data_size)
+{
+ get_module_loader_saver ("png",
+ (void **) &_gdk_imlib_LoadPNG, load_fail_fn,
+ (void **) &_gdk_imlib_SavePNG, save_fail_fn);
+ return _gdk_imlib_inlined_png_to_image (data, data_size);
+}
+
+static GdkImlibImage *
+loader_alpha_png (char *file)
+{
+ get_module_loader_saver ("png",
+ (void **) &_gdk_imlib_LoadPNG, load_fail_fn,
+ (void **) &_gdk_imlib_SavePNG, save_fail_fn);
+ return _gdk_imlib_load_alpha_png (file);
+}
+#endif
+
+
+GdkImlibImage *
+gdk_imlib_inlined_png_to_image(unsigned char *data, int data_size)
+{
+ return _gdk_imlib_inlined_png_to_image (data, data_size);
+}
+
+GdkImlibImage *
+gdk_imlib_load_alpha (char *file)
+{
+ /* We only support png for now */
+ return _gdk_imlib_load_alpha_png (file);
+}