Fix #1076: webp images show up as black
[geeqie.git] / src / image-load.h
index c2e9f18..7c909db 100644 (file)
@@ -1,38 +1,49 @@
 /*
- * Geeqie
- * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2004 John Ellis
+ * Copyright (C) 2008 - 2016 The Geeqie Team
  *
  * Author: John Ellis
  *
- * This software is released under the GNU General Public License (GNU GPL).
- * Please read the included file COPYING for more information.
- * This software comes with no warranty of any kind, use at your own risk!
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
-
 #ifndef IMAGE_LOAD_H
 #define IMAGE_LOAD_H
 
+struct FileData;
+
 #define TYPE_IMAGE_LOADER              (image_loader_get_type())
 
-typedef void (*ImageLoaderBackendCbAreaPrepared)(gpointer loader, gpointer data);
-typedef void (*ImageLoaderBackendCbSize)(gpointer loader, gint width, gint height, gpointer data);
-typedef void (*ImageLoaderBackendCbAreaUpdated)(gpointer loader, guint x, guint y, guint w, guint h, gpointer data);
-
-typedef gpointer (*ImageLoaderBackendFuncLoaderNew)(ImageLoaderBackendCbAreaUpdated, ImageLoaderBackendCbSize, ImageLoaderBackendCbAreaPrepared, gpointer data);
-typedef void (*ImageLoaderBackendFuncSetSize)(gpointer loader, int width, int height);
-typedef gboolean (*ImageLoaderBackendFuncLoad)(gpointer loader, const guchar *buf, gsize count, GError **error); /* optional, load whole image at once */
-typedef gboolean (*ImageLoaderBackendFuncWrite)(gpointer loader, const guchar *buf, gsize count, GError **error);
-typedef GdkPixbuf* (*ImageLoaderBackendFuncGetPixbuf)(gpointer loader);
-typedef gboolean (*ImageLoaderBackendFuncClose)(gpointer loader, GError **error);
-typedef void (*ImageLoaderBackendFuncAbort)(gpointer loader);
-typedef void (*ImageLoaderBackendFuncFree)(gpointer loader);
-typedef gchar* (*ImageLoaderBackendFuncGetFormatName)(gpointer loader);
-typedef gchar** (*ImageLoaderBackendFuncGetFormatMimeTypes)(gpointer loader);
-
-typedef struct _ImageLoaderBackend ImageLoaderBackend;
-struct _ImageLoaderBackend
+using ImageLoaderBackendCbAreaPrepared = void (*)(gpointer, gpointer);
+using ImageLoaderBackendCbSize = void (*)(gpointer, gint, gint, gpointer);
+using ImageLoaderBackendCbAreaUpdated = void (*)(gpointer, guint, guint, guint, guint, gpointer);
+
+using ImageLoaderBackendFuncLoaderNew = gpointer (*)(ImageLoaderBackendCbAreaUpdated, ImageLoaderBackendCbSize, ImageLoaderBackendCbAreaPrepared, gpointer);
+using ImageLoaderBackendFuncSetSize = void (*)(gpointer, int, int);
+using ImageLoaderBackendFuncLoad = gboolean (*)(gpointer, const guchar *, gsize, GError **); /* optional, load whole image at once */
+using ImageLoaderBackendFuncWrite = gboolean (*)(gpointer, const guchar *, gsize, GError **);
+using ImageLoaderBackendFuncGetPixbuf = GdkPixbuf *(*)(gpointer);
+using ImageLoaderBackendFuncClose = gboolean (*)(gpointer, GError **);
+using ImageLoaderBackendFuncAbort = void (*)(gpointer);
+using ImageLoaderBackendFuncFree = void (*)(gpointer);
+using ImageLoaderBackendFuncGetFormatName = gchar *(*)(gpointer);
+using ImageLoaderBackendFuncGetFormatMimeTypes = gchar **(*)(gpointer);
+using ImageLoaderBackendFuncSetPageNum = void (*)(gpointer, gint);
+using ImageLoaderBackendFuncGetPageTotal = gint (*)(gpointer);
+
+struct ImageLoaderBackend
 {
        ImageLoaderBackendFuncLoaderNew loader_new;
        ImageLoaderBackendFuncSetSize set_size;
@@ -44,16 +55,21 @@ struct _ImageLoaderBackend
        ImageLoaderBackendFuncFree free;
        ImageLoaderBackendFuncGetFormatName get_format_name;
        ImageLoaderBackendFuncGetFormatMimeTypes get_format_mime_types;
+       ImageLoaderBackendFuncSetPageNum set_page_num;
+       ImageLoaderBackendFuncGetPageTotal get_page_total;
 };
 
