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;