summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibWeb/HTML/CanvasPattern.h
diff options
context:
space:
mode:
authorMacDue <macdue@dueutil.tech>2023-02-02 20:47:46 +0000
committerAndreas Kling <kling@serenityos.org>2023-02-03 20:36:21 +0100
commitf74e2da87504e5cc7f57a37b39db0660c985b911 (patch)
tree17ade403de199f2f159979642fa69f305678d39c /Userland/Libraries/LibWeb/HTML/CanvasPattern.h
parent0c313c586bcde745315bdeb1c438b988052c7a6a (diff)
downloadserenity-f74e2da87504e5cc7f57a37b39db0660c985b911.zip
LibWeb: Implement CanvasRenderingContext2D.createPattern()
This is a first pass at implementing CRC2D.createPattern() and the associated CanvasPattern object. This implementation only works for a few of the required image sources [like CRC2D.drawImage()], and does not yet support transforms. Other than that it supports everything else (which is mainly the various repeat modes).
Diffstat (limited to 'Userland/Libraries/LibWeb/HTML/CanvasPattern.h')
-rw-r--r--Userland/Libraries/LibWeb/HTML/CanvasPattern.h60
1 files changed, 60 insertions, 0 deletions
diff --git a/Userland/Libraries/LibWeb/HTML/CanvasPattern.h b/Userland/Libraries/LibWeb/HTML/CanvasPattern.h
new file mode 100644
index 0000000000..d8c7fc10f8
--- /dev/null
+++ b/Userland/Libraries/LibWeb/HTML/CanvasPattern.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2023, MacDue <macdue@dueutil.tech>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#pragma once
+
+#include <LibGfx/PaintStyle.h>
+#include <LibWeb/Bindings/PlatformObject.h>
+#include <LibWeb/HTML/Canvas/CanvasDrawImage.h>
+
+namespace Web::HTML {
+
+class CanvasPatternPaintStyle final : public Gfx::PaintStyle {
+public:
+ enum class Repetition {
+ Repeat,
+ RepeatX,
+ RepeatY,
+ NoRepeat
+ };
+
+ static NonnullRefPtr<CanvasPatternPaintStyle> create(Gfx::Bitmap const& bitmap, Repetition repetition)
+ {
+ return adopt_ref(*new CanvasPatternPaintStyle(bitmap, repetition));
+ }
+
+ virtual void paint(Gfx::IntRect physical_bounding_box, PaintFunction paint) const override;
+
+private:
+ CanvasPatternPaintStyle(Gfx::Bitmap const& bitmap, Repetition repetition)
+ : m_bitmap(bitmap)
+ , m_repetition(repetition)
+ {
+ }
+
+ NonnullRefPtr<Gfx::Bitmap const> m_bitmap;
+ Repetition m_repetition { Repetition::Repeat };
+};
+
+class CanvasPattern final : public Bindings::PlatformObject {
+ WEB_PLATFORM_OBJECT(CanvasPattern, Bindings::PlatformObject);
+
+public:
+ static WebIDL::ExceptionOr<JS::GCPtr<CanvasPattern>> create(JS::Realm&, CanvasImageSource const& image, StringView repetition);
+
+ ~CanvasPattern();
+
+ NonnullRefPtr<Gfx::PaintStyle> to_gfx_paint_style() { return m_pattern; }
+
+private:
+ CanvasPattern(JS::Realm&, CanvasPatternPaintStyle&);
+
+ virtual JS::ThrowCompletionOr<void> initialize(JS::Realm&) override;
+
+ NonnullRefPtr<CanvasPatternPaintStyle> m_pattern;
+};
+
+}