From 54af974c2bdb7ae3271cba0370499c3d304e6ba7 Mon Sep 17 00:00:00 2001 From: Yves Biener Date: Thu, 13 Mar 2025 19:48:31 +0100 Subject: [PATCH] mod(container): make `reposition` public and split from `resize` --- examples/demo.zig | 3 ++- examples/elements/button.zig | 3 ++- examples/elements/input.zig | 3 ++- examples/elements/scrollable.zig | 3 ++- examples/errors.zig | 3 ++- examples/layouts/grid.zig | 3 ++- examples/layouts/horizontal.zig | 3 ++- examples/layouts/mixed.zig | 3 ++- examples/layouts/vertical.zig | 3 ++- examples/styles/palette.zig | 3 ++- examples/styles/text.zig | 3 ++- src/container.zig | 7 +++---- src/element.zig | 14 +++++++++++--- src/testing.zig | 3 ++- 14 files changed, 38 insertions(+), 19 deletions(-) diff --git a/examples/demo.zig b/examples/demo.zig index c200e7f..08bf84e 100644 --- a/examples/demo.zig +++ b/examples/demo.zig @@ -150,7 +150,8 @@ pub fn main() !void { } try renderer.resize(); - container.resize(.{}, renderer.size); + container.resize(renderer.size); + container.reposition(.{}); try renderer.render(@TypeOf(container), &container); try renderer.flush(); } diff --git a/examples/elements/button.zig b/examples/elements/button.zig index dfd334f..70b471c 100644 --- a/examples/elements/button.zig +++ b/examples/elements/button.zig @@ -140,7 +140,8 @@ pub fn main() !void { } try renderer.resize(); - container.resize(.{}, renderer.size); + container.resize(renderer.size); + container.reposition(.{}); try renderer.render(@TypeOf(container), &container); try renderer.flush(); } diff --git a/examples/elements/input.zig b/examples/elements/input.zig index d7dd2fa..c7f545e 100644 --- a/examples/elements/input.zig +++ b/examples/elements/input.zig @@ -154,7 +154,8 @@ pub fn main() !void { } try renderer.resize(); - container.resize(.{}, renderer.size); + container.resize(renderer.size); + container.reposition(.{}); try renderer.render(@TypeOf(container), &container); try renderer.flush(); } diff --git a/examples/elements/scrollable.zig b/examples/elements/scrollable.zig index add8e74..def557f 100644 --- a/examples/elements/scrollable.zig +++ b/examples/elements/scrollable.zig @@ -191,7 +191,8 @@ pub fn main() !void { } try renderer.resize(); - container.resize(.{}, renderer.size); + container.resize(renderer.size); + container.reposition(.{}); try renderer.render(@TypeOf(container), &container); try renderer.flush(); } diff --git a/examples/errors.zig b/examples/errors.zig index 7385095..fe73cce 100644 --- a/examples/errors.zig +++ b/examples/errors.zig @@ -151,7 +151,8 @@ pub fn main() !void { } try renderer.resize(); - container.resize(.{}, renderer.size); + container.resize(renderer.size); + container.reposition(.{}); try renderer.render(@TypeOf(container), &container); try renderer.flush(); } diff --git a/examples/layouts/grid.zig b/examples/layouts/grid.zig index 35c0608..ef504ff 100644 --- a/examples/layouts/grid.zig +++ b/examples/layouts/grid.zig @@ -107,7 +107,8 @@ pub fn main() !void { } try renderer.resize(); - container.resize(.{}, renderer.size); + container.resize(renderer.size); + container.reposition(.{}); try renderer.render(@TypeOf(container), &container); try renderer.flush(); } diff --git a/examples/layouts/horizontal.zig b/examples/layouts/horizontal.zig index 74a573d..569b37c 100644 --- a/examples/layouts/horizontal.zig +++ b/examples/layouts/horizontal.zig @@ -99,7 +99,8 @@ pub fn main() !void { } try renderer.resize(); - container.resize(.{}, renderer.size); + container.resize(renderer.size); + container.reposition(.{}); try renderer.render(@TypeOf(container), &container); try renderer.flush(); } diff --git a/examples/layouts/mixed.zig b/examples/layouts/mixed.zig index 240cc4c..7d817c5 100644 --- a/examples/layouts/mixed.zig +++ b/examples/layouts/mixed.zig @@ -115,7 +115,8 @@ pub fn main() !void { } try renderer.resize(); - container.resize(.{}, renderer.size); + container.resize(renderer.size); + container.reposition(.{}); try renderer.render(@TypeOf(container), &container); try renderer.flush(); } diff --git a/examples/layouts/vertical.zig b/examples/layouts/vertical.zig index 5e6f697..699b16c 100644 --- a/examples/layouts/vertical.zig +++ b/examples/layouts/vertical.zig @@ -98,7 +98,8 @@ pub fn main() !void { } try renderer.resize(); - container.resize(.{}, renderer.size); + container.resize(renderer.size); + container.reposition(.{}); try renderer.render(@TypeOf(container), &container); try renderer.flush(); } diff --git a/examples/styles/palette.zig b/examples/styles/palette.zig index 42c585b..044f6e8 100644 --- a/examples/styles/palette.zig +++ b/examples/styles/palette.zig @@ -94,7 +94,8 @@ pub fn main() !void { } try renderer.resize(); - container.resize(.{}, renderer.size); + container.resize(renderer.size); + container.reposition(.{}); try renderer.render(@TypeOf(container), &container); try renderer.flush(); } diff --git a/examples/styles/text.zig b/examples/styles/text.zig index c9d979b..6f29c09 100644 --- a/examples/styles/text.zig +++ b/examples/styles/text.zig @@ -149,7 +149,8 @@ pub fn main() !void { } try renderer.resize(); - container.resize(.{}, renderer.size); + container.resize(renderer.size); + container.reposition(.{}); try renderer.render(@TypeOf(container), &container); try renderer.flush(); } diff --git a/src/container.zig b/src/container.zig index 1b7a3c4..142ebf0 100644 --- a/src/container.zig +++ b/src/container.zig @@ -616,7 +616,7 @@ pub fn Container(comptime Event: type) type { try this.elements.append(element); } - fn reposition(this: *@This(), origin: Point) void { + pub fn reposition(this: *@This(), origin: Point) void { const layout = this.properties.layout; this.origin = origin; this.element.reposition(origin); @@ -701,7 +701,7 @@ pub fn Container(comptime Event: type) type { return this.size; } - // growable implicitly requires the root `Container` to have a set a size property to the size of the available terminal screen + /// growable implicitly requires the root `Container` to have a set a size property to the size of the available terminal screen fn grow_resize(this: *@This(), max_size: Point) void { log.debug("grow_size: {any}", .{this.size}); const layout = this.properties.layout; @@ -845,7 +845,7 @@ pub fn Container(comptime Event: type) type { for (this.elements.items) |*child| child.grow_resize(child.size); } - pub fn resize(this: *@This(), origin: Point, size: Point) void { + pub fn resize(this: *@This(), size: Point) void { // NOTE assume that this function is only called for the root `Container` const fit_size = this.fit_resize(); // if (fit_size.y > size.y or fit_size.x > size.x) @panic("error: cannot render in available space"); @@ -862,7 +862,6 @@ pub fn Container(comptime Event: type) type { }, } this.grow_resize(this.size); - this.reposition(origin); } pub fn handle(this: *@This(), event: Event) !void { diff --git a/src/element.zig b/src/element.zig index af6fe77..dc297a0 100644 --- a/src/element.zig +++ b/src/element.zig @@ -83,6 +83,7 @@ pub fn Scrollable(Event: type) type { .ptr = this, .vtable = &.{ .resize = resize, + .reposition = reposition, .handle = handle, .content = content, }, @@ -94,10 +95,15 @@ pub fn Scrollable(Event: type) type { this.size = size; // TODO scrollbar space - depending on configuration and only if necessary? - this.container.resize(.{}, this.size); + this.container.resize(this.size); this.container_size = this.container.size; } + fn reposition(ctx: *anyopaque, _: Point) void { + const this: *@This() = @ptrCast(@alignCast(ctx)); + this.container.reposition(.{}); + } + fn handle(ctx: *anyopaque, event: Event) !void { const this: *@This() = @ptrCast(@alignCast(ctx)); switch (event) { @@ -229,7 +235,8 @@ test "scrollable vertical" { var renderer: testing.Renderer = .init(allocator, size); defer renderer.deinit(); - container.resize(.{}, size); + container.resize(size); + container.reposition(.{}); try renderer.render(Container(event.SystemEvent), &container); try testing.expectEqualCells(.{}, renderer.size, @import("test/element/scrollable.vertical.top.zon"), renderer.screen); @@ -306,7 +313,8 @@ test "scrollable horizontal" { var renderer: testing.Renderer = .init(allocator, size); defer renderer.deinit(); - container.resize(.{}, size); + container.resize(size); + container.reposition(.{}); try renderer.render(Container(event.SystemEvent), &container); try testing.expectEqualCells(.{}, renderer.size, @import("test/element/scrollable.horizontal.left.zon"), renderer.screen); diff --git a/src/testing.zig b/src/testing.zig index da5fe11..aafc7a6 100644 --- a/src/testing.zig +++ b/src/testing.zig @@ -121,7 +121,8 @@ pub fn expectContainerScreen(size: Point, container: *Container(event.SystemEven defer renderer.deinit(); try renderer.resize(size); - container.resize(.{}, size); + container.resize(size); + container.reposition(.{}); try renderer.render(Container(event.SystemEvent), container); try expectEqualCells(.{}, renderer.size, expected, renderer.screen);