X-Git-Url: http://git.tdb.fi/?p=libs%2Fgui.git;a=blobdiff_plain;f=source%2Fgraphics%2Fimageloader.h;h=85e6b5200479a3f2814403b4b2a532fd06d1723d;hp=c06a7592fcf75bc1cf9ea918ceae470424ad785d;hb=0885a7e155653acbbc1b15eff590feabbb6f00d9;hpb=130828739f6b0d3934bf1e29ed2d87d9acf22e89 diff --git a/source/graphics/imageloader.h b/source/graphics/imageloader.h index c06a759..85e6b52 100644 --- a/source/graphics/imageloader.h +++ b/source/graphics/imageloader.h @@ -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 - 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 +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 RegisteredImageLoader::Register RegisteredImageLoader::reg; + } // namespace Graphics } // namespace Msp