/* * Copyright (c) 2023, MacDue * Copyright (c) 2025, Shannon Booth * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace Web::HTML { class CanvasPatternPaintStyle final : public Gfx::PaintStyle { public: enum class Repetition { Repeat, RepeatX, RepeatY, NoRepeat }; static ErrorOr> create(CanvasImageSource image, Repetition repetition) { return adopt_nonnull_ref_or_enomem(new (nothrow) CanvasPatternPaintStyle(move(image), repetition)); } virtual void paint(Gfx::IntRect physical_bounding_box, PaintFunction paint) const override; private: CanvasPatternPaintStyle(CanvasImageSource image, Repetition repetition) : m_image(move(image)) , m_repetition(repetition) { } CanvasImageSource m_image; Repetition m_repetition { Repetition::Repeat }; }; class CanvasPattern final : public Bindings::PlatformObject { WEB_PLATFORM_OBJECT(CanvasPattern, Bindings::PlatformObject); GC_DECLARE_ALLOCATOR(CanvasPattern); public: static WebIDL::ExceptionOr> create(JS::Realm&, CanvasImageSource const& image, StringView repetition); ~CanvasPattern(); NonnullRefPtr to_gfx_paint_style() { return m_pattern; } private: CanvasPattern(JS::Realm&, CanvasPatternPaintStyle&); virtual void initialize(JS::Realm&) override; NonnullRefPtr m_pattern; }; }