+enum ImageLoaderPreview {
+       IMAGE_LOADER_PREVIEW_NONE = 0,
+       IMAGE_LOADER_PREVIEW_EXIF = 1,
+       IMAGE_LOADER_PREVIEW_LIBRAW = 2
+};
 
-//typedef struct _ImageLoader ImageLoader;
-typedef struct _ImageLoaderClass ImageLoaderClass;
 
-struct _ImageLoader
+struct ImageLoader
 {
        GObject parent;
-       
+
        /*< private >*/
        GdkPixbuf *pixbuf;
        FileData *fd;
@@ -62,7 +78,7 @@ struct _ImageLoader
        gsize bytes_read;
        gsize bytes_total;
 
-       gboolean preview;
+       ImageLoaderPreview preview;
 
        gint requested_width;
        gint requested_height;
@@ -73,19 +89,19 @@ struct _ImageLoader
        gboolean shrunk;
 
        gboolean done;
-       guint idle_id; /* event source id */
+       guint idle_id; /**< event source id */
        gint idle_priority;
 
        gpointer *loader;
        GError *error;
        ImageLoaderBackend backend;
 
-       guint idle_done_id; /* event source id */
+       guint idle_done_id; /**< event source id */
        GList *area_param_list;
        GList *area_param_delayed_list;
-       
+
        gboolean delay_area_ready;
-       
+
        GMutex *data_mutex;
        gboolean stopping;
        gboolean can_destroy;
@@ -97,9 +113,9 @@ struct _ImageLoader
        guint idle_read_loop_count;
 };
 
-struct _ImageLoaderClass {
+struct ImageLoaderClass {
        GObjectClass parent;
-       
+
        /* class members */
        void (*area_ready)(ImageLoader *, guint x, guint y, guint w, guint h, gpointer);
        void (*error)(ImageLoader *, gpointer);
@@ -107,24 +123,31 @@ struct _ImageLoaderClass {
        void (*percent)(ImageLoader *, gdouble, gpointer);
 };
 
-GType image_loader_get_type(void);
+GType image_loader_get_type();
 
 ImageLoader *image_loader_new(FileData *fd);
 
 void image_loader_free(ImageLoader *il);
 
-/* delay area_ready signals */
+/**
+ * @headerfile image_loader_delay_area_ready
+ * delay area_ready signals
+ */
 void image_loader_delay_area_ready(ImageLoader *il, gboolean enable);
 
-/* Speed up loading when you only need at most width x height size image,
+/**
+ * @headerfile image_loader_set_requested_size
+ * Speed up loading when you only need at most width x height size image,
  * only the jpeg GdkPixbuf loader benefits from it - so there is no
  * guarantee that the image will scale down to the requested size..
  */
 void image_loader_set_requested_size(ImageLoader *il, gint width, gint height);
 
-void image_loader_set_buffer_size(ImageLoader *il, guint size);
+void image_loader_set_buffer_size(ImageLoader *il, guint count);
 
-/* this only has effect if used before image_loader_start()
+/**
+ * @headerfile image_loader_set_priority
+ * this only has effect if used before image_loader_start()
  * default is G_PRIORITY_DEFAULT_IDLE
  */
 void image_loader_set_priority(ImageLoader *il, gint priority);
@@ -133,7 +156,6 @@ gboolean image_loader_start(ImageLoader *il);
 
 
 GdkPixbuf *image_loader_get_pixbuf(ImageLoader *il);
-gchar *image_loader_get_format(ImageLoader *il);
 gdouble image_loader_get_percent(ImageLoader *il);
 gboolean image_loader_get_is_done(ImageLoader *il);
 FileData *image_loader_get_fd(ImageLoader *il);