From 9f814c112524635506de34dfd6f89e5e193731af Mon Sep 17 00:00:00 2001 From: LordMZTE Date: Tue, 30 Jan 2024 16:29:13 +0100 Subject: [PATCH] chore: update dependencies --- build.zig.zon | 8 ++++---- src/themeswitcher.zig | 36 +++++++++++++++++++++++++++++++----- 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/build.zig.zon b/build.zig.zon index 43b4982..bf0eb8d 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -6,12 +6,12 @@ // Make sure this is the same version as the one used by zenolith-sdl2. // See: https://git.mzte.de/zenolith/zenolith-sdl2 .zenolith = .{ - .url = "git+https://git.mzte.de/zenolith/zenolith.git#ad388687cd205079aab75074a542eadc79490df7", - .hash = "12201677a81b6f8133bbe9c7d3b2afc07b61bf632a070d13d57f995827022f6a1f54", + .url = "git+https://git.mzte.de/zenolith/zenolith.git#c4ae23938d9f64ffd8dd0662314f7b478818547a", + .hash = "1220aa2f21fb19b4cb741e0709e84308a4d079f446dd655827206b0f834da8efa350", }, .zenolith_sdl2 = .{ - .url = "git+https://git.mzte.de/zenolith/zenolith-sdl2.git#d8f44c96a9f5890296c00cd346dd6e661597a528", - .hash = "1220066e28c172156aa816790a3fe0d732576daa94218e3c15a1a4b30459d5d47aca", + .url = "git+https://git.mzte.de/zenolith/zenolith-sdl2.git#f0b5f244affa1b5e5bbee5d1dc34b6b07f10097b", + .hash = "122094812c10f22bdbdb73b1d6cd20528ed49b833ae859f82be7e4cb3b7b3d0d98d9", }, }, diff --git a/src/themeswitcher.zig b/src/themeswitcher.zig index 14fddd3..4eefa0c 100644 --- a/src/themeswitcher.zig +++ b/src/themeswitcher.zig @@ -18,12 +18,13 @@ pub const zenolith_options = struct { /// Our root widget type. Most functions in here will be invoked by Zenolith. const Root = struct { - // We use this box as our only child widget. It will contain our buttons and a label. + // We use this box as our only direct child. It will contain our buttons and a label. box: *zl.widget.Widget, // These aren't immediate children, we just save them have to be able to easily reference them. // Zenolith will take care of freeing these. label: *zl.widget.Widget, + btn_box: *zl.widget.Widget, latte_btn: *zl.widget.Widget, frappe_btn: *zl.widget.Widget, macchiato_btn: *zl.widget.Widget, @@ -48,12 +49,8 @@ const Root = struct { const mocha_btn = try zl.widget.Button.init(alloc, "Mocha"); try hbox.addChild(null, latte_btn); - try hbox.addChild(null, try zl.widget.Spacer.init(alloc, .{ .flex = 1 })); try hbox.addChild(null, frappe_btn); - try hbox.addChild(null, try zl.widget.Spacer.init(alloc, .{ .flex = 1 })); try hbox.addChild(null, macchiato_btn); - try hbox.addChild(null, try zl.widget.Spacer.init(alloc, .{ .flex = 1 })); - try hbox.addChild(null, mocha_btn); try vbox.addChild(null, hbox); @@ -61,6 +58,7 @@ const Root = struct { .box = vbox, .label = label, + .btn_box = hbox, .latte_btn = latte_btn, .frappe_btn = frappe_btn, .macchiato_btn = macchiato_btn, @@ -104,6 +102,34 @@ const Root = struct { else return; + // only show buttons that correspond to inactive themes + { + for (self.btn_box.children()) |_| { + _ = try self.btn_box.removeChild(null); + } + for ([_]*zl.widget.Widget{ + self.latte_btn, + self.frappe_btn, + self.macchiato_btn, + self.mocha_btn, + }) |w| { + if (w != ba.btn_widget) + try self.btn_box.addChild(null, w); + } + + // After we've made changes to the widget tree, we have to make sure to re-link + // the updated subtree as well as fire a Relayout backevent on the updated widget + // to cause another layout pass on it. This assures that all buttens are positioned + // and sized correctly. + try self.btn_box.link(selfw, selfw.data.platform); + try zl.backevent.Backevent.create( + // Child is safe to set to undefined here, as the Relayout backevent will set it + // before being propagated. + zl.backevent.Relayout{ .child = undefined }, + {}, + ).dispatch(self.btn_box); + } + try theme.apply(selfw.data.allocator, &selfw.data.attreebutes.?); const text = if (ba.btn_widget == self.latte_btn)