From f0f2124949056e3008416dcd089766a2ef69a08b Mon Sep 17 00:00:00 2001 From: Nathan Reiner Date: Wed, 27 Aug 2025 20:21:34 +0200 Subject: add wl.buffer and wl.surface --- src/wl/display.zig | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'src/wl/display.zig') 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); } -- cgit v1.2.3-70-g09d2