ImageDecoder.h 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #pragma once
  2. #include <AK/NonnullRefPtr.h>
  3. #include <AK/OwnPtr.h>
  4. #include <AK/RefCounted.h>
  5. #include <LibDraw/Size.h>
  6. class GraphicsBitmap;
  7. class ImageDecoderPlugin {
  8. public:
  9. virtual ~ImageDecoderPlugin() {}
  10. virtual Size size() = 0;
  11. virtual RefPtr<GraphicsBitmap> bitmap() = 0;
  12. virtual void set_volatile() = 0;
  13. [[nodiscard]] virtual bool set_nonvolatile() = 0;
  14. protected:
  15. ImageDecoderPlugin() {}
  16. };
  17. class ImageDecoder : public RefCounted<ImageDecoder> {
  18. public:
  19. static NonnullRefPtr<ImageDecoder> create(const u8* data, size_t size) { return adopt(*new ImageDecoder(data, size)); }
  20. ~ImageDecoder();
  21. Size size() const { return m_plugin->size(); }
  22. int width() const { return size().width(); }
  23. int height() const { return size().height(); }
  24. RefPtr<GraphicsBitmap> bitmap() const { return m_plugin->bitmap(); }
  25. void set_volatile() { m_plugin->set_volatile(); }
  26. [[nodiscard]] bool set_nonvolatile() { return m_plugin->set_nonvolatile(); }
  27. private:
  28. ImageDecoder(const u8*, size_t);
  29. mutable OwnPtr<ImageDecoderPlugin> m_plugin;
  30. };