mirror of
https://github.com/lightpanda-io/browser.git
synced 2026-03-22 04:34:44 +00:00
Merge pull request #1792 from lightpanda-io/Canvas_getImageData
Add dummy getImageData to canvas
This commit is contained in:
@@ -89,6 +89,41 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<script id="CanvasRenderingContext2D#getImageData">
|
||||||
|
{
|
||||||
|
const element = document.createElement("canvas");
|
||||||
|
element.width = 100;
|
||||||
|
element.height = 50;
|
||||||
|
const ctx = element.getContext("2d");
|
||||||
|
|
||||||
|
const imageData = ctx.getImageData(0, 0, 10, 20);
|
||||||
|
testing.expectEqual(true, imageData instanceof ImageData);
|
||||||
|
testing.expectEqual(imageData.width, 10);
|
||||||
|
testing.expectEqual(imageData.height, 20);
|
||||||
|
testing.expectEqual(imageData.data.length, 10 * 20 * 4);
|
||||||
|
testing.expectEqual(true, imageData.data instanceof Uint8ClampedArray);
|
||||||
|
|
||||||
|
// Undrawn canvas should return transparent black pixels.
|
||||||
|
testing.expectEqual(imageData.data[0], 0);
|
||||||
|
testing.expectEqual(imageData.data[1], 0);
|
||||||
|
testing.expectEqual(imageData.data[2], 0);
|
||||||
|
testing.expectEqual(imageData.data[3], 0);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script id="CanvasRenderingContext2D#getImageData invalid">
|
||||||
|
{
|
||||||
|
const element = document.createElement("canvas");
|
||||||
|
const ctx = element.getContext("2d");
|
||||||
|
|
||||||
|
// Zero or negative width/height should throw IndexSizeError.
|
||||||
|
testing.expectError('Index or size', () => ctx.getImageData(0, 0, 0, 10));
|
||||||
|
testing.expectError('Index or size', () => ctx.getImageData(0, 0, 10, 0));
|
||||||
|
testing.expectError('Index or size', () => ctx.getImageData(0, 0, -5, 10));
|
||||||
|
testing.expectError('Index or size', () => ctx.getImageData(0, 0, 10, -5));
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
<script id="getter">
|
<script id="getter">
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -62,3 +62,26 @@
|
|||||||
testing.expectEqual(offscreen.height, 96);
|
testing.expectEqual(offscreen.height, 96);
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<script id=OffscreenCanvasRenderingContext2D#getImageData>
|
||||||
|
{
|
||||||
|
const canvas = new OffscreenCanvas(100, 50);
|
||||||
|
const ctx = canvas.getContext("2d");
|
||||||
|
|
||||||
|
const imageData = ctx.getImageData(0, 0, 10, 20);
|
||||||
|
testing.expectEqual(true, imageData instanceof ImageData);
|
||||||
|
testing.expectEqual(imageData.width, 10);
|
||||||
|
testing.expectEqual(imageData.height, 20);
|
||||||
|
testing.expectEqual(imageData.data.length, 10 * 20 * 4);
|
||||||
|
|
||||||
|
// Undrawn canvas should return transparent black pixels.
|
||||||
|
testing.expectEqual(imageData.data[0], 0);
|
||||||
|
testing.expectEqual(imageData.data[1], 0);
|
||||||
|
testing.expectEqual(imageData.data[2], 0);
|
||||||
|
testing.expectEqual(imageData.data[3], 0);
|
||||||
|
|
||||||
|
// Zero or negative dimensions should throw.
|
||||||
|
testing.expectError('Index or size', () => ctx.getImageData(0, 0, 0, 10));
|
||||||
|
testing.expectError('Index or size', () => ctx.getImageData(0, 0, 10, -5));
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ pub const ConstructorSettings = struct {
|
|||||||
/// ```
|
/// ```
|
||||||
///
|
///
|
||||||
/// We currently support only the first 2.
|
/// We currently support only the first 2.
|
||||||
pub fn constructor(
|
pub fn init(
|
||||||
width: u32,
|
width: u32,
|
||||||
height: u32,
|
height: u32,
|
||||||
maybe_settings: ?ConstructorSettings,
|
maybe_settings: ?ConstructorSettings,
|
||||||
@@ -106,7 +106,7 @@ pub const JsApi = struct {
|
|||||||
pub var class_id: bridge.ClassId = undefined;
|
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 colorSpace = bridge.property("srgb", .{ .template = false, .readonly = true });
|
||||||
pub const pixelFormat = bridge.property("rgba-unorm8", .{ .template = false, .readonly = true });
|
pub const pixelFormat = bridge.property("rgba-unorm8", .{ .template = false, .readonly = true });
|
||||||
|
|||||||
@@ -64,15 +64,30 @@ pub fn createImageData(
|
|||||||
switch (width_or_image_data) {
|
switch (width_or_image_data) {
|
||||||
.width => |width| {
|
.width => |width| {
|
||||||
const height = maybe_height orelse return error.TypeError;
|
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| {
|
.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 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 save(_: *CanvasRenderingContext2D) void {}
|
||||||
pub fn restore(_: *CanvasRenderingContext2D) void {}
|
pub fn restore(_: *CanvasRenderingContext2D) void {}
|
||||||
pub fn scale(_: *CanvasRenderingContext2D, _: f64, _: f64) 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 createImageData = bridge.function(CanvasRenderingContext2D.createImageData, .{ .dom_exception = true });
|
||||||
|
|
||||||
pub const putImageData = bridge.function(CanvasRenderingContext2D.putImageData, .{ .noop = 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 save = bridge.function(CanvasRenderingContext2D.save, .{ .noop = true });
|
||||||
pub const restore = bridge.function(CanvasRenderingContext2D.restore, .{ .noop = true });
|
pub const restore = bridge.function(CanvasRenderingContext2D.restore, .{ .noop = true });
|
||||||
pub const scale = bridge.function(CanvasRenderingContext2D.scale, .{ .noop = true });
|
pub const scale = bridge.function(CanvasRenderingContext2D.scale, .{ .noop = true });
|
||||||
|
|||||||
@@ -63,15 +63,30 @@ pub fn createImageData(
|
|||||||
switch (width_or_image_data) {
|
switch (width_or_image_data) {
|
||||||
.width => |width| {
|
.width => |width| {
|
||||||
const height = maybe_height orelse return error.TypeError;
|
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| {
|
.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 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 save(_: *OffscreenCanvasRenderingContext2D) void {}
|
||||||
pub fn restore(_: *OffscreenCanvasRenderingContext2D) void {}
|
pub fn restore(_: *OffscreenCanvasRenderingContext2D) void {}
|
||||||
pub fn scale(_: *OffscreenCanvasRenderingContext2D, _: f64, _: f64) 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 createImageData = bridge.function(OffscreenCanvasRenderingContext2D.createImageData, .{ .dom_exception = true });
|
||||||
|
|
||||||
pub const putImageData = bridge.function(OffscreenCanvasRenderingContext2D.putImageData, .{ .noop = 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 save = bridge.function(OffscreenCanvasRenderingContext2D.save, .{ .noop = true });
|
||||||
pub const restore = bridge.function(OffscreenCanvasRenderingContext2D.restore, .{ .noop = true });
|
pub const restore = bridge.function(OffscreenCanvasRenderingContext2D.restore, .{ .noop = true });
|
||||||
pub const scale = bridge.function(OffscreenCanvasRenderingContext2D.scale, .{ .noop = true });
|
pub const scale = bridge.function(OffscreenCanvasRenderingContext2D.scale, .{ .noop = true });
|
||||||
|
|||||||
Reference in New Issue
Block a user