diff --git a/src/browser/tests/canvas/canvas_rendering_context_2d.html b/src/browser/tests/canvas/canvas_rendering_context_2d.html
index a6765d88..e065b81f 100644
--- a/src/browser/tests/canvas/canvas_rendering_context_2d.html
+++ b/src/browser/tests/canvas/canvas_rendering_context_2d.html
@@ -89,6 +89,41 @@
}
+
+
+
+
+
+
diff --git a/src/browser/webapi/ImageData.zig b/src/browser/webapi/ImageData.zig
index abb5abd5..e25e2dd6 100644
--- a/src/browser/webapi/ImageData.zig
+++ b/src/browser/webapi/ImageData.zig
@@ -52,7 +52,7 @@ pub const ConstructorSettings = struct {
/// ```
///
/// We currently support only the first 2.
-pub fn constructor(
+pub fn init(
width: u32,
height: u32,
maybe_settings: ?ConstructorSettings,
@@ -106,7 +106,7 @@ pub const JsApi = struct {
pub var class_id: bridge.ClassId = undefined;
};
- pub const constructor = bridge.constructor(ImageData.constructor, .{ .dom_exception = true });
+ pub const constructor = bridge.constructor(ImageData.init, .{ .dom_exception = true });
pub const colorSpace = bridge.property("srgb", .{ .template = false, .readonly = true });
pub const pixelFormat = bridge.property("rgba-unorm8", .{ .template = false, .readonly = true });
diff --git a/src/browser/webapi/canvas/CanvasRenderingContext2D.zig b/src/browser/webapi/canvas/CanvasRenderingContext2D.zig
index 056100ee..a2127e5b 100644
--- a/src/browser/webapi/canvas/CanvasRenderingContext2D.zig
+++ b/src/browser/webapi/canvas/CanvasRenderingContext2D.zig
@@ -64,15 +64,30 @@ pub fn createImageData(
switch (width_or_image_data) {
.width => |width| {
const height = maybe_height orelse return error.TypeError;
- return ImageData.constructor(width, height, maybe_settings, page);
+ return ImageData.init(width, height, maybe_settings, page);
},
.image_data => |image_data| {
- return ImageData.constructor(image_data._width, image_data._height, null, page);
+ return ImageData.init(image_data._width, image_data._height, null, page);
},
}
}
pub fn putImageData(_: *const CanvasRenderingContext2D, _: *ImageData, _: f64, _: f64, _: ?f64, _: ?f64, _: ?f64, _: ?f64) void {}
+
+pub fn getImageData(
+ _: *const CanvasRenderingContext2D,
+ _: i32, // sx
+ _: i32, // sy
+ sw: i32,
+ sh: i32,
+ page: *Page,
+) !*ImageData {
+ if (sw <= 0 or sh <= 0) {
+ return error.IndexSizeError;
+ }
+ return ImageData.init(@intCast(sw), @intCast(sh), null, page);
+}
+
pub fn save(_: *CanvasRenderingContext2D) void {}
pub fn restore(_: *CanvasRenderingContext2D) void {}
pub fn scale(_: *CanvasRenderingContext2D, _: f64, _: f64) void {}
@@ -125,6 +140,7 @@ pub const JsApi = struct {
pub const createImageData = bridge.function(CanvasRenderingContext2D.createImageData, .{ .dom_exception = true });
pub const putImageData = bridge.function(CanvasRenderingContext2D.putImageData, .{ .noop = true });
+ pub const getImageData = bridge.function(CanvasRenderingContext2D.getImageData, .{ .dom_exception = true });
pub const save = bridge.function(CanvasRenderingContext2D.save, .{ .noop = true });
pub const restore = bridge.function(CanvasRenderingContext2D.restore, .{ .noop = true });
pub const scale = bridge.function(CanvasRenderingContext2D.scale, .{ .noop = true });
diff --git a/src/browser/webapi/canvas/OffscreenCanvasRenderingContext2D.zig b/src/browser/webapi/canvas/OffscreenCanvasRenderingContext2D.zig
index 1a11bd68..faea97f0 100644
--- a/src/browser/webapi/canvas/OffscreenCanvasRenderingContext2D.zig
+++ b/src/browser/webapi/canvas/OffscreenCanvasRenderingContext2D.zig
@@ -63,15 +63,30 @@ pub fn createImageData(
switch (width_or_image_data) {
.width => |width| {
const height = maybe_height orelse return error.TypeError;
- return ImageData.constructor(width, height, maybe_settings, page);
+ return ImageData.init(width, height, maybe_settings, page);
},
.image_data => |image_data| {
- return ImageData.constructor(image_data._width, image_data._height, null, page);
+ return ImageData.init(image_data._width, image_data._height, null, page);
},
}
}
pub fn putImageData(_: *const OffscreenCanvasRenderingContext2D, _: *ImageData, _: f64, _: f64, _: ?f64, _: ?f64, _: ?f64, _: ?f64) void {}
+
+pub fn getImageData(
+ _: *const OffscreenCanvasRenderingContext2D,
+ _: i32, // sx
+ _: i32, // sy
+ sw: i32,
+ sh: i32,
+ page: *Page,
+) !*ImageData {
+ if (sw <= 0 or sh <= 0) {
+ return error.IndexSizeError;
+ }
+ return ImageData.init(@intCast(sw), @intCast(sh), null, page);
+}
+
pub fn save(_: *OffscreenCanvasRenderingContext2D) void {}
pub fn restore(_: *OffscreenCanvasRenderingContext2D) void {}
pub fn scale(_: *OffscreenCanvasRenderingContext2D, _: f64, _: f64) void {}
@@ -124,6 +139,7 @@ pub const JsApi = struct {
pub const createImageData = bridge.function(OffscreenCanvasRenderingContext2D.createImageData, .{ .dom_exception = true });
pub const putImageData = bridge.function(OffscreenCanvasRenderingContext2D.putImageData, .{ .noop = true });
+ pub const getImageData = bridge.function(OffscreenCanvasRenderingContext2D.getImageData, .{ .dom_exception = true });
pub const save = bridge.function(OffscreenCanvasRenderingContext2D.save, .{ .noop = true });
pub const restore = bridge.function(OffscreenCanvasRenderingContext2D.restore, .{ .noop = true });
pub const scale = bridge.function(OffscreenCanvasRenderingContext2D.scale, .{ .noop = true });