49 lines
1.6 KiB
C++
49 lines
1.6 KiB
C++
/*
|
|
* persistence.cpp
|
|
* Settings persistence helpers for the embedded desktop settings app
|
|
* Copyright (c) 2026 Daniel Hammer
|
|
*/
|
|
|
|
#include "settings_internal.hpp"
|
|
|
|
namespace settings_app {
|
|
|
|
static int64_t color_to_int(Color c) {
|
|
return ((int64_t)c.r << 16) | ((int64_t)c.g << 8) | c.b;
|
|
}
|
|
|
|
void settings_persist(SettingsState* st) {
|
|
DesktopSettings& s = st->desktop->settings;
|
|
const char* user = st->desktop->current_user;
|
|
|
|
montauk::toml::Doc doc;
|
|
doc.init();
|
|
|
|
// Background mode
|
|
const char* mode = s.bg_image ? "image" : (s.bg_gradient ? "gradient" : "solid");
|
|
montauk::config::set_string(&doc, "background.mode", mode);
|
|
|
|
// Wallpaper path
|
|
if (s.bg_image && s.bg_image_path[0])
|
|
montauk::config::set_string(&doc, "wallpaper.path", s.bg_image_path);
|
|
|
|
// Background colors
|
|
montauk::config::set_int(&doc, "background.solid_color", color_to_int(s.bg_solid));
|
|
montauk::config::set_int(&doc, "background.grad_top", color_to_int(s.bg_grad_top));
|
|
montauk::config::set_int(&doc, "background.grad_bottom", color_to_int(s.bg_grad_bottom));
|
|
|
|
// Appearance
|
|
montauk::config::set_int(&doc, "appearance.panel_color", color_to_int(s.panel_color));
|
|
montauk::config::set_int(&doc, "appearance.accent_color", color_to_int(s.accent_color));
|
|
|
|
// Display
|
|
montauk::config::set_int(&doc, "display.ui_scale", s.ui_scale);
|
|
montauk::config::set_bool(&doc, "display.clock_24h", s.clock_24h);
|
|
montauk::config::set_bool(&doc, "display.show_shadows", s.show_shadows);
|
|
|
|
montauk::config::save_user(user, "desktop", &doc);
|
|
doc.destroy();
|
|
}
|
|
|
|
} // namespace settings_app
|