diff --git a/build.zig.zon b/build.zig.zon index 97dbb69..33ff85c 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -17,8 +17,8 @@ .hash = "toml-0.3.0-bV14Bd-EAQBKoXhpYft303BtA2vgLNlxntUCIWgRUl46", }, .zwanzig = .{ - .url = "https://github.com/forketyfork/zwanzig/archive/refs/tags/v0.3.0.tar.gz", - .hash = "zwanzig-0.3.0-oiXZluvfEACK3n9_G5gPK2m__rwk3W0AHYubEA1DVv0g", + .url = "https://github.com/forketyfork/zwanzig/archive/refs/tags/v0.4.0.tar.gz", + .hash = "zwanzig-0.4.0-oiXZlh-WEgAX1c_4KkZinBAxMRVxW_P4Qan2C6s70pt6", }, }, .paths = .{ diff --git a/src/config.zig b/src/config.zig index b476e8d..65a42ef 100644 --- a/src/config.zig +++ b/src/config.zig @@ -748,17 +748,17 @@ pub const SaveError = error{ } || fs.File.OpenError || fs.File.WriteError || fs.Dir.MakeError; test "Color.fromHex - valid hex colors" { - const white = Color.fromHex("#FFFFFF").?; + const white = Color.fromHex("#FFFFFF") orelse return error.TestUnexpectedResult; try std.testing.expectEqual(@as(u8, 255), white.r); try std.testing.expectEqual(@as(u8, 255), white.g); try std.testing.expectEqual(@as(u8, 255), white.b); - const red = Color.fromHex("E06C75").?; + const red = Color.fromHex("E06C75") orelse return error.TestUnexpectedResult; try std.testing.expectEqual(@as(u8, 224), red.r); try std.testing.expectEqual(@as(u8, 108), red.g); try std.testing.expectEqual(@as(u8, 117), red.b); - const one_dark_bg = Color.fromHex("#0E1116").?; + const one_dark_bg = Color.fromHex("#0E1116") orelse return error.TestUnexpectedResult; try std.testing.expectEqual(@as(u8, 14), one_dark_bg.r); try std.testing.expectEqual(@as(u8, 17), one_dark_bg.g); try std.testing.expectEqual(@as(u8, 22), one_dark_bg.b); @@ -901,7 +901,7 @@ test "Config - parse with all theme palette colors" { } test "parseTerminalKey decodes 1-based coordinates" { - const parsed = parseTerminalKey("terminal_2_3").?; + const parsed = parseTerminalKey("terminal_2_3") orelse return error.TestUnexpectedResult; try std.testing.expectEqual(@as(usize, 1), parsed.row); try std.testing.expectEqual(@as(usize, 2), parsed.col); try std.testing.expect(parseTerminalKey("terminal_x") == null); diff --git a/src/font_cache.zig b/src/font_cache.zig index 55075b6..e529fe9 100644 --- a/src/font_cache.zig +++ b/src/font_cache.zig @@ -143,8 +143,9 @@ pub const FontCache = struct { }; errdefer fonts.close(); - try self.fonts.put(size, fonts); - return self.fonts.getPtr(size).?; + const gop = try self.fonts.getOrPut(size); + gop.value_ptr.* = fonts; + return gop.value_ptr; } fn releaseFonts(self: *FontCache) void { diff --git a/src/ui/components/confirm_dialog.zig b/src/ui/components/confirm_dialog.zig index d4cecb7..20bb87c 100644 --- a/src/ui/components/confirm_dialog.zig +++ b/src/ui/components/confirm_dialog.zig @@ -189,6 +189,10 @@ pub const ConfirmDialogComponent = struct { } self.ensureTextures(renderer, host.theme, cache) catch return; + const title_tex = self.title_tex orelse return; + const message_tex = self.message_tex orelse return; + const cancel_tex = self.cancel_tex orelse return; + const confirm_tex = self.confirm_tex orelse return; _ = c.SDL_SetRenderDrawBlendMode(renderer, c.SDL_BLENDMODE_BLEND); _ = c.SDL_SetRenderDrawColor(renderer, 0, 0, 0, 170); @@ -214,11 +218,11 @@ pub const ConfirmDialogComponent = struct { _ = c.SDL_SetRenderDrawColor(renderer, acc.r, acc.g, acc.b, 255); primitives.drawRoundedBorder(renderer, modal, dpi.scale(modal_radius, host.ui_scale)); - self.renderText(renderer, modal, host.ui_scale); - self.renderButtons(renderer, modal, host.ui_scale, host.theme); + self.renderText(renderer, modal, host.ui_scale, title_tex, message_tex); + self.renderButtons(renderer, modal, host.ui_scale, host.theme, cancel_tex, confirm_tex); } - fn renderText(self: *ConfirmDialogComponent, renderer: *c.SDL_Renderer, modal: geom.Rect, ui_scale: f32) void { + fn renderText(self: *ConfirmDialogComponent, renderer: *c.SDL_Renderer, modal: geom.Rect, ui_scale: f32, title_tex: *c.SDL_Texture, message_tex: *c.SDL_Texture) void { const scaled_padding = dpi.scale(padding, ui_scale); const title_x = modal.x + scaled_padding; const title_y = modal.y + scaled_padding; @@ -228,7 +232,7 @@ pub const ConfirmDialogComponent = struct { .w = @floatFromInt(self.title_w), .h = @floatFromInt(self.title_h), }; - _ = c.SDL_RenderTexture(renderer, self.title_tex.?, null, &title_rect); + _ = c.SDL_RenderTexture(renderer, title_tex, null, &title_rect); const message_y = title_y + self.title_h + dpi.scale(12, ui_scale); const message_rect = c.SDL_FRect{ @@ -237,10 +241,10 @@ pub const ConfirmDialogComponent = struct { .w = @floatFromInt(self.message_w), .h = @floatFromInt(self.message_h), }; - _ = c.SDL_RenderTexture(renderer, self.message_tex.?, null, &message_rect); + _ = c.SDL_RenderTexture(renderer, message_tex, null, &message_rect); } - fn renderButtons(self: *ConfirmDialogComponent, renderer: *c.SDL_Renderer, modal: geom.Rect, ui_scale: f32, theme: *const colors.Theme) void { + fn renderButtons(self: *ConfirmDialogComponent, renderer: *c.SDL_Renderer, modal: geom.Rect, ui_scale: f32, theme: *const colors.Theme, cancel_tex: *c.SDL_Texture, confirm_tex: *c.SDL_Texture) void { const buttons = self.buttonRects(modal, ui_scale); const cancel_rect = c.SDL_FRect{ @@ -277,7 +281,7 @@ pub const ConfirmDialogComponent = struct { .w = cancel_w, .h = cancel_h, }; - _ = c.SDL_RenderTexture(renderer, self.cancel_tex.?, null, &cancel_text_rect); + _ = c.SDL_RenderTexture(renderer, cancel_tex, null, &cancel_text_rect); const confirm_text_rect = c.SDL_FRect{ .x = @floatFromInt(buttons.confirm.x + @divFloor(buttons.confirm.w - self.confirm_w, 2)), @@ -285,7 +289,7 @@ pub const ConfirmDialogComponent = struct { .w = @floatFromInt(self.confirm_w), .h = @floatFromInt(self.confirm_h), }; - _ = c.SDL_RenderTexture(renderer, self.confirm_tex.?, null, &confirm_text_rect); + _ = c.SDL_RenderTexture(renderer, confirm_tex, null, &confirm_text_rect); } fn modalRect(self: *ConfirmDialogComponent, host: *const types.UiHost) geom.Rect { diff --git a/src/ui/components/quit_confirm.zig b/src/ui/components/quit_confirm.zig index a03feb3..066754a 100644 --- a/src/ui/components/quit_confirm.zig +++ b/src/ui/components/quit_confirm.zig @@ -165,6 +165,8 @@ pub const QuitConfirmComponent = struct { } self.ensureTextures(renderer, host.theme, cache) catch return; + const title_tex = self.title_tex orelse return; + const message_tex = self.message_tex orelse return; const body_fonts = cache.get(self.body_font_size) catch return; _ = c.SDL_SetRenderDrawBlendMode(renderer, c.SDL_BLENDMODE_BLEND); @@ -191,11 +193,11 @@ pub const QuitConfirmComponent = struct { _ = c.SDL_SetRenderDrawColor(renderer, acc.r, acc.g, acc.b, 255); primitives.drawRoundedBorder(renderer, modal, dpi.scale(modal_radius, host.ui_scale)); - self.renderText(renderer, modal, host.ui_scale); + self.renderText(renderer, modal, host.ui_scale, title_tex, message_tex); self.renderButtons(renderer, modal, host.ui_scale, host.theme, body_fonts.regular); } - fn renderText(self: *QuitConfirmComponent, renderer: *c.SDL_Renderer, modal: geom.Rect, ui_scale: f32) void { + fn renderText(self: *QuitConfirmComponent, renderer: *c.SDL_Renderer, modal: geom.Rect, ui_scale: f32, title_tex: *c.SDL_Texture, message_tex: *c.SDL_Texture) void { const scaled_padding = dpi.scale(padding, ui_scale); const title_x = modal.x + scaled_padding; const title_y = modal.y + scaled_padding; @@ -205,7 +207,7 @@ pub const QuitConfirmComponent = struct { .w = @floatFromInt(self.title_w), .h = @floatFromInt(self.title_h), }; - _ = c.SDL_RenderTexture(renderer, self.title_tex.?, null, &title_rect); + _ = c.SDL_RenderTexture(renderer, title_tex, null, &title_rect); const message_y = title_y + self.title_h + dpi.scale(12, ui_scale); const message_rect = c.SDL_FRect{ @@ -214,7 +216,7 @@ pub const QuitConfirmComponent = struct { .w = @floatFromInt(self.message_w), .h = @floatFromInt(self.message_h), }; - _ = c.SDL_RenderTexture(renderer, self.message_tex.?, null, &message_rect); + _ = c.SDL_RenderTexture(renderer, message_tex, null, &message_rect); } fn renderButtons(self: *QuitConfirmComponent, renderer: *c.SDL_Renderer, modal: geom.Rect, ui_scale: f32, theme: *const colors.Theme, font: *c.TTF_Font) void {