diff --git a/Userland/Libraries/LibWeb/HTML/Canvas/CanvasImageData.h b/Userland/Libraries/LibWeb/HTML/Canvas/CanvasImageData.h
new file mode 100644
index 0000000000..28c182f1f4
--- /dev/null
+++ b/Userland/Libraries/LibWeb/HTML/Canvas/CanvasImageData.h
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2022, Sam Atkins
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#pragma once
+
+#include
+
+namespace Web::HTML {
+
+// https://html.spec.whatwg.org/multipage/canvas.html#canvasdrawpath
+class CanvasImageData {
+public:
+ virtual ~CanvasImageData() = default;
+
+ virtual RefPtr create_image_data(int width, int height) const = 0;
+ virtual DOM::ExceptionOr> get_image_data(int x, int y, int width, int height) const = 0;
+ virtual void put_image_data(ImageData const&, float x, float y) = 0;
+
+protected:
+ CanvasImageData() = default;
+};
+
+}
diff --git a/Userland/Libraries/LibWeb/HTML/Canvas/CanvasImageData.idl b/Userland/Libraries/LibWeb/HTML/Canvas/CanvasImageData.idl
new file mode 100644
index 0000000000..9be76e6325
--- /dev/null
+++ b/Userland/Libraries/LibWeb/HTML/Canvas/CanvasImageData.idl
@@ -0,0 +1,14 @@
+#import
+
+// https://html.spec.whatwg.org/multipage/canvas.html#canvasimagedata
+interface mixin CanvasImageData {
+ // FIXME: Should be `ImageData createImageData([EnforceRange] long sw, [EnforceRange] long sh, optional ImageDataSettings settings = {});`
+ ImageData createImageData(long sw, long sh);
+ // FIXME: ImageData createImageData(ImageData imagedata);
+
+ // FIXME: Should be `ImageData getImageData([EnforceRange] long sx, [EnforceRange] long sy, [EnforceRange] long sw, [EnforceRange] long sh, optional ImageDataSettings settings = {});`
+ ImageData getImageData(long sx, long sy, long sw, long sh);
+
+ undefined putImageData(ImageData imagedata, [EnforceRange] long dx, [EnforceRange] long dy);
+ // FIXME: undefined putImageData(ImageData imagedata, [EnforceRange] long dx, [EnforceRange] long dy, [EnforceRange] long dirtyX, [EnforceRange] long dirtyY, [EnforceRange] long dirtyWidth, [EnforceRange] long dirtyHeight);
+};
diff --git a/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.h b/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.h
index 89c518a6cf..936a3182ba 100644
--- a/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.h
+++ b/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.h
@@ -19,6 +19,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -44,7 +45,8 @@ class CanvasRenderingContext2D
, public CanvasRect
, public CanvasDrawPath
, public CanvasText
- , public CanvasDrawImage {
+ , public CanvasDrawImage
+ , public CanvasImageData {
AK_MAKE_NONCOPYABLE(CanvasRenderingContext2D);
AK_MAKE_NONMOVABLE(CanvasRenderingContext2D);
@@ -74,9 +76,9 @@ public:
virtual void fill(String const& fill_rule) override;
virtual void fill(Path2D& path, String const& fill_rule) override;
- RefPtr create_image_data(int width, int height) const;
- DOM::ExceptionOr> get_image_data(int x, int y, int width, int height) const;
- void put_image_data(ImageData const&, float x, float y);
+ virtual RefPtr create_image_data(int width, int height) const override;
+ virtual DOM::ExceptionOr> get_image_data(int x, int y, int width, int height) const override;
+ virtual void put_image_data(ImageData const&, float x, float y) override;
virtual void reset_to_default_state() override;
diff --git a/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.idl b/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.idl
index 35559c34b8..efcf607892 100644
--- a/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.idl
+++ b/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.idl
@@ -1,8 +1,8 @@
#import
-#import
#import
#import
#import
+#import
#import
#import
#import
@@ -15,10 +15,6 @@ interface CanvasRenderingContext2D {
attribute double lineWidth;
- ImageData createImageData(long sw, long sh);
- ImageData getImageData(long sx, long sy, long sw, long sh);
- undefined putImageData(ImageData imagedata, double dx, double dy);
-
[ImplementedAs=canvas_for_binding] readonly attribute HTMLCanvasElement canvas;
};
@@ -30,4 +26,5 @@ CanvasRenderingContext2D includes CanvasRect;
CanvasRenderingContext2D includes CanvasDrawPath;
CanvasRenderingContext2D includes CanvasText;
CanvasRenderingContext2D includes CanvasDrawImage;
+CanvasRenderingContext2D includes CanvasImageData;
CanvasRenderingContext2D includes CanvasPath;