This commit is contained in:
AnErrupTion 2024-07-31 22:35:55 +02:00
commit bacbacd5fb
No known key found for this signature in database
GPG Key ID: 3E85EB44F610AD7F
3 changed files with 32 additions and 5 deletions

View File

@ -4,6 +4,11 @@
# matrix -> CMatrix
animation = none
# Stop the animation after some time
# 0 -> Run forever (default)
# 1..2e12 -> Stop the animation after this many seconds
animation_timeout_sec = 0
# Format string for clock in top right corner (see strftime specification). Example: %c
# If null, the clock won't be shown
clock = null

View File

@ -57,3 +57,4 @@ brightness_down_key: []const u8 = "F5",
brightness_up_key: []const u8 = "F6",
brightnessctl: []const u8 = "/usr/bin/brightnessctl",
brightness_change: []const u8 = "10",
animation_timeout_sec: u12 = 0,

View File

@ -65,6 +65,12 @@ pub fn main() !void {
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
defer _ = gpa.deinit();
// to be able to stop the animation after some time
var tv_zero: std.c.timeval = undefined;
_ = std.c.gettimeofday(&tv_zero, null);
var animation_timed_out: bool = false;
const allocator = gpa.allocator();
// Load arguments
@ -384,10 +390,12 @@ pub fn main() !void {
if (auth_fails < 10) {
_ = termbox.tb_clear();
switch (config.animation) {
.none => {},
.doom => doom.draw(),
.matrix => matrix.draw(),
if (!animation_timed_out) {
switch (config.animation) {
.none => {},
.doom => doom.draw(),
.matrix => matrix.draw(),
}
}
if (config.bigclock and buffer.box_height + (bigclock.HEIGHT + 2) * 2 < buffer.height) draw_big_clock: {
@ -533,8 +541,21 @@ pub fn main() !void {
var timeout: i32 = -1;
// Calculate the maximum timeout based on current animations, or the (big) clock. If there's none, we wait for the event indefinitely instead
if (animate) {
if (animate and !animation_timed_out) {
timeout = config.min_refresh_delta;
// check how long we have been running so we can turn off the animation
var tv: std.c.timeval = undefined;
_ = std.c.gettimeofday(&tv, null);
if (config.animation_timeout_sec > 0 and tv.tv_sec - tv_zero.tv_sec > config.animation_timeout_sec) {
animation_timed_out = true;
switch (config.animation) {
.none => {},
.doom => doom.deinit(),
.matrix => matrix.deinit(),
}
}
} else if (config.bigclock and config.clock == null) {
var tv: std.c.timeval = undefined;
_ = std.c.gettimeofday(&tv, null);