Serenity Operating System
at master 60 lines 1.6 kB view raw
1/* 2 * Copyright (c) 2023, MacDue <macdue@dueutil.tech> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#pragma once 8 9#include <LibGfx/PaintStyle.h> 10#include <LibWeb/Bindings/PlatformObject.h> 11#include <LibWeb/HTML/Canvas/CanvasDrawImage.h> 12 13namespace Web::HTML { 14 15class CanvasPatternPaintStyle final : public Gfx::PaintStyle { 16public: 17 enum class Repetition { 18 Repeat, 19 RepeatX, 20 RepeatY, 21 NoRepeat 22 }; 23 24 static ErrorOr<NonnullRefPtr<CanvasPatternPaintStyle>> create(Gfx::Bitmap const& bitmap, Repetition repetition) 25 { 26 return adopt_nonnull_ref_or_enomem(new (nothrow) CanvasPatternPaintStyle(bitmap, repetition)); 27 } 28 29 virtual void paint(Gfx::IntRect physical_bounding_box, PaintFunction paint) const override; 30 31private: 32 CanvasPatternPaintStyle(Gfx::Bitmap const& bitmap, Repetition repetition) 33 : m_bitmap(bitmap) 34 , m_repetition(repetition) 35 { 36 } 37 38 NonnullRefPtr<Gfx::Bitmap const> m_bitmap; 39 Repetition m_repetition { Repetition::Repeat }; 40}; 41 42class CanvasPattern final : public Bindings::PlatformObject { 43 WEB_PLATFORM_OBJECT(CanvasPattern, Bindings::PlatformObject); 44 45public: 46 static WebIDL::ExceptionOr<JS::GCPtr<CanvasPattern>> create(JS::Realm&, CanvasImageSource const& image, StringView repetition); 47 48 ~CanvasPattern(); 49 50 NonnullRefPtr<Gfx::PaintStyle> to_gfx_paint_style() { return m_pattern; } 51 52private: 53 CanvasPattern(JS::Realm&, CanvasPatternPaintStyle&); 54 55 virtual JS::ThrowCompletionOr<void> initialize(JS::Realm&) override; 56 57 NonnullRefPtr<CanvasPatternPaintStyle> m_pattern; 58}; 59 60}