From 5b2198b313f46d7c2219d85bbfa3988799f857af Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Wed, 8 Jan 2025 16:12:42 +0100 Subject: [PATCH] feat(win32 gui): read initial window placement from config and tweak defaults --- src/gui_config.zig | 5 ++++- src/win32/gui.zig | 19 +++++++++++-------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/gui_config.zig b/src/gui_config.zig index c981dc7..a48404e 100644 --- a/src/gui_config.zig +++ b/src/gui_config.zig @@ -1,4 +1,7 @@ fontface: [] const u8 = "Cascadia Code", -fontsize: u8 = 17, +fontsize: u8 = 14, + +initial_window_x: u16 = 1087, +initial_window_y: u16 = 1014, include_files: []const u8 = "", diff --git a/src/win32/gui.zig b/src/win32/gui.zig index 7897a9c..77e4bc7 100644 --- a/src/win32/gui.zig +++ b/src/win32/gui.zig @@ -336,7 +336,7 @@ const WindowPlacement = struct { }; }; -fn calcWindowPlacement() WindowPlacement { +fn calcWindowPlacement(initial_window_x: u16, initial_window_y: u16) WindowPlacement { var result = WindowPlacement.default; const monitor = win32.MonitorFromPoint( @@ -383,8 +383,8 @@ fn calcWindowPlacement() WindowPlacement { ); const wanted_size: XY(i32) = .{ - .x = win32.scaleDpi(i32, 800, result.dpi.x), - .y = win32.scaleDpi(i32, 1200, result.dpi.y), + .x = win32.scaleDpi(i32, @intCast(initial_window_x), result.dpi.x), + .y = win32.scaleDpi(i32, @intCast(initial_window_y), result.dpi.y), }; result.size = .{ .x = @min(wanted_size.x, work_size.x), @@ -416,7 +416,14 @@ fn entry(pid: thespian.pid) !void { const CLASS_NAME = win32.L("Flow"); - const initial_placement = calcWindowPlacement(); + const conf, _ = root.read_config(gui_config, arena_instance.allocator()); + root.write_config(conf, arena_instance.allocator()) catch + std.log.err("failed to write gui config file", .{}); + + const initial_placement = calcWindowPlacement( + conf.initial_window_x, + conf.initial_window_y, + ); global.icons = getIcons(initial_placement.dpi); // we only need to register the window class once per process @@ -439,10 +446,6 @@ fn entry(pid: thespian.pid) !void { win32.GetLastError(), ); - const conf, _ = root.read_config(gui_config, arena_instance.allocator()); - root.write_config(conf, arena_instance.allocator()) catch - std.log.err("failed to write gui config file", .{}); - var create_args = CreateWindowArgs{ .allocator = arena_instance.allocator(), .pid = pid,