summaryrefslogtreecommitdiff
path: root/src/macos.zig
diff options
context:
space:
mode:
authorGabriel Schneider <[email protected]>2026-09-16 13:20:29 -0300
committerGabriel Schneider <[email protected]>2026-10-01 00:12:14 -0300
commit7cbd44dd1cfe97126e7fc996214e458525d2980c (patch)
treeeeb02eabaf39231dece68647129040e546aa80a2 /src/macos.zig
parent3042f33df2b16b61c08d6535fba268103728dd1e (diff)
downloadpardes-7cbd44dd1cfe97126e7fc996214e458525d2980c.tar.gz
pardes-7cbd44dd1cfe97126e7fc996214e458525d2980c.zip
Align macOS rendering with Linux and establish parity regressions
Diffstat (limited to 'src/macos.zig')
-rw-r--r--src/macos.zig21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/macos.zig b/src/macos.zig
index 4b37255e..bbfb8c08 100644
--- a/src/macos.zig
+++ b/src/macos.zig
@@ -931,7 +931,7 @@ export fn pardes_grid_col_at(x: f32, row: u16, body_w: f32, tagline_w: f32) u16
export fn pardes_topbar_pane_border_rgb() u32 {
const rgb = pardes.config.gui_topbar_pane_border_rgb orelse fromTheme: {
const st = state orelse return color_default;
- break :fromTheme st.core.chromeTheme().scroll_track;
+ break :fromTheme st.core.chromeTheme().border;
};
return @as(u32, rgb[0]) << 16 | @as(u32, rgb[1]) << 8 | rgb[2];
}
@@ -1979,6 +1979,11 @@ export fn pardes_tag_layer_value(index: u32, field: u32) u32 {
8 => if (layer.cursor) |c| c.col else 65535,
9 => if (layer.cursor) |c| @intFromBool(c.bar) else 0,
10 => @as(u32, layer.bg[0]) << 16 | @as(u32, layer.bg[1]) << 8 | layer.bg[2],
+ 11 => @intFromBool(layer.kind == .pane and st.core.settings.tag_bottom),
+ 12 => rgb: {
+ const border = st.core.chromeTheme().border;
+ break :rgb @as(u32, border[0]) << 16 | @as(u32, border[1]) << 8 | border[2];
+ },
else => 0,
};
}
@@ -2914,6 +2919,20 @@ test "mac tag layer ABI preserves logical capacity and physical grip" {
defer core.surface.tag_layers[0] = .{};
try std.testing.expectEqual(@as(u32, 12), pardes_tag_layer_value(0, 0));
try std.testing.expectEqual(@as(u32, 0x123456), pardes_tag_layer_value(0, 10));
+ try std.testing.expectEqual(@as(u32, 0), pardes_tag_layer_value(0, 11));
+ core.settings.tag_bottom = true;
+ try std.testing.expectEqual(@as(u32, 1), pardes_tag_layer_value(0, 11));
+ core.surface.tag_layers[0].kind = .column;
+ try std.testing.expectEqual(@as(u32, 0), pardes_tag_layer_value(0, 11));
+ core.surface.tag_layers[0].kind = .pane;
+ const border = core.chromeTheme().border;
+ const border_rgb = @as(u32, border[0]) << 16 | @as(u32, border[1]) << 8 | border[2];
+ try std.testing.expectEqual(border_rgb, pardes_tag_layer_value(0, 12));
+ try std.testing.expectEqual(pardes.config.gui_topbar_pane_border_rgb orelse border, .{
+ @as(u8, @intCast(pardes_topbar_pane_border_rgb() >> 16)),
+ @as(u8, @truncate(pardes_topbar_pane_border_rgb() >> 8)),
+ @as(u8, @truncate(pardes_topbar_pane_border_rgb())),
+ });
try std.testing.expectEqual(@as(u32, 11), pardes_tag_layer_value(0, 8));
try std.testing.expectEqual(@as(u8, 'Z'), pardes_tag_layer_cells(0).?[11].text[0]);
var canonical: [24]Cell = @splat(encodeCell(.{ .text = .{'G'} ++ .{0} ** 6, .len = 1, .default = false }));