Convert ImageLoaderBackend to interface and backends to implementations
[geeqie.git] / src / image-load-jpeg.h
index e60790d..8bb5091 100644 (file)
 #include <config.h>
 
 #if HAVE_JPEG
+#include <memory>
+
+#include <gdk-pixbuf/gdk-pixbuf.h>
 #include <glib.h>
 
-struct ImageLoaderBackend;
+#include "image-load.h"
+
+struct ImageLoaderJpeg : public ImageLoaderBackend
+{
+public:
+       ~ImageLoaderJpeg() override;
+
+       void init(AreaUpdatedCb area_updated_cb, SizePreparedCb size_prepared_cb, AreaPreparedCb area_prepared_cb, gpointer data) override;
+       void set_size(int width, int height) override;
+       gboolean write(const guchar *buf, gsize &chunk_size, gsize count, GError **error) override;
+       GdkPixbuf *get_pixbuf() override;
+       void abort() override;
+       gchar *get_format_name() override;
+       gchar **get_format_mime_types() override;
+
+private:
+       AreaUpdatedCb area_updated_cb;
+       SizePreparedCb size_prepared_cb;
+       AreaPreparedCb area_prepared_cb;
+
+       gpointer data;
+
+       GdkPixbuf *pixbuf;
+       guint requested_width;
+       guint requested_height;
 
-gboolean image_loader_jpeg_write(gpointer loader, const guchar *buf, gsize &chunk_size, gsize count, GError **error);
+       gboolean aborted;
+       gboolean stereo;
+};
 
-void image_loader_backend_set_jpeg(ImageLoaderBackend *funcs);
+std::unique_ptr<ImageLoaderBackend> get_image_loader_backend_jpeg();
 #endif
 
 #endif