From ce23a7ff27ab8120e2b1285e2f14367ac6ef288f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Sun, 14 Jul 2024 12:39:27 -0700 Subject: [PATCH 1/3] Move all CSS to application.css --- data/Application.css | 69 +++++++++++++++++++++ data/StyleView.css | 65 ------------------- data/WelcomeView.css | 21 ------- data/io.elementary.onboarding.gresource.xml | 2 - src/Views/StyleView.vala | 6 -- src/Views/WelcomeView.vala | 4 -- 6 files changed, 69 insertions(+), 98 deletions(-) delete mode 100644 data/StyleView.css delete mode 100644 data/WelcomeView.css diff --git a/data/Application.css b/data/Application.css index fcadb1b1..a52c6c44 100644 --- a/data/Application.css +++ b/data/Application.css @@ -32,3 +32,72 @@ navigation-view-page { border-spacing: 2em; margin: 0; } + +image.logo { + background-position: 50%; + background-size: 100%, cover, 100%; + border: 1px solid @accent_color_900; + border-radius: 6px; + box-shadow: + 0 1px 2px alpha(black, 0.3), + 0 2px 2px alpha(black, 0.1), + inset 0 -1px 0 0 alpha(@highlight_color, 0.2), + inset 0 1px 0 0 alpha(@highlight_color, 0.3), + inset 1px 0 0 0 alpha(@highlight_color, 0.07), + inset -1px 0 0 0 alpha(@highlight_color, 0.07); + color: white; + -gtk-icon-shadow: + 0 1px 1px alpha(black, 0.3), + 0 2px 4px alpha(@accent_color_900, 0.2); + -gtk-icon-style: symbolic; + min-height: 56px; + min-width: 56px; + margin: 4px; +} + +checkbutton .card { + background-position: center; + background-repeat: no-repeat; + background-size: 86px 64px, cover; + min-width: 92px; + min-height: 64px; + margin: 6px 6px 12px 12px; +} + +checkbutton .card.prefer-default { + background-color: white; + background-image: + url("resource:///io/elementary/onboarding/appearance-default.svg"), + linear-gradient( + to bottom, + alpha(@accent_color_300, 0.1), + alpha(@accent_color_500, 0.1) + ); +} + +checkbutton .card.prefer-dark { + background-color: mix(@BLACK_300, @BLACK_500, 0.25); + background-image: + url("resource:///io/elementary/onboarding/appearance-dark.svg"), + linear-gradient( + to bottom, + alpha(@accent_color_300, 0.1), + alpha(@accent_color_500, 0.1) + ); +} + +checkbutton .card.prefer-scheduled { + background-size: 86px 64px, cover, cover; + background-image: + url("resource:///io/elementary/onboarding/appearance-scheduled.svg"), + linear-gradient( + to bottom, + alpha(@accent_color_300, 0.1), + alpha(@accent_color_500, 0.1) + ), + linear-gradient( + 120deg, + white 50%, + mix(@BLACK_300, @BLACK_500, 0.25) 51% + ); +} diff --git a/data/StyleView.css b/data/StyleView.css deleted file mode 100644 index 29fedc1c..00000000 --- a/data/StyleView.css +++ /dev/null @@ -1,65 +0,0 @@ -/* -* Copyright 2020 elementary, Inc. (https://elementary.io) -* -* This program is free software; you can redistribute it and/or -* modify it under the terms of the GNU General Public -* License as published by the Free Software Foundation; either -* version 2 of the License, or (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -* General Public License for more details. -* -* You should have received a copy of the GNU General Public -* License along with this program; if not, write to the -* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -* Boston, MA 02110-1301 USA. -*/ - -checkbutton .card { - background-position: center; - background-repeat: no-repeat; - background-size: 86px 64px, cover; - min-width: 92px; - min-height: 64px; - margin: 6px 6px 12px 12px; -} - -checkbutton .card.prefer-default { - background-color: white; - background-image: - url("resource:///io/elementary/onboarding/appearance-default.svg"), - linear-gradient( - to bottom, - alpha(@accent_color_300, 0.1), - alpha(@accent_color_500, 0.1) - ); -} - -checkbutton .card.prefer-dark { - background-color: mix(@BLACK_300, @BLACK_500, 0.25); - background-image: - url("resource:///io/elementary/onboarding/appearance-dark.svg"), - linear-gradient( - to bottom, - alpha(@accent_color_300, 0.1), - alpha(@accent_color_500, 0.1) - ); -} - -checkbutton .card.prefer-scheduled { - background-size: 86px 64px, cover, cover; - background-image: - url("resource:///io/elementary/onboarding/appearance-scheduled.svg"), - linear-gradient( - to bottom, - alpha(@accent_color_300, 0.1), - alpha(@accent_color_500, 0.1) - ), - linear-gradient( - 120deg, - white 50%, - mix(@BLACK_300, @BLACK_500, 0.25) 51% - ); -} diff --git a/data/WelcomeView.css b/data/WelcomeView.css deleted file mode 100644 index 821e0a92..00000000 --- a/data/WelcomeView.css +++ /dev/null @@ -1,21 +0,0 @@ -image.logo { - background-position: 50%; - background-size: 100%, cover, 100%; - border: 1px solid @accent_color_900; - border-radius: 6px; - box-shadow: - 0 1px 2px alpha(black, 0.3), - 0 2px 2px alpha(black, 0.1), - inset 0 -1px 0 0 alpha(@highlight_color, 0.2), - inset 0 1px 0 0 alpha(@highlight_color, 0.3), - inset 1px 0 0 0 alpha(@highlight_color, 0.07), - inset -1px 0 0 0 alpha(@highlight_color, 0.07); - color: white; - -gtk-icon-shadow: - 0 1px 1px alpha(black, 0.3), - 0 2px 4px alpha(@accent_color_900, 0.2); - -gtk-icon-style: symbolic; - min-height: 56px; - min-width: 56px; - margin: 4px; -} diff --git a/data/io.elementary.onboarding.gresource.xml b/data/io.elementary.onboarding.gresource.xml index 49200bfa..cb40bae5 100644 --- a/data/io.elementary.onboarding.gresource.xml +++ b/data/io.elementary.onboarding.gresource.xml @@ -2,8 +2,6 @@ Application.css - StyleView.css - WelcomeView.css appearance-default.svg appearance-dark.svg appearance-scheduled.svg diff --git a/src/Views/StyleView.vala b/src/Views/StyleView.vala index 07877b46..80e94ac0 100644 --- a/src/Views/StyleView.vala +++ b/src/Views/StyleView.vala @@ -73,9 +73,6 @@ public class Onboarding.StyleView : AbstractOnboardingView { } construct { - var css_provider = new Gtk.CssProvider (); - css_provider.load_from_resource ("/io/elementary/onboarding/StyleView.css"); - string? user_path = null; try { FDO.Accounts? accounts_service = GLib.Bus.get_proxy_sync ( @@ -106,7 +103,6 @@ public class Onboarding.StyleView : AbstractOnboardingView { prefer_default_card.add_css_class (Granite.STYLE_CLASS_CARD); prefer_default_card.add_css_class (Granite.STYLE_CLASS_ROUNDED); prefer_default_card.add_css_class ("prefer-default"); - prefer_default_card.get_style_context ().add_provider (css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); var prefer_default_radio = new Gtk.CheckButton (); prefer_default_radio.add_css_class ("image-button"); @@ -124,7 +120,6 @@ public class Onboarding.StyleView : AbstractOnboardingView { prefer_dark_card.add_css_class (Granite.STYLE_CLASS_CARD); prefer_dark_card.add_css_class (Granite.STYLE_CLASS_ROUNDED); prefer_dark_card.add_css_class ("prefer-dark"); - prefer_dark_card.get_style_context ().add_provider (css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); var prefer_dark_radio = new Gtk.CheckButton () { group = prefer_default_radio @@ -144,7 +139,6 @@ public class Onboarding.StyleView : AbstractOnboardingView { prefer_scheduled_card.add_css_class (Granite.STYLE_CLASS_CARD); prefer_scheduled_card.add_css_class (Granite.STYLE_CLASS_ROUNDED); prefer_scheduled_card.add_css_class ("prefer-scheduled"); - prefer_scheduled_card.get_style_context ().add_provider (css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); var prefer_scheduled_radio = new Gtk.CheckButton () { group = prefer_default_radio diff --git a/src/Views/WelcomeView.vala b/src/Views/WelcomeView.vala index 54a4f909..86d80e0e 100644 --- a/src/Views/WelcomeView.vala +++ b/src/Views/WelcomeView.vala @@ -43,9 +43,6 @@ public class Onboarding.WelcomeView : AbstractOnboardingView { var file = File.new_for_path (file_path); if (file.query_exists ()) { - var style_provider = new Gtk.CssProvider (); - style_provider.load_from_resource ("io/elementary/onboarding/WelcomeView.css"); - var background_provider = new Gtk.CssProvider (); background_provider.load_from_data ( """ @@ -63,7 +60,6 @@ public class Onboarding.WelcomeView : AbstractOnboardingView { image.pixel_size = 48; image.add_css_class ("logo"); - image.get_style_context ().add_provider (style_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); image.get_style_context ().add_provider (background_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); break; From b640a39b9aaea0a752d866a3cd64c2ac1a08253f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Sun, 14 Jul 2024 14:01:15 -0700 Subject: [PATCH 2/3] Draw desktop previews in CSS --- data/Application.css | 133 +++- data/appearance-dark.svg | 432 ----------- data/appearance-default.svg | 407 ---------- data/appearance-scheduled.svg | 777 -------------------- data/io.elementary.onboarding.gresource.xml | 3 - src/Views/StyleView.vala | 209 ++++-- 6 files changed, 238 insertions(+), 1723 deletions(-) delete mode 100644 data/appearance-dark.svg delete mode 100644 data/appearance-default.svg delete mode 100644 data/appearance-scheduled.svg diff --git a/data/Application.css b/data/Application.css index a52c6c44..454f1b15 100644 --- a/data/Application.css +++ b/data/Application.css @@ -55,49 +55,114 @@ image.logo { margin: 4px; } -checkbutton .card { - background-position: center; - background-repeat: no-repeat; - background-size: 86px 64px, cover; - min-width: 92px; - min-height: 64px; - margin: 6px 6px 12px 12px; +desktop-preview { + min-width: 100px; + min-height: 56px; + margin: 0.5em 0.5em 1em; } -checkbutton .card.prefer-default { - background-color: white; - background-image: - url("resource:///io/elementary/onboarding/appearance-default.svg"), - linear-gradient( - to bottom, - alpha(@accent_color_300, 0.1), - alpha(@accent_color_500, 0.1) - ); +desktop-preview .shell { + transition: all 300ms ease-in-out; } -checkbutton .card.prefer-dark { - background-color: mix(@BLACK_300, @BLACK_500, 0.25); +desktop-preview.scheduled .shell { + background-size: cover; background-image: - url("resource:///io/elementary/onboarding/appearance-dark.svg"), linear-gradient( - to bottom, - alpha(@accent_color_300, 0.1), - alpha(@accent_color_500, 0.1) + to right, + transparent 50%, + alpha(black, 0.3) 50% ); } -checkbutton .card.prefer-scheduled { - background-size: 86px 64px, cover, cover; - background-image: - url("resource:///io/elementary/onboarding/appearance-scheduled.svg"), - linear-gradient( - to bottom, - alpha(@accent_color_300, 0.1), - alpha(@accent_color_500, 0.1) - ), +desktop-preview.dim .shell { + background-color: alpha(black, 0.3); +} + +desktop-preview .dock { + border-radius: 2px; + min-height: 0.6em; + min-width: 5em; + background: alpha(#fafafa, 0.6); + box-shadow: + inset 0 -1px 0 0 alpha(white, 0.1), + inset 0 1px 0 0 alpha(white, 0.15), + inset 1px 0 0 0 alpha(white, 0.035), + inset -1px 0 0 0 alpha(white, 0.035), + 0 0 0 1px alpha(black, 0.1), + 0 1px 3px alpha(black, 0.10), + 0 3px 9px alpha(black, 0.15); + margin: 0.25em; +} + +desktop-preview.dark .dock { + background: alpha(#444, 0.6); + box-shadow: + inset 0 -1px 0 0 alpha(white, 0.05), + inset 0 1px 0 0 alpha(white, 0.07), + inset 1px 0 0 0 alpha(white, 0.0175), + inset -1px 0 0 0 alpha(white, 0.0175), + 0 0 0 1px alpha(black, 0.7), + 0 1px 2px alpha(black, 0.1), + 0 2px 4px alpha(black, 0.3); +} + +desktop-preview.scheduled .dock { + background: linear-gradient( - 120deg, - white 50%, - mix(@BLACK_300, @BLACK_500, 0.25) 51% + to right, + alpha(#fafafa, 0.6) 50%, + alpha(#444, 0.6) 50% ); + box-shadow: + inset 0 -1px 0 0 alpha(white, 0.05), + inset 0 1px 0 0 alpha(white, 0.07), + inset 1px 0 0 0 alpha(white, 0.0175), + inset -1px 0 0 0 alpha(white, 0.0175), + 0 0 0 1px alpha(black, 0.7), + 0 1px 2px alpha(black, 0.1), + 0 2px 4px alpha(black, 0.3); +} + +desktop-preview .window { + border-radius: 0.25em; + min-height: 1.75em; + min-width: 2.25em; +} + +desktop-preview .window.back { + margin-right: 1.75em; + margin-bottom: 1.75em; +} + +desktop-preview .window.front { + margin-left: 1.75em; + margin-top: 0; +} + +desktop-preview .window.front, +desktop-preview.scheduled .window.back { + background: #fafafa; + box-shadow: + inset 0 1px 0 0 white, + inset 0 -1px 0 0 alpha(white, 0.8), + inset 1px 0 0 0 alpha(white, 0.5), + inset -1px 0 0 0 alpha(white, 0.5), + 0 0 0 1px alpha(black, 0.1), + 0 1px 2px alpha(black, 0.1), + 0 2px 4px alpha(black, 0.3); +} + +desktop-preview .window.back, +desktop-preview.dark .window.front, +desktop-preview.scheduled .window.front { + background: #444; + box-shadow: + inset 0 1px 0 0 alpha(white, 0.15), + inset 0 -1px 0 0 alpha(white, 0.1), + inset 1px 0 0 0 alpha(white, 0.035), + inset -1px 0 0 0 alpha(white, 0.035), + 0 0 0 1px alpha(black, 0.7), + 0 1px 2px alpha(black, 0.1), + 0 2px 4px alpha(black, 0.3); } diff --git a/data/appearance-dark.svg b/data/appearance-dark.svg deleted file mode 100644 index d3d04005..00000000 --- a/data/appearance-dark.svg +++ /dev/null @@ -1,432 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/appearance-default.svg b/data/appearance-default.svg deleted file mode 100644 index c1a47979..00000000 --- a/data/appearance-default.svg +++ /dev/null @@ -1,407 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/appearance-scheduled.svg b/data/appearance-scheduled.svg deleted file mode 100644 index 0767980c..00000000 --- a/data/appearance-scheduled.svg +++ /dev/null @@ -1,777 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/io.elementary.onboarding.gresource.xml b/data/io.elementary.onboarding.gresource.xml index cb40bae5..e0b0a95a 100644 --- a/data/io.elementary.onboarding.gresource.xml +++ b/data/io.elementary.onboarding.gresource.xml @@ -2,9 +2,6 @@ Application.css - appearance-default.svg - appearance-dark.svg - appearance-scheduled.svg folder-screenshots-icon/24.svg diff --git a/src/Views/StyleView.vala b/src/Views/StyleView.vala index 80e94ac0..91563077 100644 --- a/src/Views/StyleView.vala +++ b/src/Views/StyleView.vala @@ -99,16 +99,13 @@ public class Onboarding.StyleView : AbstractOnboardingView { } } - var prefer_default_card = new Gtk.Grid (); - prefer_default_card.add_css_class (Granite.STYLE_CLASS_CARD); - prefer_default_card.add_css_class (Granite.STYLE_CLASS_ROUNDED); - prefer_default_card.add_css_class ("prefer-default"); + var default_preview = new DesktopPreview ("default"); var prefer_default_radio = new Gtk.CheckButton (); prefer_default_radio.add_css_class ("image-button"); var prefer_default_grid = new Gtk.Grid (); - prefer_default_grid.attach (prefer_default_card, 0, 0); + prefer_default_grid.attach (default_preview, 0, 0); prefer_default_grid.attach ( new Gtk.Label (_("Default")) { mnemonic_widget = prefer_default_radio @@ -116,10 +113,7 @@ public class Onboarding.StyleView : AbstractOnboardingView { ); prefer_default_grid.set_parent (prefer_default_radio); - var prefer_dark_card = new Gtk.Grid (); - prefer_dark_card.add_css_class (Granite.STYLE_CLASS_CARD); - prefer_dark_card.add_css_class (Granite.STYLE_CLASS_ROUNDED); - prefer_dark_card.add_css_class ("prefer-dark"); + var dark_preview = new DesktopPreview ("dark"); var prefer_dark_radio = new Gtk.CheckButton () { group = prefer_default_radio @@ -127,7 +121,7 @@ public class Onboarding.StyleView : AbstractOnboardingView { prefer_dark_radio.add_css_class ("image-button"); var prefer_dark_grid = new Gtk.Grid (); - prefer_dark_grid.attach (prefer_dark_card, 0, 0); + prefer_dark_grid.attach (dark_preview, 0, 0); prefer_dark_grid.attach ( new Gtk.Label (_("Dark")) { mnemonic_widget = prefer_dark_radio @@ -135,10 +129,7 @@ public class Onboarding.StyleView : AbstractOnboardingView { ); prefer_dark_grid.set_parent (prefer_dark_radio); - var prefer_scheduled_card = new Gtk.Grid (); - prefer_scheduled_card.add_css_class (Granite.STYLE_CLASS_CARD); - prefer_scheduled_card.add_css_class (Granite.STYLE_CLASS_ROUNDED); - prefer_scheduled_card.add_css_class ("prefer-scheduled"); + var scheduled_preview = new DesktopPreview ("scheduled"); var prefer_scheduled_radio = new Gtk.CheckButton () { group = prefer_default_radio @@ -146,7 +137,7 @@ public class Onboarding.StyleView : AbstractOnboardingView { prefer_scheduled_radio.add_css_class ("image-button"); var prefer_scheduled_grid = new Gtk.Grid (); - prefer_scheduled_grid.attach (prefer_scheduled_card, 0, 0); + prefer_scheduled_grid.attach (scheduled_preview, 0, 0); prefer_scheduled_grid.attach ( new Gtk.Label (_("Sunset to Sunrise")) { mnemonic_widget = prefer_scheduled_radio @@ -231,61 +222,6 @@ public class Onboarding.StyleView : AbstractOnboardingView { custom_bin.append (color_scheme_box); custom_bin.append (accent_box); - var background_settings = new Settings ("org.gnome.desktop.background"); - - var background_uri = background_settings.get_string ("picture-uri"); - var file = File.new_for_uri (background_uri); - if (file.query_exists ()) { - var background_provider = new Gtk.CssProvider (); - background_provider.load_from_data ( - """ - .prefer-default { - background-image: - url("resource:///io/elementary/onboarding/appearance-default.svg"), - url("%s"); - } - - .prefer-dark { - background-size: 86px 64px, cover, cover; - background-image: - url("resource:///io/elementary/onboarding/appearance-dark.svg"), - linear-gradient( - to bottom, - alpha(black, 0.45), - alpha(black, 0.45) - ), - url("%s"); - } - - .prefer-scheduled { - background-image: - url("resource:///io/elementary/onboarding/appearance-scheduled.svg"), - linear-gradient( - 120deg, - transparent 50%, - alpha(black, 0.45) 51% - ), - url("%s"); - } - """.printf (background_uri, background_uri, background_uri).data - ); - - prefer_default_card.get_style_context ().add_provider ( - background_provider, - Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION - ); - - prefer_dark_card.get_style_context ().add_provider ( - background_provider, - Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION - ); - - prefer_scheduled_card.get_style_context ().add_provider ( - background_provider, - Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION - ); - } - var settings = new GLib.Settings ("io.elementary.settings-daemon.prefers-color-scheme"); if (settings.get_string ("prefer-dark-schedule") == "sunset-to-sunrise") { @@ -311,6 +247,139 @@ public class Onboarding.StyleView : AbstractOnboardingView { }); } + private class DesktopPreview : Gtk.Widget { + private static Settings pantheon_settings; + private static Settings gnome_settings; + private Gtk.Picture picture; + + class construct { + set_css_name ("desktop-preview"); + } + + static construct { + set_layout_manager_type (typeof (Gtk.BinLayout)); + + pantheon_settings = new Settings ("io.elementary.desktop.background"); + gnome_settings = new Settings ("org.gnome.desktop.background"); + } + + public DesktopPreview (string style_class) { + picture = new Gtk.Picture () { + content_fit = COVER + }; + + var dock = new Gtk.Box (HORIZONTAL, 0) { + halign = CENTER, + valign = END + }; + dock.add_css_class ("dock"); + + var window_back = new Gtk.Box (HORIZONTAL, 0) { + halign = CENTER, + valign = CENTER + }; + window_back.add_css_class ("window"); + window_back.add_css_class ("back"); + + var window_front = new Gtk.Box (HORIZONTAL, 0) { + halign = CENTER, + valign = CENTER + }; + window_front.add_css_class ("window"); + window_front.add_css_class ("front"); + + var shell = new Gtk.Box (HORIZONTAL, 0); + shell.add_css_class ("shell"); + + var overlay = new Gtk.Overlay () { + child = picture, + overflow = HIDDEN + }; + overlay.add_overlay (shell); + overlay.add_overlay (dock); + overlay.add_overlay (window_back); + overlay.add_overlay (window_front); + overlay.add_css_class (Granite.STYLE_CLASS_CARD); + overlay.add_css_class (Granite.STYLE_CLASS_ROUNDED); + + var frame = new Gtk.AspectFrame (0.5f, 0.5f, (float) 92 / 64, false) { + child = overlay + }; + frame.set_parent (this); + + add_css_class (style_class); + + update_picture (); + gnome_settings.changed.connect (update_picture); + + if (has_css_class ("dark")) { + update_dim (); + pantheon_settings.changed.connect (update_dim); + } + + realize.connect (() => { + var monitor = Gdk.Display.get_default ().get_monitor_at_surface ( + (((Gtk.Application) Application.get_default ()).active_window).get_surface () + ); + + frame.ratio = (float) monitor.geometry.width / monitor.geometry.height; + }); + } + + private void update_dim () { + if (pantheon_settings.get_boolean ("dim-wallpaper-in-dark-style")) { + add_css_class ("dim"); + } else { + remove_css_class ("dim"); + } + } + + private void update_picture () { + if (gnome_settings.get_string ("picture-options") == "none") { + Gdk.RGBA rgba = {}; + rgba.parse (gnome_settings.get_string ("primary-color")); + + var pixbuf = new Gdk.Pixbuf (RGB, false, 8, 500, 500); + pixbuf.fill (rgba_to_pixel (rgba)); + + picture.paintable = Gdk.Texture.for_pixbuf (pixbuf); + return; + } + + if (has_css_class ("dark")) { + var dark_file = File.new_for_uri ( + gnome_settings.get_string ("picture-uri-dark") + ); + + if (dark_file.query_exists ()) { + picture.file = dark_file; + return; + } + } + + picture.file = File.new_for_uri ( + gnome_settings.get_string ("picture-uri") + ); + } + + // Borrowed from + // https://github.com/GNOME/california/blob/master/src/util/util-gfx.vala + private static uint32 rgba_to_pixel (Gdk.RGBA rgba) { + return (uint32) fp_to_uint8 (rgba.red) << 24 + | (uint32) fp_to_uint8 (rgba.green) << 16 + | (uint32) fp_to_uint8 (rgba.blue) << 8 + | (uint32) fp_to_uint8 (rgba.alpha); + } + + private static uint8 fp_to_uint8 (double value) { + return (uint8) (value * uint8.MAX); + } + + ~DesktopPreview () { + get_first_child ().unparent (); + } + } + private class PrefersAccentColorButton : Gtk.CheckButton { public AccentColor color { get; construct; } public Pantheon.AccountsService? pantheon_act { get; construct; default = null; } From f9c6d6efafd019e542611a4aeece287b9a622cde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Sun, 14 Jul 2024 14:07:39 -0700 Subject: [PATCH 3/3] Make default ratio 4/3 --- src/Views/StyleView.vala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Views/StyleView.vala b/src/Views/StyleView.vala index 91563077..c73da9a9 100644 --- a/src/Views/StyleView.vala +++ b/src/Views/StyleView.vala @@ -302,7 +302,7 @@ public class Onboarding.StyleView : AbstractOnboardingView { overlay.add_css_class (Granite.STYLE_CLASS_CARD); overlay.add_css_class (Granite.STYLE_CLASS_ROUNDED); - var frame = new Gtk.AspectFrame (0.5f, 0.5f, (float) 92 / 64, false) { + var frame = new Gtk.AspectFrame (0.5f, 0.5f, (float) 4 / 3, false) { child = overlay }; frame.set_parent (this);