/* * Copyright (c) 2025, Ladybird contributors * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace Web::HTML { class OffscreenCanvasRenderingContext2D : public Bindings::PlatformObject , public CanvasState , public CanvasTransform , public CanvasFillStrokeStyles , public CanvasShadowStyles , public CanvasFilters , public CanvasRect , public CanvasDrawPath , public CanvasText , public CanvasDrawImage , public CanvasImageData , public CanvasImageSmoothing , public CanvasCompositing , public CanvasSettings , public CanvasPathDrawingStyles , public CanvasTextDrawingStyles , public CanvasPath { WEB_PLATFORM_OBJECT(OffscreenCanvasRenderingContext2D, Bindings::PlatformObject); GC_DECLARE_ALLOCATOR(OffscreenCanvasRenderingContext2D); public: [[nodiscard]] static JS::ThrowCompletionOr> create(JS::Realm&, OffscreenCanvas&, JS::Value); virtual ~OffscreenCanvasRenderingContext2D() override; GC::Ref canvas(); virtual void fill_rect(float x, float y, float width, float height) override; virtual void stroke_rect(float x, float y, float width, float height) override; virtual void clear_rect(float x, float y, float width, float height) override; virtual WebIDL::ExceptionOr draw_image_internal(CanvasImageSource const&, float source_x, float source_y, float source_width, float source_height, float destination_x, float destination_y, float destination_width, float destination_height) override; virtual void begin_path() override; virtual void stroke() override; virtual void stroke(Path2D const& path) override; virtual void fill_text(StringView, float x, float y, Optional max_width) override; virtual void stroke_text(StringView, float x, float y, Optional max_width) override; virtual void fill(StringView fill_rule) override; virtual void fill(Path2D& path, StringView fill_rule) override; virtual WebIDL::ExceptionOr> create_image_data(int width, int height, Optional const& settings = {}) const override; virtual WebIDL::ExceptionOr> create_image_data(ImageData const& image_data) const override; virtual WebIDL::ExceptionOr> get_image_data(int x, int y, int width, int height, Optional const& settings = {}) const override; virtual void put_image_data(ImageData&, float x, float y) override; virtual void reset_to_default_state() override; virtual CanvasRenderingContext2DSettings get_context_attributes() const override { return m_context_attributes; } virtual GC::Ref measure_text(StringView text) override; virtual void clip(StringView fill_rule) override; virtual void clip(Path2D& path, StringView fill_rule) override; virtual bool is_point_in_path(double x, double y, StringView fill_rule) override; virtual bool is_point_in_path(Path2D const& path, double x, double y, StringView fill_rule) override; virtual bool image_smoothing_enabled() const override; virtual void set_image_smoothing_enabled(bool) override; virtual Bindings::ImageSmoothingQuality image_smoothing_quality() const override; virtual void set_image_smoothing_quality(Bindings::ImageSmoothingQuality) override; virtual float global_alpha() const override; virtual void set_global_alpha(float) override; virtual String global_composite_operation() const override; virtual void set_global_composite_operation(String) override; virtual String filter() const override; virtual void set_filter(String) override; virtual float shadow_offset_x() const override; virtual void set_shadow_offset_x(float) override; virtual float shadow_offset_y() const override; virtual void set_shadow_offset_y(float) override; virtual float shadow_blur() const override; virtual void set_shadow_blur(float) override; virtual String shadow_color() const override; virtual void set_shadow_color(String) override; OffscreenCanvas& canvas_element(); OffscreenCanvas const& canvas_element() const; [[nodiscard]] Gfx::Painter* painter(); void set_size(Gfx::IntSize const&); private: explicit OffscreenCanvasRenderingContext2D(JS::Realm&, OffscreenCanvas&, CanvasRenderingContext2DSettings); virtual void initialize(JS::Realm&) override; virtual void visit_edges(Cell::Visitor&) override; virtual Gfx::Painter* painter_for_canvas_state() override { dbgln("(STUBBED) OffscreenCanvasRenderingContext2D::painter_for_canvas_state()"); return nullptr; } virtual Gfx::Path& path_for_canvas_state() override { return path(); } GC::Ref m_canvas; Gfx::IntSize m_size; CanvasRenderingContext2DSettings m_context_attributes; }; }