apprt/embedded: add API for reporting color scheme

This commit is contained in:
Mitchell Hashimoto
2024-02-02 13:02:16 -08:00
parent ae8f5f3ceb
commit 258d51395c
3 changed files with 27 additions and 1 deletions

View File

@ -144,6 +144,11 @@ typedef enum {
GHOSTTY_TAB_NEXT = -2, GHOSTTY_TAB_NEXT = -2,
} ghostty_tab_e; } ghostty_tab_e;
typedef enum {
GHOSTTY_COLOR_SCHEME_LIGHT = 0,
GHOSTTY_COLOR_SCHEME_DARK = 1,
} ghostty_color_scheme_e;
// This is a packed struct (see src/input/mouse.zig) but the C standard // This is a packed struct (see src/input/mouse.zig) but the C standard
// afaik doesn't let us reliably define packed structs so we build it up // afaik doesn't let us reliably define packed structs so we build it up
// from scratch. // from scratch.
@ -475,6 +480,7 @@ void ghostty_surface_refresh(ghostty_surface_t);
void ghostty_surface_set_content_scale(ghostty_surface_t, double, double); void ghostty_surface_set_content_scale(ghostty_surface_t, double, double);
void ghostty_surface_set_focus(ghostty_surface_t, bool); void ghostty_surface_set_focus(ghostty_surface_t, bool);
void ghostty_surface_set_size(ghostty_surface_t, uint32_t, uint32_t); void ghostty_surface_set_size(ghostty_surface_t, uint32_t, uint32_t);
void ghostty_surface_set_color_scheme(ghostty_surface_t, ghostty_color_scheme_e);
ghostty_input_mods_e ghostty_surface_key_translation_mods(ghostty_surface_t, ghostty_input_mods_e); ghostty_input_mods_e ghostty_surface_key_translation_mods(ghostty_surface_t, ghostty_input_mods_e);
void ghostty_surface_key(ghostty_surface_t, ghostty_input_key_s); void ghostty_surface_key(ghostty_surface_t, ghostty_input_key_s);
void ghostty_surface_text(ghostty_surface_t, const char *, uintptr_t); void ghostty_surface_text(ghostty_surface_t, const char *, uintptr_t);

View File

@ -2803,7 +2803,7 @@ fn dragLeftClickBefore(
/// Call to notify Ghostty that the color scheme for the terminal has /// Call to notify Ghostty that the color scheme for the terminal has
/// changed. /// changed.
pub fn colorSchemeCallback(self: *Surface, scheme: apprt.ColorScheme) void { pub fn colorSchemeCallback(self: *Surface, scheme: apprt.ColorScheme) !void {
self.color_scheme = scheme; self.color_scheme = scheme;
} }

View File

@ -689,6 +689,13 @@ pub const Surface = struct {
}; };
} }
pub fn colorSchemeCallback(self: *Surface, scheme: apprt.ColorScheme) void {
self.core_surface.colorSchemeCallback(scheme) catch |err| {
log.err("error setting color scheme err={}", .{err});
return;
};
}
pub fn mouseButtonCallback( pub fn mouseButtonCallback(
self: *Surface, self: *Surface,
action: input.MouseButtonState, action: input.MouseButtonState,
@ -1516,6 +1523,19 @@ pub const CAPI = struct {
surface.updateSize(w, h); surface.updateSize(w, h);
} }
/// Update the color scheme of the surface.
export fn ghostty_surface_set_color_scheme(surface: *Surface, scheme_raw: c_int) void {
const scheme = std.meta.intToEnum(apprt.ColorScheme, scheme_raw) catch {
log.warn(
"invalid color scheme to ghostty_surface_set_color_scheme value={}",
.{scheme_raw},
);
return;
};
surface.colorSchemeCallback(scheme);
}
/// Update the content scale of the surface. /// Update the content scale of the surface.
export fn ghostty_surface_set_content_scale(surface: *Surface, x: f64, y: f64) void { export fn ghostty_surface_set_content_scale(surface: *Surface, x: f64, y: f64) void {
surface.updateContentScale(x, y); surface.updateContentScale(x, y);