GraphicsBitmap.h 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #pragma once
  2. #include "Color.h"
  3. #include "Rect.h"
  4. #include "Size.h"
  5. #include <AK/Retainable.h>
  6. #include <AK/RetainPtr.h>
  7. #include <AK/AKString.h>
  8. class Region;
  9. class GraphicsBitmap : public Retainable<GraphicsBitmap> {
  10. public:
  11. static RetainPtr<GraphicsBitmap> create(const Size&);
  12. static RetainPtr<GraphicsBitmap> create_wrapper(const Size&, RGBA32*);
  13. static RetainPtr<GraphicsBitmap> load_from_file(const String& path, const Size&);
  14. static RetainPtr<GraphicsBitmap> create_with_shared_buffer(int shared_buffer_id, const Size&, RGBA32* buffer = nullptr);
  15. ~GraphicsBitmap();
  16. RGBA32* scanline(int y);
  17. const RGBA32* scanline(int y) const;
  18. Rect rect() const { return { {}, m_size }; }
  19. Size size() const { return m_size; }
  20. int width() const { return m_size.width(); }
  21. int height() const { return m_size.height(); }
  22. size_t pitch() const { return m_pitch; }
  23. #ifdef KERNEL
  24. Region* server_region() { return m_server_region; }
  25. #endif
  26. int shared_buffer_id() const { return m_shared_buffer_id; }
  27. private:
  28. #ifdef KERNEL
  29. GraphicsBitmap(const Size&);
  30. #endif
  31. GraphicsBitmap(const Size&, RGBA32*);
  32. GraphicsBitmap(int shared_buffer_id, const Size&, RGBA32*);
  33. Size m_size;
  34. RGBA32* m_data { nullptr };
  35. size_t m_pitch { 0 };
  36. bool m_mmaped { false };
  37. int m_shared_buffer_id { -1 };
  38. #ifdef KERNEL
  39. Region* m_server_region { nullptr };
  40. #endif
  41. };
  42. inline RGBA32* GraphicsBitmap::scanline(int y)
  43. {
  44. return reinterpret_cast<RGBA32*>((((byte*)m_data) + (y * m_pitch)));
  45. }
  46. inline const RGBA32* GraphicsBitmap::scanline(int y) const
  47. {
  48. return reinterpret_cast<const RGBA32*>((((const byte*)m_data) + (y * m_pitch)));
  49. }