#pragma once #include #include #include #include class GraphicsBitmap; class ImageLoaderPlugin { public: virtual ~ImageLoaderPlugin() {} virtual Size size() = 0; virtual RefPtr bitmap() = 0; protected: ImageLoaderPlugin() {} }; class ImageLoader : public RefCounted { public: static NonnullRefPtr create(const u8* data, size_t size) { return adopt(*new ImageLoader(data, size)); } ~ImageLoader(); Size size() const { return m_plugin->size(); } int width() const { return size().width(); } int height() const { return size().height(); } RefPtr bitmap() const { return m_plugin->bitmap(); } private: ImageLoader(const u8*, size_t); mutable OwnPtr m_plugin; };