/* * Copyright (c) 2020-2022, Andreas Kling * Copyright (c) 2024-2025, Kenneth Myhra * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include namespace Web::HTML { struct ImageDataSettings { Bindings::PredefinedColorSpace color_space; }; class ImageData final : public Bindings::PlatformObject , public Bindings::Serializable { WEB_PLATFORM_OBJECT(ImageData, Bindings::PlatformObject); GC_DECLARE_ALLOCATOR(ImageData); public: [[nodiscard]] static GC::Ref create(JS::Realm&); [[nodiscard]] static WebIDL::ExceptionOr> create(JS::Realm&, u32 sw, u32 sh, Optional const& settings = {}); [[nodiscard]] static WebIDL::ExceptionOr> create(JS::Realm&, GC::Root const& data, u32 sw, Optional sh = {}, Optional const& settings = {}); [[nodiscard]] static WebIDL::ExceptionOr> construct_impl(JS::Realm&, u32 sw, u32 sh, Optional const& settings = {}); [[nodiscard]] static WebIDL::ExceptionOr> construct_impl(JS::Realm&, GC::Root const& data, u32 sw, Optional sh = {}, Optional const& settings = {}); virtual ~ImageData() override; WebIDL::UnsignedLong width() const; WebIDL::UnsignedLong height() const; Gfx::Bitmap& bitmap() { return *m_bitmap; } Gfx::Bitmap const& bitmap() const { return *m_bitmap; } JS::Uint8ClampedArray* data(); const JS::Uint8ClampedArray* data() const; Bindings::PredefinedColorSpace color_space() const { return m_color_space; } virtual StringView interface_name() const override { return "ImageData"sv; } virtual WebIDL::ExceptionOr serialization_steps(SerializationRecord& serialized, bool for_storage, SerializationMemory&) override; virtual WebIDL::ExceptionOr deserialization_steps(ReadonlySpan const& serialized, size_t& position, DeserializationMemory&) override; private: [[nodiscard]] static WebIDL::ExceptionOr> initialize(JS::Realm&, u32 rows, u32 pixels_per_row, Optional const&, GC::Ptr = {}, Optional = {}); explicit ImageData(JS::Realm&); ImageData(JS::Realm&, NonnullRefPtr, GC::Ref, Bindings::PredefinedColorSpace); virtual void initialize(JS::Realm&) override; virtual void visit_edges(Cell::Visitor&) override; RefPtr m_bitmap; Bindings::PredefinedColorSpace m_color_space { Bindings::PredefinedColorSpace::Srgb }; GC::Ptr m_data; }; }