feat(Padding): user configuration for custom padding

This commit is contained in:
2024-11-11 12:30:34 +01:00
parent 1605cd78dc
commit 430f2866e8

View File

@@ -24,13 +24,22 @@ pub fn Layout(comptime Event: type, comptime Renderer: type) type {
size: terminal.Size = undefined, size: terminal.Size = undefined,
element: Element = undefined, element: Element = undefined,
events: Events = undefined, events: Events = undefined,
padding: u16 = undefined, config: Config = undefined,
pub fn init(allocator: std.mem.Allocator, padding: u16, element: Element) @This() { // TODO: padding (for all 4 directions?)
const Config = struct {
padding: ?u16 = undefined,
left: u16 = 0,
right: u16 = 0,
top: u16 = 0,
bottom: u16 = 0,
};
pub fn init(allocator: std.mem.Allocator, config: Config, element: Element) @This() {
return .{ return .{
.config = config,
.element = element, .element = element,
.events = Events.init(allocator), .events = Events.init(allocator),
.padding = padding,
}; };
} }
@@ -58,16 +67,32 @@ pub fn Layout(comptime Event: type, comptime Renderer: type) type {
size.cols, size.cols,
size.rows, size.rows,
}); });
const sub_event: Event = .{ var sub_event: Event = undefined;
if (this.config.padding) |padding| {
// used overall padding
sub_event = .{
.resize = .{ .resize = .{
.anchor = .{ .anchor = .{
.col = size.anchor.col + this.padding, .col = size.anchor.col + padding,
.row = size.anchor.row + this.padding, .row = size.anchor.row + padding,
}, },
.cols = size.cols -| this.padding -| this.padding, .cols = size.cols -| (padding * 2),
.rows = size.rows -| this.padding -| this.padding, .rows = size.rows -| (padding * 2),
}, },
}; };
} else {
// use all for directions individually
sub_event = .{
.resize = .{
.anchor = .{
.col = size.anchor.col + this.config.left,
.row = size.anchor.row + this.config.top,
},
.cols = size.cols -| this.config.left -| this.config.right,
.rows = size.rows -| this.config.top -| this.config.bottom,
},
};
}
// adjust size according to the containing elements // adjust size according to the containing elements
switch ((&this.element).*) { switch ((&this.element).*) {
.layout => |*layout| { .layout => |*layout| {