const std = @import("std"); const wayland = @import("../root.zig"); const wl = wayland.wl; const Self = @This(); pub const Events = wayland.EventSet(Self, .{}); pub const Request = union(enum) { create_surface: struct { wayland.Object.Ref }, create_region: struct { wayland.Object.Ref }, }; handle: wayland.Object.Ref, pub var instances: std.ArrayListUnmanaged(*Self) = .empty; pub const handler: wl.Registry.GlobalHandler = .{ .interface = "wl_compositor", .version = 6, .handler = register, }; pub fn init( self: *Self, ctx: *const wayland.Context ) !void { self.* = .{ .handle = try ctx.display.registry.add_object( ctx.allocator, wayland.Object.from_self(self), ), }; } fn register(ctx: *const wayland.Context) ?wayland.Object.Ref { const compositor = ctx.allocator.create(Self) catch return null; compositor.init(ctx) catch return null; instances.append(ctx.allocator, compositor) catch return null; return compositor.handle; } pub fn format( self: *const Self, comptime fmt: []const u8, options: std.fmt.FormatOptions, writer: anytype, ) !void { _ = self; _ = fmt; _ = options; try writer.print("wl.compositor", .{}); } pub fn create_surface( self: *Self, ctx: *const wayland.Context ) !*wl.Surface { const surface = try ctx.allocator.create(wl.Surface); errdefer ctx.allocator.destroy(surface); try surface.init(ctx); try ctx.display.request(self, .{ .create_surface = .{ surface.handle } }); return surface; }