From 54619c69f4fb7656c783c097ff775cef7404731c Mon Sep 17 00:00:00 2001 From: david-swift Date: Mon, 2 Feb 2026 19:42:31 +0100 Subject: [PATCH] Add support for specifying the CSS scheme to load --- .../Model/Enumerations/ColorScheme.swift | 23 +++++++++++++++++++ Sources/Adwaita/View/AnyView++.swift | 9 ++++++-- Sources/CAdw/shim.h | 10 ++++++++ 3 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 Sources/Adwaita/Model/Enumerations/ColorScheme.swift diff --git a/Sources/Adwaita/Model/Enumerations/ColorScheme.swift b/Sources/Adwaita/Model/Enumerations/ColorScheme.swift new file mode 100644 index 0000000..e7bef8e --- /dev/null +++ b/Sources/Adwaita/Model/Enumerations/ColorScheme.swift @@ -0,0 +1,23 @@ +// +// ColorScheme.swift +// Adwaita +// +// Created by david-swift on 01.02.26. +// + +import CAdw + +/// The system color scheme. +public enum ColorScheme: UInt32 { + + /// The dark color scheme. + case dark = 2 + /// The light color scheme. + case light = 3 + + /// The ColorScheme value as GtkInterfaceColorScheme. + var gtkValue: GtkInterfaceColorScheme { + .init(rawValue) + } + +} diff --git a/Sources/Adwaita/View/AnyView++.swift b/Sources/Adwaita/View/AnyView++.swift index 8206de5..3369abe 100644 --- a/Sources/Adwaita/View/AnyView++.swift +++ b/Sources/Adwaita/View/AnyView++.swift @@ -336,9 +336,11 @@ extension AnyView { } /// Add CSS classes to the app as soon as the view appears. - /// - Parameter getString: Get the CSS. + /// - Parameters: + /// - scheme: The color scheme. + /// - getString: Get the CSS. /// - Returns: A view. - public func css(_ getString: @escaping () -> String) -> AnyView { + public func css(scheme: ColorScheme? = nil, getString: @escaping () -> String) -> AnyView { inspect { storage, updateProperties in let cssID = "internal-css" let providerID = "internal-css-provider" @@ -346,6 +348,9 @@ extension AnyView { let string = getString() if updateProperties, string != previous { let provider = gtk_css_provider_new() + if let scheme { + gtui_cssprovider_set_prefers_color_scheme(.init(Int(bitPattern: provider)), scheme.gtkValue) + } gtk_css_provider_load_from_string( provider, string diff --git a/Sources/CAdw/shim.h b/Sources/CAdw/shim.h index 80f626b..aaaf92d 100644 --- a/Sources/CAdw/shim.h +++ b/Sources/CAdw/shim.h @@ -85,3 +85,13 @@ gtui_initialize_boolean (gboolean boolean) g_value_set_boolean(&val, boolean); return val; } + +static void +gtui_cssprovider_set_prefers_color_scheme (uint64_t provider, GtkInterfaceColorScheme scheme) +{ + GValue val = G_VALUE_INIT; + g_value_init(&val, G_TYPE_ENUM); + g_value_set_enum(&val, scheme); + g_object_set_property(provider, "prefers-color-scheme", &val); + g_value_unset(&val); +}