diff options
| author | Nathan Reiner <nathan@nathanreiner.xyz> | 2025-08-27 20:21:34 +0200 |
|---|---|---|
| committer | Nathan Reiner <nathan@nathanreiner.xyz> | 2025-08-27 20:21:34 +0200 |
| commit | f0f2124949056e3008416dcd089766a2ef69a08b (patch) | |
| tree | 7e8f674fda0c5af7f30671e9dd088f7ec7d35e5e /src/wl/display.zig | |
| parent | 8a7392dea729d3ed49a8bf8eee25906c4fd616ac (diff) | |
add wl.buffer and wl.surface
Diffstat (limited to 'src/wl/display.zig')
| -rw-r--r-- | src/wl/display.zig | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/wl/display.zig b/src/wl/display.zig index c9e2e6e..2a7b94c 100644 --- a/src/wl/display.zig +++ b/src/wl/display.zig @@ -82,7 +82,7 @@ pub fn request(self: *Self, object: anytype, args: @TypeOf(object.*).Request) !v inline for (@typeInfo(tag_type).@"enum".fields) |f| { if (f.value == opcode) { - const data = @field(args, f.name); + const data = if (@FieldType(@TypeOf(args), f.name) == void) .{} else @field(args, f.name); const id: u32 = @truncate(object.handle); var size: u32 = 8; @@ -103,6 +103,7 @@ pub fn request(self: *Self, object: anytype, args: @TypeOf(object.*).Request) !v const padding_size: usize = padding_len(ptr.child, value.len); size += @intCast(@sizeOf(u32) + (value.len * @sizeOf(ptr.child)) + padding_size); } else @compileError(std.fmt.comptimePrint("size: unsupported type {}", .{t})), + .@"enum" => size += @sizeOf(u32), else => @compileError(std.fmt.comptimePrint("size: unsupported type {}", .{t})), }, } @@ -150,6 +151,7 @@ pub fn request(self: *Self, object: anytype, args: @TypeOf(object.*).Request) !v _ = try self.stream.writeAll(std.mem.asBytes(&@as(u8, 0))); } } else @compileError(std.fmt.comptimePrint("size: unsupported type {}", .{t})), + .@"enum" => _ = try self.stream.writeAll(std.mem.asBytes(&@as(u32, @intFromEnum(value)))), else => @compileError(std.fmt.comptimePrint("size: unsupported type {}", .{t})), }, } @@ -239,6 +241,7 @@ test "request" { req3: struct { []const u8 }, req4: struct { []const u16 }, req5: struct { wayland.types.Fd }, + req6: void, }; pub const Events = wayland.EventSet(@This(), .{}); @@ -271,6 +274,7 @@ test "request" { try displ.request(&sample, .{ .req3 = .{"abcd"} }); try displ.request(&sample, .{ .req4 = .{&[_]u16{ 1, 32, 4, 5, 5 }} }); try displ.request(&sample, .{ .req5 = .{ .{ .fd = displ.stream.handle } } }); + try displ.request(&sample, .{ .req6 = {} }); } const conn = try server.accept(); @@ -330,6 +334,14 @@ test "request" { test_buffer[0..size], ); + size = try file.readAll(test_buffer[0..8]); + try std.testing.expectEqualSlices( + u8, + &(std.mem.toBytes(@as(u32, 42)) ++ + std.mem.toBytes(@as(u32, (8 << 16) | 5))), + test_buffer[0..size], + ); + size = try file.readAll(test_buffer[0..]); try std.testing.expectEqual(0, size); } |