From e0641dc2cae271e8f966fe8afa3c0f423b4b202b Mon Sep 17 00:00:00 2001 From: "Italo F. Capasso B." <44873757+edwood-grant@users.noreply.github.com> Date: Mon, 9 Dec 2024 20:29:41 -0500 Subject: [PATCH] Parse all branding colors from appstream (#2226) --- src/Core/Package.vala | 51 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 41 insertions(+), 10 deletions(-) diff --git a/src/Core/Package.vala b/src/Core/Package.vala index 295c25385..69b79e793 100644 --- a/src/Core/Package.vala +++ b/src/Core/Package.vala @@ -390,7 +390,10 @@ public class AppCenterCore.Package : Object { public string? description = null; private string? summary = null; - private string? color_primary = null; + private string? color_primary_light = null; + private string? color_primary_dark = null; + private string? color_primary_unknown = null; + private string? color_primary_fallback = null; private string? color_primary_text = null; private string? payments_key = null; private string? suggested_amount = null; @@ -418,7 +421,10 @@ public class AppCenterCore.Package : Object { name = null; description = null; summary = null; - color_primary = null; + color_primary_light = null; + color_primary_dark = null; + color_primary_unknown = null; + color_primary_fallback = null; color_primary_text = null; payments_key = null; suggested_amount = null; @@ -749,19 +755,44 @@ public class AppCenterCore.Package : Object { } public string? get_color_primary () { - if (color_primary != null) { - return color_primary; + cache_primary_colors (); + + string? color_primary = null; + var gtk_settings = Gtk.Settings.get_default (); + if (color_primary_light != null && !gtk_settings.gtk_application_prefer_dark_theme) { + color_primary = color_primary_light; + } else if (color_primary_dark != null && gtk_settings.gtk_application_prefer_dark_theme) { + color_primary = color_primary_dark; + } else if (color_primary_unknown != null) { + color_primary = color_primary_unknown; } else { - var branding = component.get_branding (); - if (branding != null) { - color_primary = branding.get_color (AppStream.ColorKind.PRIMARY, AppStream.ColorSchemeKind.UNKNOWN); + color_primary = color_primary_fallback; + } + + return color_primary; + } + + private void cache_primary_colors () { + var branding = component.get_branding (); + if (branding != null) { + if (color_primary_dark == null) { + color_primary_dark = branding.get_color (AppStream.ColorKind.PRIMARY, + AppStream.ColorSchemeKind.DARK); } - if (color_primary == null) { - color_primary = component.get_custom_value ("x-appcenter-color-primary"); + if (color_primary_light == null) { + color_primary_light = branding.get_color (AppStream.ColorKind.PRIMARY, + AppStream.ColorSchemeKind.LIGHT); } - return color_primary; + if (color_primary_unknown == null) { + color_primary_unknown = branding.get_color (AppStream.ColorKind.PRIMARY, + AppStream.ColorSchemeKind.UNKNOWN); + } + } + + if (color_primary_fallback == null) { + color_primary_fallback = component.get_custom_value ("x-appcenter-color-primary"); } }