]> git.tdb.fi Git - libs/gui.git/commitdiff
Add a helper class for registering image loaders
authorMikko Rasa <tdb@tdb.fi>
Fri, 19 Dec 2014 03:24:52 +0000 (05:24 +0200)
committerMikko Rasa <tdb@tdb.fi>
Fri, 19 Dec 2014 03:25:42 +0000 (05:25 +0200)
source/graphics/devil/devilloader.cpp
source/graphics/devil/devilloader.h
source/graphics/imageloader.h
source/graphics/jpeg/jpegloader.cpp
source/graphics/jpeg/jpegloader.h
source/graphics/png/pngloader.cpp
source/graphics/png/pngloader.h
source/graphics/quartz/quartzloader.cpp
source/graphics/quartz/quartzloader.h

index 131b6ba1dcfbcebbf1bda7d4e50589dd42ca6033..ab962d1d503352fbc5a44911c48817377241f872 100644 (file)
@@ -74,8 +74,6 @@ std::string error_string(ILenum err)
 namespace Msp {
 namespace Graphics {
 
-ImageLoader::Register<DevilLoader> DevilLoader::reg;
-
 DevilLoader::DevilLoader(IO::Seekable &i):
        io(i)
 {
index daab2a2bdc64b763575cc03886dfd11df9d52154..e94a31b4e7dfd6fad0f3753439aa287a99313643 100644 (file)
@@ -6,14 +6,12 @@
 namespace Msp {
 namespace Graphics {
 
-class DevilLoader: public ImageLoader
+class DevilLoader: public RegisteredImageLoader<DevilLoader>
 {
 private:
        IO::Base &io;
        unsigned id;
 
-       static Register<DevilLoader> reg;
-
 public:
        DevilLoader(IO::Seekable &);
        virtual ~DevilLoader();
index c06a7592fcf75bc1cf9ea918ceae470424ad785d..85e6b5200479a3f2814403b4b2a532fd06d1723d 100644 (file)
@@ -23,7 +23,7 @@ public:
 
 class ImageLoader
 {
-private:
+protected:
        class RegisterBase
        {
        protected:
@@ -36,16 +36,6 @@ private:
                virtual ImageLoader *create(IO::Seekable &) const = 0;
        };
 
-protected:
-       template<typename T>
-       class Register: RegisterBase
-       {
-       public:
-               virtual unsigned get_signature_size() const { return T::get_signature_size(); }
-               virtual bool detect(const std::string &s) const { return T::detect(s); }
-               virtual T *create(IO::Seekable &io) const { return new T(io); }
-       };
-
 private:
        IO::Base *source;
 
@@ -64,6 +54,28 @@ public:
        virtual void load(Image::Data &) = 0;
 };
 
+
+template<typename T>
+class RegisteredImageLoader: public ImageLoader
+{
+private:
+       class Register: public RegisterBase
+       {
+       public:
+               virtual unsigned get_signature_size() const { return T::get_signature_size(); }
+               virtual bool detect(const std::string &s) const { return T::detect(s); }
+               virtual ImageLoader *create(IO::Seekable &io) const { return new T(io); }
+       };
+
+       static Register reg;
+
+protected:
+       RegisteredImageLoader() { (void)reg; }
+};
+
+template<typename T>
+typename RegisteredImageLoader<T>::Register RegisteredImageLoader<T>::reg;
+
 } // namespace Graphics
 } // namespace Msp
 
index 9aadcb9e8daa849c922d6a5269df4dc34eae9ffc..844446ca50b8b91c33bf16ca7c2a61a4fc9d17eb 100644 (file)
@@ -84,8 +84,6 @@ struct JpegLoader::Private
 };
 
 
-ImageLoader::Register<JpegLoader> JpegLoader::reg;
-
 JpegLoader::JpegLoader(IO::Seekable &io):
        priv(new Private)
 {
index d45e599825abd150f10cce35644a2335bbda93e6..b93d5bcf128af55099d433a982b1e1bbc1c30130 100644 (file)
@@ -6,15 +6,13 @@
 namespace Msp {
 namespace Graphics {
 
-class JpegLoader: public ImageLoader
+class JpegLoader: public RegisteredImageLoader<JpegLoader>
 {
 private:
        struct Private;
 
        Private *priv;
 
-       static Register<JpegLoader> reg;
-
 public:
        JpegLoader(IO::Seekable &);
        virtual ~JpegLoader();
index 35e6a971de3981bbd7b3deb501b5359bea3199fb..ede91b0c37be3615ae7ca9e714d93c0d3aa10d67 100644 (file)
@@ -31,7 +31,6 @@ struct PngLoader::Private
        png_info *info;
 };
 
-ImageLoader::Register<PngLoader> PngLoader::reg;
 
 PngLoader::PngLoader(IO::Base &io, unsigned sig_bytes):
        priv(new Private)
index 683f4d37389d3e98189b7edeaf41876c716a6f94..de8b53537c4b527526b109a0b66e63fbdf5e8e59 100644 (file)
@@ -6,15 +6,13 @@
 namespace Msp {
 namespace Graphics {
 
-class PngLoader: public ImageLoader
+class PngLoader: public RegisteredImageLoader<PngLoader>
 {
 private:
        struct Private;
 
        Private *priv;
 
-       static Register<PngLoader> reg;
-
 public:
        PngLoader(IO::Base &, unsigned = 0);
        virtual ~PngLoader();
index d1baaef549761aac2b50157ab0f4392dc3f09249..2821190a465f880f3cedbf83005779d431b2f511 100644 (file)
@@ -55,8 +55,6 @@ struct QuartzLoader::Private
 };
 
 
-ImageLoader::Register<QuartzLoader> QuartzLoader::reg;
-
 QuartzLoader::QuartzLoader(IO::Seekable &io):
        priv(new Private)
 {
index d3bef7b7b3d79d6d2c3a172ae8b85cf4d79c49d2..963e45c4c7ba0e89a1bb7df879c08e0e76e45f08 100644 (file)
@@ -6,15 +6,13 @@
 namespace Msp {
 namespace Graphics {
 
-class QuartzLoader: public ImageLoader
+class QuartzLoader: public RegisteredImageLoader<QuartzLoader>
 {
 private:
        struct Private;
 
        Private *priv;
 
-       static Register<QuartzLoader> reg;
-
 public:
        QuartzLoader(IO::Seekable &);
        virtual ~QuartzLoader();