mirror of
https://github.com/fairyglade/ly.git
synced 2026-05-06 15:20:36 +00:00
Switch to single-instance Widget model
And make widget() functions return pointers to widgets instead of just widgets Signed-off-by: AnErrupTion <anerruption@disroot.org>
This commit is contained in:
@@ -8,6 +8,7 @@ const Widget = ly_ui.Widget;
|
||||
|
||||
const Cascade = @This();
|
||||
|
||||
instance: ?Widget = null,
|
||||
buffer: *TerminalBuffer,
|
||||
current_auth_fails: *usize,
|
||||
max_auth_fails: usize,
|
||||
@@ -18,14 +19,16 @@ pub fn init(
|
||||
max_auth_fails: usize,
|
||||
) Cascade {
|
||||
return .{
|
||||
.instance = null,
|
||||
.buffer = buffer,
|
||||
.current_auth_fails = current_auth_fails,
|
||||
.max_auth_fails = max_auth_fails,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn widget(self: *Cascade) Widget {
|
||||
return Widget.init(
|
||||
pub fn widget(self: *Cascade) *Widget {
|
||||
if (self.instance) |*instance| return instance;
|
||||
self.instance = Widget.init(
|
||||
"Cascade",
|
||||
null,
|
||||
self,
|
||||
@@ -36,6 +39,7 @@ pub fn widget(self: *Cascade) Widget {
|
||||
null,
|
||||
null,
|
||||
);
|
||||
return &self.instance.?;
|
||||
}
|
||||
|
||||
fn draw(self: *Cascade) void {
|
||||
|
||||
@@ -21,6 +21,7 @@ fn length(vec: Vec2) f32 {
|
||||
return math.sqrt(vec[0] * vec[0] + vec[1] * vec[1]);
|
||||
}
|
||||
|
||||
instance: ?Widget = null,
|
||||
start_time: TimeOfDay,
|
||||
terminal_buffer: *TerminalBuffer,
|
||||
animate: *bool,
|
||||
@@ -41,6 +42,7 @@ pub fn init(
|
||||
frame_delay: u16,
|
||||
) !ColorMix {
|
||||
return .{
|
||||
.instance = null,
|
||||
.start_time = try interop.getTimeOfDay(),
|
||||
.terminal_buffer = terminal_buffer,
|
||||
.animate = animate,
|
||||
@@ -66,8 +68,9 @@ pub fn init(
|
||||
};
|
||||
}
|
||||
|
||||
pub fn widget(self: *ColorMix) Widget {
|
||||
return Widget.init(
|
||||
pub fn widget(self: *ColorMix) *Widget {
|
||||
if (self.instance) |*instance| return instance;
|
||||
self.instance = Widget.init(
|
||||
"ColorMix",
|
||||
null,
|
||||
self,
|
||||
@@ -78,6 +81,7 @@ pub fn widget(self: *ColorMix) Widget {
|
||||
null,
|
||||
calculateTimeout,
|
||||
);
|
||||
return &self.instance.?;
|
||||
}
|
||||
|
||||
fn draw(self: *ColorMix) void {
|
||||
|
||||
@@ -16,6 +16,7 @@ pub const STEPS = 12;
|
||||
pub const HEIGHT_MAX = 9;
|
||||
pub const SPREAD_MAX = 4;
|
||||
|
||||
instance: ?Widget = null,
|
||||
start_time: TimeOfDay,
|
||||
allocator: Allocator,
|
||||
terminal_buffer: *TerminalBuffer,
|
||||
@@ -60,6 +61,7 @@ pub fn init(
|
||||
};
|
||||
|
||||
return .{
|
||||
.instance = null,
|
||||
.start_time = try interop.getTimeOfDay(),
|
||||
.allocator = allocator,
|
||||
.terminal_buffer = terminal_buffer,
|
||||
@@ -73,8 +75,9 @@ pub fn init(
|
||||
};
|
||||
}
|
||||
|
||||
pub fn widget(self: *Doom) Widget {
|
||||
return Widget.init(
|
||||
pub fn widget(self: *Doom) *Widget {
|
||||
if (self.instance) |*instance| return instance;
|
||||
self.instance = Widget.init(
|
||||
"Doom",
|
||||
null,
|
||||
self,
|
||||
@@ -85,6 +88,7 @@ pub fn widget(self: *Doom) Widget {
|
||||
null,
|
||||
calculateTimeout,
|
||||
);
|
||||
return &self.instance.?;
|
||||
}
|
||||
|
||||
fn deinit(self: *Doom) void {
|
||||
|
||||
@@ -304,6 +304,7 @@ const VEC_Y = 1;
|
||||
|
||||
const DurFile = @This();
|
||||
|
||||
instance: ?Widget = null,
|
||||
start_time: TimeOfDay,
|
||||
allocator: Allocator,
|
||||
terminal_buffer: *TerminalBuffer,
|
||||
@@ -408,6 +409,7 @@ pub fn init(
|
||||
const frame_time: u32 = @intFromFloat(1000 / dur_movie.framerate.?);
|
||||
|
||||
return .{
|
||||
.instance = null,
|
||||
.start_time = try interop.getTimeOfDay(),
|
||||
.allocator = allocator,
|
||||
.terminal_buffer = terminal_buffer,
|
||||
@@ -427,8 +429,9 @@ pub fn init(
|
||||
};
|
||||
}
|
||||
|
||||
pub fn widget(self: *DurFile) Widget {
|
||||
return Widget.init(
|
||||
pub fn widget(self: *DurFile) *Widget {
|
||||
if (self.instance) |*instance| return instance;
|
||||
self.instance = Widget.init(
|
||||
"DurFile",
|
||||
null,
|
||||
self,
|
||||
@@ -439,6 +442,7 @@ pub fn widget(self: *DurFile) Widget {
|
||||
null,
|
||||
calculateTimeout,
|
||||
);
|
||||
return &self.instance.?;
|
||||
}
|
||||
|
||||
fn deinit(self: *DurFile) void {
|
||||
|
||||
@@ -21,6 +21,7 @@ const NEIGHBOR_DIRS = [_][2]i8{
|
||||
.{ 1, 0 }, .{ 1, 1 },
|
||||
};
|
||||
|
||||
instance: ?Widget = null,
|
||||
start_time: TimeOfDay,
|
||||
allocator: Allocator,
|
||||
terminal_buffer: *TerminalBuffer,
|
||||
@@ -58,6 +59,7 @@ pub fn init(
|
||||
const next_grid = try allocator.alloc(bool, grid_size);
|
||||
|
||||
var game = GameOfLife{
|
||||
.instance = null,
|
||||
.start_time = try interop.getTimeOfDay(),
|
||||
.allocator = allocator,
|
||||
.terminal_buffer = terminal_buffer,
|
||||
@@ -83,8 +85,9 @@ pub fn init(
|
||||
return game;
|
||||
}
|
||||
|
||||
pub fn widget(self: *GameOfLife) Widget {
|
||||
return Widget.init(
|
||||
pub fn widget(self: *GameOfLife) *Widget {
|
||||
if (self.instance) |*instance| return instance;
|
||||
self.instance = Widget.init(
|
||||
"GameOfLife",
|
||||
null,
|
||||
self,
|
||||
@@ -95,6 +98,7 @@ pub fn widget(self: *GameOfLife) Widget {
|
||||
null,
|
||||
calculateTimeout,
|
||||
);
|
||||
return &self.instance.?;
|
||||
}
|
||||
|
||||
fn deinit(self: *GameOfLife) void {
|
||||
|
||||
@@ -29,6 +29,7 @@ pub const Line = struct {
|
||||
update: usize,
|
||||
};
|
||||
|
||||
instance: ?Widget = null,
|
||||
start_time: TimeOfDay,
|
||||
allocator: Allocator,
|
||||
terminal_buffer: *TerminalBuffer,
|
||||
@@ -62,6 +63,7 @@ pub fn init(
|
||||
initBuffers(dots, lines, terminal_buffer.width, terminal_buffer.height, terminal_buffer.random);
|
||||
|
||||
return .{
|
||||
.instance = null,
|
||||
.start_time = try interop.getTimeOfDay(),
|
||||
.allocator = allocator,
|
||||
.terminal_buffer = terminal_buffer,
|
||||
@@ -80,8 +82,9 @@ pub fn init(
|
||||
};
|
||||
}
|
||||
|
||||
pub fn widget(self: *Matrix) Widget {
|
||||
return Widget.init(
|
||||
pub fn widget(self: *Matrix) *Widget {
|
||||
if (self.instance) |*instance| return instance;
|
||||
self.instance = Widget.init(
|
||||
"Matrix",
|
||||
null,
|
||||
self,
|
||||
@@ -92,6 +95,7 @@ pub fn widget(self: *Matrix) Widget {
|
||||
null,
|
||||
calculateTimeout,
|
||||
);
|
||||
return &self.instance.?;
|
||||
}
|
||||
|
||||
fn deinit(self: *Matrix) void {
|
||||
|
||||
Reference in New Issue
Block a user