Add support for dynamic CSS #61
Some checks failed
Deploy Docs / publish (push) Has been cancelled
SwiftLint / SwiftLint (push) Has been cancelled

This commit is contained in:
david-swift 2025-05-05 13:11:35 +02:00
parent 7eeec9e0fd
commit a04bd9025d
2 changed files with 20 additions and 14 deletions

View File

@ -339,11 +339,15 @@ extension AnyView {
/// - Parameter getString: Get the CSS.
/// - Returns: A view.
public func css(_ getString: @escaping () -> String) -> AnyView {
inspectOnAppear { _ in
inspect { storage, updateProperties in
let cssID = "internal-css"
let previous = storage.fields[cssID] as? String
let string = getString()
if updateProperties, string != previous {
let provider = gtk_css_provider_new()
gtk_css_provider_load_from_string(
provider,
getString()
string
)
let display = gdk_display_get_default()
gtk_style_context_add_provider_for_display(
@ -354,5 +358,6 @@ extension AnyView {
g_object_unref(provider)
}
}
}
}

View File

@ -32,7 +32,8 @@ struct DiceDemo: View {
.css {
"""
.dice-button {
background-color: @green_5;
background-color: \(number == nil ? "@blue_5" : "@green_5");
transition: 0.2s;
}
"""
}