Forráskód Böngészése

LibWeb: Extract CanvasImageData class from CRC2D

Sam Atkins 3 éve
szülő
commit
53b9f36413

+ 26 - 0
Userland/Libraries/LibWeb/HTML/Canvas/CanvasImageData.h

@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2022, Sam Atkins <atkinssj@serenityos.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#pragma once
+
+#include <LibWeb/HTML/ImageData.h>
+
+namespace Web::HTML {
+
+// https://html.spec.whatwg.org/multipage/canvas.html#canvasdrawpath
+class CanvasImageData {
+public:
+    virtual ~CanvasImageData() = default;
+
+    virtual RefPtr<ImageData> create_image_data(int width, int height) const = 0;
+    virtual DOM::ExceptionOr<RefPtr<ImageData>> 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;
+};
+
+}

+ 14 - 0
Userland/Libraries/LibWeb/HTML/Canvas/CanvasImageData.idl

@@ -0,0 +1,14 @@
+#import <HTML/ImageData.idl>
+
+// 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);
+};

+ 6 - 4
Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.h

@@ -19,6 +19,7 @@
 #include <LibWeb/HTML/Canvas/CanvasDrawImage.h>
 #include <LibWeb/HTML/Canvas/CanvasDrawPath.h>
 #include <LibWeb/HTML/Canvas/CanvasFillStrokeStyles.h>
+#include <LibWeb/HTML/Canvas/CanvasImageData.h>
 #include <LibWeb/HTML/Canvas/CanvasPath.h>
 #include <LibWeb/HTML/Canvas/CanvasRect.h>
 #include <LibWeb/HTML/Canvas/CanvasState.h>
@@ -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<ImageData> create_image_data(int width, int height) const;
-    DOM::ExceptionOr<RefPtr<ImageData>> get_image_data(int x, int y, int width, int height) const;
-    void put_image_data(ImageData const&, float x, float y);
+    virtual RefPtr<ImageData> create_image_data(int width, int height) const override;
+    virtual DOM::ExceptionOr<RefPtr<ImageData>> 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;
 

+ 2 - 5
Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.idl

@@ -1,8 +1,8 @@
 #import <HTML/HTMLCanvasElement.idl>
-#import <HTML/ImageData.idl>
 #import <HTML/Canvas/CanvasDrawImage.idl>
 #import <HTML/Canvas/CanvasDrawPath.idl>
 #import <HTML/Canvas/CanvasFillStrokeStyles.idl>
+#import <HTML/Canvas/CanvasImageData.idl>
 #import <HTML/Canvas/CanvasPath.idl>
 #import <HTML/Canvas/CanvasRect.idl>
 #import <HTML/Canvas/CanvasState.idl>
@@ -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;