summaryrefslogtreecommitdiff
path: root/src/macos.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/macos.zig')
-rw-r--r--src/macos.zig19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/macos.zig b/src/macos.zig
index 3003fd46..67a5ec5b 100644
--- a/src/macos.zig
+++ b/src/macos.zig
@@ -875,6 +875,24 @@ export fn pardes_theme_bg() u32 {
return @as(u32, bg[0]) << 16 | @as(u32, bg[1]) << 8 | bg[2];
}
+/// The percentage the shell must paint window backgrounds at, read once per
+/// pump beside pardes_theme_bg().
+///
+/// Reading it also ACKNOWLEDGES whatever `WindowOpacity` asked for. The SDL
+/// shell has to answer that request because an SDL surface can arrive without
+/// an alpha channel and the core must not claim a value the compositor
+/// refused; an AppKit window always composites per pixel, so there is nothing
+/// here to refuse and no rollback for the core to perform.
+///
+/// The theme's own decision stays separate: a theme with no background of its
+/// own (pardes_theme_bg == PARDES_COLOR_DEFAULT) drops the ground entirely,
+/// whatever percentage is set here.
+export fn pardes_window_opacity() u8 {
+ const st = &(state orelse return 100);
+ st.core.settings.window_opacity_pending = false;
+ return st.core.settings.window_opacity;
+}
+
fn taglineFontPercent(core: ?*const pardes.Pardes) u8 {
return if (core) |p| p.settings.font.tagline_percent else pardes.config.gui_tagline_font_percent;
}
@@ -2437,6 +2455,7 @@ test "pardes.h declares every export the way it is defined" {
try expectSameAbi(@TypeOf(c.pardes_active_path), @TypeOf(pardes_active_path));
try expectSameAbi(@TypeOf(c.pardes_active_dirty), @TypeOf(pardes_active_dirty));
try expectSameAbi(@TypeOf(c.pardes_theme_bg), @TypeOf(pardes_theme_bg));
+ try expectSameAbi(@TypeOf(c.pardes_window_opacity), @TypeOf(pardes_window_opacity));
}
test "pardes.h matches the Zig boundary" {