aboutsummaryrefslogtreecommitdiffstats
path: root/src/control.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/control.zig')
-rw-r--r--src/control.zig34
1 files changed, 33 insertions, 1 deletions
diff --git a/src/control.zig b/src/control.zig
index 032a927..4f4d547 100644
--- a/src/control.zig
+++ b/src/control.zig
@@ -175,6 +175,9 @@ pub const ControlServer = struct {
if (build_config.have_tsv) {
_ = c.lo_server_add_method(self.server, "/texture/*/tsv", "ss", wrapCallback(handle_texture_tsv), @as(*anyopaque, @ptrCast(self)));
}
+ _ = c.lo_server_add_method(self.server, "/texture/*/freeze", "T", wrapCallback(handle_texture_freeze), @as(*anyopaque, @ptrCast(self)));
+ _ = c.lo_server_add_method(self.server, "/texture/*/freeze", "F", wrapCallback(handle_texture_freeze), @as(*anyopaque, @ptrCast(self)));
+ _ = c.lo_server_add_method(self.server, "/texture/*/step", "", wrapCallback(handle_texture_step), @as(*anyopaque, @ptrCast(self)));
_ = c.lo_server_add_method(self.server, "/texture/*/destroy", "", wrapCallback(handle_destroy_texture), @as(*anyopaque, @ptrCast(self)));
return self;
@@ -380,6 +383,35 @@ pub const ControlServer = struct {
return true;
}
+ fn handle_texture_freeze(self: *ControlServer, path: []const u8, types: []const u8, argv: []const [*c]c.lo_arg) !bool {
+ _ = argv;
+
+ var parts = std.mem.tokenizeScalar(u8, path, '/');
+ _ = parts.next();
+ const name = parts.next() orelse unreachable;
+
+ if (self.cache.textures.get(name)) |source| {
+ source.freeze = types[0] == 'T';
+ } else return false;
+
+ return true;
+ }
+
+ fn handle_texture_step(self: *ControlServer, path: []const u8, types: []const u8, argv: []const [*c]c.lo_arg) !bool {
+ _ = argv;
+ _ = types;
+
+ var parts = std.mem.tokenizeScalar(u8, path, '/');
+ _ = parts.next();
+ const name = parts.next() orelse unreachable;
+
+ if (self.cache.textures.get(name)) |source| {
+ source.step.store(true, .monotonic);
+ } else return false;
+
+ return true;
+ }
+
fn handle_destroy_texture(self: *ControlServer, path: []const u8, types: []const u8, argv: []const [*c]c.lo_arg) !bool {
_ = types;
_ = argv;
@@ -394,6 +426,6 @@ pub const ControlServer = struct {
self.cache.allocator.free(kv.key);
} else return false;
- return false;
+ return true;
}
};