diff --git a/src/font/Group.zig b/src/font/Group.zig index f04b61303..88eb6b3aa 100644 --- a/src/font/Group.zig +++ b/src/font/Group.zig @@ -34,7 +34,7 @@ const log = std.log.scoped(.font_group); const StyleArray = std.EnumArray(Style, std.ArrayListUnmanaged(GroupFace)); /// Packed array of booleans to indicate if a style is enabled or not. -const StyleStatus = std.EnumArray(Style, bool); +pub const StyleStatus = std.EnumArray(Style, bool); /// Map of descriptors to faces. This is used with manual codepoint maps /// to ensure that we don't load the same font multiple times. diff --git a/src/renderer/Metal.zig b/src/renderer/Metal.zig index d21b01449..7e9051d37 100644 --- a/src/renderer/Metal.zig +++ b/src/renderer/Metal.zig @@ -102,6 +102,7 @@ texture_color: objc.Object, // MTLTexture pub const DerivedConfig = struct { font_thicken: bool, font_features: std.ArrayList([]const u8), + font_styles: font.Group.StyleStatus, cursor_color: ?terminal.color.RGB, cursor_text: ?terminal.color.RGB, background: terminal.color.RGB, @@ -121,10 +122,17 @@ pub const DerivedConfig = struct { }; errdefer font_features.deinit(); + // Get our font styles + var font_styles = font.Group.StyleStatus.initFill(true); + font_styles.set(.bold, config.@"font-style-bold" != .false); + font_styles.set(.italic, config.@"font-style-italic" != .false); + font_styles.set(.bold_italic, config.@"font-style-bold-italic" != .false); + return .{ .background_opacity = @max(0, @min(1, config.@"background-opacity")), .font_thicken = config.@"font-thicken", .font_features = font_features, + .font_styles = font_styles, .cursor_color = if (config.@"cursor-color") |col| col.toTerminalRGB() @@ -981,6 +989,7 @@ pub fn changeConfig(self: *Metal, config: *DerivedConfig) !void { // when its not necessary but config reloading shouldn't be so // common to cause a problem. self.font_group.reset(); + self.font_group.group.styles = config.font_styles; self.font_group.atlas_greyscale.clear(); self.font_group.atlas_color.clear(); diff --git a/src/renderer/OpenGL.zig b/src/renderer/OpenGL.zig index b27540635..44e52b4a6 100644 --- a/src/renderer/OpenGL.zig +++ b/src/renderer/OpenGL.zig @@ -216,6 +216,7 @@ const GPUCellMode = enum(u8) { pub const DerivedConfig = struct { font_thicken: bool, font_features: std.ArrayList([]const u8), + font_styles: font.Group.StyleStatus, cursor_color: ?terminal.color.RGB, cursor_text: ?terminal.color.RGB, background: terminal.color.RGB, @@ -235,10 +236,17 @@ pub const DerivedConfig = struct { }; errdefer font_features.deinit(); + // Get our font styles + var font_styles = font.Group.StyleStatus.initFill(true); + font_styles.set(.bold, config.@"font-style-bold" != .false); + font_styles.set(.italic, config.@"font-style-italic" != .false); + font_styles.set(.bold_italic, config.@"font-style-bold-italic" != .false); + return .{ .background_opacity = @max(0, @min(1, config.@"background-opacity")), .font_thicken = config.@"font-thicken", .font_features = font_features, + .font_styles = font_styles, .cursor_color = if (config.@"cursor-color") |col| col.toTerminalRGB() @@ -1211,6 +1219,7 @@ pub fn changeConfig(self: *OpenGL, config: *DerivedConfig) !void { // when its not necessary but config reloading shouldn't be so // common to cause a problem. self.font_group.reset(); + self.font_group.group.styles = config.font_styles; self.font_group.atlas_greyscale.clear(); self.font_group.atlas_color.clear();