From e486223799648d27e8b91c5fe0ea4c088b74b707 Mon Sep 17 00:00:00 2001 From: Violet Purcell Date: Wed, 7 Aug 2024 20:53:18 -0400 Subject: [PATCH] tearing-control-v1: add bindings --- build.zig | 2 ++ src/types/tearing_control_v1.zig | 46 ++++++++++++++++++++++++++++++++ src/wlroots.zig | 3 +++ 3 files changed, 51 insertions(+) create mode 100644 src/types/tearing_control_v1.zig diff --git a/build.zig b/build.zig index 365ab0d..10e6812 100644 --- a/build.zig +++ b/build.zig @@ -25,6 +25,7 @@ pub fn build(b: *std.Build) void { scanner.addSystemProtocol("staging/ext-session-lock/ext-session-lock-v1.xml"); scanner.addSystemProtocol("unstable/linux-dmabuf/linux-dmabuf-unstable-v1.xml"); scanner.addSystemProtocol("staging/cursor-shape/cursor-shape-v1.xml"); + scanner.addSystemProtocol("staging/tearing-control/tearing-control-v1.xml"); scanner.addCustomProtocol("protocol/wlr-layer-shell-unstable-v1.xml"); scanner.addCustomProtocol("protocol/wlr-output-power-management-unstable-v1.xml"); @@ -48,6 +49,7 @@ pub fn build(b: *std.Build) void { scanner.generate("zwp_tablet_manager_v2", 1); scanner.generate("zwp_linux_dmabuf_v1", 4); scanner.generate("wp_cursor_shape_manager_v1", 1); + scanner.generate("wp_tearing_control_manager_v1", 1); scanner.generate("zwlr_layer_shell_v1", 4); scanner.generate("zwlr_output_power_manager_v1", 1); diff --git a/src/types/tearing_control_v1.zig b/src/types/tearing_control_v1.zig new file mode 100644 index 0000000..bc16fa3 --- /dev/null +++ b/src/types/tearing_control_v1.zig @@ -0,0 +1,46 @@ +const wlr = @import("../wlroots.zig"); + +const wayland = @import("wayland"); +const wl = wayland.server.wl; +const wp = wayland.server.wp; + +pub const TearingControlV1 = extern struct { + client: *wl.Client, + link: wl.list.Link, + resource: *wl.Resource, + + current: wp.TearingControlV1.PresentationHint, + pending: wp.TearingControlV1.PresentationHint, + + events: extern struct { + set_hint: wl.Signal(void), + destroy: wl.Signal(void), + }, + + surface: *wlr.Surface, +}; + +pub const TearingControlManagerV1 = extern struct { + global: *wl.Global, + surface_hints: wl.list.Head(TearingControlV1, .link), + + server_destroy: wl.Listener(*wl.Server), + + events: extern struct { + new_object: wl.Signal(*TearingControlV1), + destroy: wl.Signal(void), + }, + + data: ?*anyopaque, + + extern fn wlr_tearing_control_manager_v1_create(server: *wl.Server, version: u32) ?*TearingControlManagerV1; + pub fn create(server: *wl.Server, version: u32) !*TearingControlManagerV1 { + return wlr_tearing_control_manager_v1_create(server, version) orelse error.OutOfMemory; + } + + extern fn wlr_tearing_control_manager_v1_surface_hint_from_surface( + manager: *TearingControlManagerV1, + surface: *wlr.Surface, + ) wp.TearingControlV1.PresentationHint; + pub const hintFromSurface = wlr_tearing_control_manager_v1_surface_hint_from_surface; +}; diff --git a/src/wlroots.zig b/src/wlroots.zig index 2befe42..c8aa30c 100644 --- a/src/wlroots.zig +++ b/src/wlroots.zig @@ -153,6 +153,9 @@ pub const ScreencopyFrameV1 = @import("types/screencopy_v1.zig").ScreencopyFrame pub const GammaControlManagerV1 = @import("types/gamma_control_v1.zig").GammaControlManagerV1; pub const GammaControlV1 = @import("types/gamma_control_v1.zig").GammaControlV1; +pub const TearingControlManagerV1 = @import("types/tearing_control_v1.zig").TearingControlManagerV1; +pub const TearingControlV1 = @import("types/tearing_control_v1.zig").TearingControlV1; + pub const XcursorImage = @import("xcursor.zig").XcursorImage; pub const Xcursor = @import("xcursor.zig").Xcursor; pub const XcursorTheme = @import("xcursor.zig").XcursorTheme;