mod(size): rename merge function to add; new max function
All checks were successful
Zig Project Action / Lint, Spell-check and test zig project (push) Successful in 1m6s

This commit is contained in:
2025-02-27 14:17:19 +01:00
parent 54ce697e91
commit 53b69f034c
3 changed files with 54 additions and 12 deletions

View File

@@ -595,7 +595,7 @@ pub fn Container(comptime Event: type) type {
const len: u16 = @truncate(this.elements.items.len); const len: u16 = @truncate(this.elements.items.len);
if (len > 0) { if (len > 0) {
for (this.elements.items) |element| { for (this.elements.items) |element| {
size = size.merge(element.minSize()); size = size.add(element.minSize());
} }
var gap = this.properties.layout.gap; var gap = this.properties.layout.gap;
if (this.properties.layout.separator.enabled) gap += 1; if (this.properties.layout.separator.enabled) gap += 1;
@@ -605,10 +605,7 @@ pub fn Container(comptime Event: type) type {
.vertical => size.rows += gap * (len - 1), .vertical => size.rows += gap * (len - 1),
} }
} }
return .{ return size.max(this.properties.min_size);
.cols = @max(size.cols, this.properties.min_size.cols),
.rows = @max(size.rows, this.properties.min_size.rows),
};
} }
pub fn handle(this: *@This(), event: Event) !void { pub fn handle(this: *@This(), event: Event) !void {

View File

@@ -86,12 +86,8 @@ pub fn Scrollable(Event: type) type {
.resize => |size| { .resize => |size| {
this.size = size; this.size = size;
// TODO: scrollbar space - depending on configuration and only if necessary? // TODO: scrollbar space - depending on configuration and only if necessary?
const min_size = this.container.minSize(); this.container_size = size.max(this.container.minSize());
this.container_size = .{ this.container_size.anchor = size.anchor;
.anchor = size.anchor,
.cols = @max(min_size.cols, size.cols),
.rows = @max(min_size.rows, size.rows),
};
try this.container.handle(.{ .resize = this.container_size }); try this.container.handle(.{ .resize = this.container_size });
}, },
// TODO: other means to scroll except with the mouse? (i.e. Ctrl-u/d, k/j, etc.?) // TODO: other means to scroll except with the mouse? (i.e. Ctrl-u/d, k/j, etc.?)

View File

@@ -3,12 +3,61 @@ pub const Size = packed struct {
cols: u16 = 0, cols: u16 = 0,
rows: u16 = 0, rows: u16 = 0,
pub fn merge(this: @This(), other: @This()) Size { pub fn add(this: @This(), other: @This()) Size {
return .{ return .{
.cols = this.cols + other.cols, .cols = this.cols + other.cols,
.rows = this.rows + other.rows, .rows = this.rows + other.rows,
}; };
} }
pub fn max(this: @This(), other: @This()) Size {
return .{
.cols = @max(this.cols, other.cols),
.rows = @max(this.rows, other.rows),
};
}
test "adding" {
const testing = @import("std").testing;
const a: @This() = .{
.anchor = .{ .col = 1, .row = 2 },
.cols = 10,
.rows = 20,
};
const b: @This() = .{
.anchor = .{ .col = 5, .row = 20 },
.cols = 20,
.rows = 10,
};
try testing.expectEqual(@This(){
.cols = 30,
.rows = 30,
}, a.add(b));
}
test "maximum" {
const testing = @import("std").testing;
const a: @This() = .{
.anchor = .{ .col = 1, .row = 2 },
.cols = 10,
.rows = 20,
};
const b: @This() = .{
.anchor = .{ .col = 5, .row = 20 },
.cols = 20,
.rows = 10,
};
try testing.expectEqual(@This(){
.cols = 20,
.rows = 20,
}, a.max(b));
}
}; };
pub const Position = packed struct { pub const Position = packed struct {