ImageData.h 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. /*
  2. * Copyright (c) 2020-2022, Andreas Kling <andreas@ladybird.org>
  3. * Copyright (c) 2024, Kenneth Myhra <kennethmyhra@serenityos.org>
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause
  6. */
  7. #pragma once
  8. #include <LibGfx/Forward.h>
  9. #include <LibWeb/Bindings/ImageDataPrototype.h>
  10. #include <LibWeb/Bindings/PlatformObject.h>
  11. namespace Web::HTML {
  12. struct ImageDataSettings {
  13. Bindings::PredefinedColorSpace color_space;
  14. };
  15. class ImageData final : public Bindings::PlatformObject {
  16. WEB_PLATFORM_OBJECT(ImageData, Bindings::PlatformObject);
  17. GC_DECLARE_ALLOCATOR(ImageData);
  18. public:
  19. [[nodiscard]] static WebIDL::ExceptionOr<GC::Ref<ImageData>> create(JS::Realm&, u32 sw, u32 sh, Optional<ImageDataSettings> const& settings = {});
  20. [[nodiscard]] static WebIDL::ExceptionOr<GC::Ref<ImageData>> create(JS::Realm&, GC::Root<WebIDL::BufferSource> const& data, u32 sw, Optional<u32> sh = {}, Optional<ImageDataSettings> const& settings = {});
  21. [[nodiscard]] static WebIDL::ExceptionOr<GC::Ref<ImageData>> construct_impl(JS::Realm&, u32 sw, u32 sh, Optional<ImageDataSettings> const& settings = {});
  22. [[nodiscard]] static WebIDL::ExceptionOr<GC::Ref<ImageData>> construct_impl(JS::Realm&, GC::Root<WebIDL::BufferSource> const& data, u32 sw, Optional<u32> sh = {}, Optional<ImageDataSettings> const& settings = {});
  23. virtual ~ImageData() override;
  24. unsigned width() const;
  25. unsigned height() const;
  26. Gfx::Bitmap& bitmap() { return m_bitmap; }
  27. Gfx::Bitmap const& bitmap() const { return m_bitmap; }
  28. JS::Uint8ClampedArray* data();
  29. const JS::Uint8ClampedArray* data() const;
  30. private:
  31. ImageData(JS::Realm&, NonnullRefPtr<Gfx::Bitmap>, GC::Ref<JS::Uint8ClampedArray>);
  32. virtual void initialize(JS::Realm&) override;
  33. virtual void visit_edges(Cell::Visitor&) override;
  34. NonnullRefPtr<Gfx::Bitmap> m_bitmap;
  35. GC::Ref<JS::Uint8ClampedArray> m_data;
  36. };
  37. }