From 7eda21d5449305b4759c15a2aef25f62904fb6cb Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Thu, 16 Mar 2023 17:03:57 -0700 Subject: [PATCH] surface propagates new config to renderer --- src/Surface.zig | 8 +++++++- src/renderer/Metal.zig | 5 +++++ src/renderer/OpenGL.zig | 5 +++++ src/renderer/Thread.zig | 4 ++++ src/renderer/message.zig | 3 +++ 5 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/Surface.zig b/src/Surface.zig index 1e12fd075..f6307c696 100644 --- a/src/Surface.zig +++ b/src/Surface.zig @@ -570,7 +570,13 @@ fn changeConfig(self: *Surface, config: *const configpkg.Config) !void { // Update our derived configurations for the renderer and termio, // then send them a message to update. - // TODO + var renderer_config = try Renderer.DerivedConfig.init(self.alloc, config); + errdefer renderer_config.deinit(); + // TODO: termio config + + _ = self.renderer_thread.mailbox.push(.{ + .change_config = renderer_config, + }, .{ .forever = {} }); } /// Returns the x/y coordinate of where the IME (Input Method Editor) diff --git a/src/renderer/Metal.zig b/src/renderer/Metal.zig index 7159ff829..b5ee0a58c 100644 --- a/src/renderer/Metal.zig +++ b/src/renderer/Metal.zig @@ -724,6 +724,11 @@ fn drawCells( } } +/// Update the configuration. +pub fn changeConfig(self: *Metal, config: DerivedConfig) !void { + self.config = config; +} + /// Resize the screen. pub fn setScreenSize(self: *Metal, dim: renderer.ScreenSize) !void { // Store our screen size diff --git a/src/renderer/OpenGL.zig b/src/renderer/OpenGL.zig index 9e2a72303..77950fb99 100644 --- a/src/renderer/OpenGL.zig +++ b/src/renderer/OpenGL.zig @@ -1232,6 +1232,11 @@ fn gridSize(self: *const OpenGL, screen_size: renderer.ScreenSize) renderer.Grid ); } +/// Update the configuration. +pub fn changeConfig(self: *OpenGL, config: DerivedConfig) !void { + self.config = config; +} + /// Set the screen size for rendering. This will update the projection /// used for the shader so that the scaling of the grid is correct. pub fn setScreenSize(self: *OpenGL, dim: renderer.ScreenSize) !void { diff --git a/src/renderer/Thread.zig b/src/renderer/Thread.zig index 099c71cdf..ba956dda0 100644 --- a/src/renderer/Thread.zig +++ b/src/renderer/Thread.zig @@ -255,6 +255,10 @@ fn drainMailbox(self: *Thread) !void { .screen_size => |size| { try self.renderer.setScreenSize(size); }, + + .change_config => |config| { + try self.renderer.changeConfig(config); + }, } } } diff --git a/src/renderer/message.zig b/src/renderer/message.zig index e129d9fe9..80465a2e0 100644 --- a/src/renderer/message.zig +++ b/src/renderer/message.zig @@ -22,4 +22,7 @@ pub const Message = union(enum) { /// Change the screen size. screen_size: renderer.ScreenSize, + + /// The derived configuration to update the renderer with. + change_config: renderer.Renderer.DerivedConfig, };