system settings
git clone https://git.lucas.co/cce-system-interface.git
Implement slider corner radius spin box and configuration settings
Cargo.toml | 6 +-
Makefile | 2 +-
src/input_handler.rs | 4 +-
src/main.rs | 10 +--
src/pages/interface.rs | 177 +++++++++++++++++++++++++++++++++++++++--------
src/pages/storage.rs | 4 +-
src/pages/system_info.rs | 4 +-
src/renderer.rs | 6 +-
8 files changed, 168 insertions(+), 45 deletions(-)
diff --git a/Cargo.toml b/Cargo.toml
index 7f78ce3..5a09a69 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,5 +1,5 @@
[package]
-name = "cce-system-interface"
+name = "cce-system-settings"
version = "0.1.0"
edition = "2021"
@@ -23,9 +23,9 @@ serde_json = "1"
reqwest = { version = "0.12", features = ["json"] }
[lib]
-name = "cce_system_interface"
+name = "cce_system_settings"
path = "src/lib.rs"
[[bin]]
path = "src/main.rs"
-name = "cce-system-interface"
+name = "cce-system-settings"
diff --git a/Makefile b/Makefile
index 7254244..a046f21 100644
--- a/Makefile
+++ b/Makefile
@@ -5,7 +5,7 @@ build:
install: build
mkdir -p ~/.local/bin
- install -m 755 ../target/release/cce-system-interface ~/.local/bin/cce-system-interface
+ install -m 755 ../target/release/cce-system-settings ~/.local/bin/cce-system-settings
run:
cargo run
diff --git a/src/input_handler.rs b/src/input_handler.rs
index db73fc8..bd33375 100644
--- a/src/input_handler.rs
+++ b/src/input_handler.rs
@@ -1,6 +1,6 @@
use crate::SystemInterface;
-use cce_system_interface::app::AppAction;
-use cce_system_interface::pages::{self, Page};
+use cce_system_settings::app::AppAction;
+use cce_system_settings::pages::{self, Page};
use cce_ui::widget::Element;
impl SystemInterface {
diff --git a/src/main.rs b/src/main.rs
index 34b4c07..b21c504 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,8 +1,8 @@
use cce_ui::widget::{Finger, hover_animation, Element, PageSelector};
use glyphon::{Attrs, Buffer, FontSystem, Metrics};
-use cce_system_interface::app::{AppAction, AppState};
-use cce_system_interface::pages::{self, Page};
+use cce_system_settings::app::{AppAction, AppState};
+use cce_system_settings::pages::{self, Page};
mod input_handler;
mod renderer;
@@ -232,7 +232,7 @@ impl cce_ui::engine::Application for SystemInterface {
let current_page_shared = std::sync::Arc::new(std::sync::atomic::AtomicU8::new(initial_page_idx as u8));
let (watchers, tx_backup, rx_backup, tx_update, rx_update) =
- cce_system_interface::watchers::spawn_all(current_page_shared.clone());
+ cce_system_settings::watchers::spawn_all(current_page_shared.clone());
let (sans_family, serif_family, monospace_family, _, _, _, _) = pages::interface::read_preferred_fonts();
@@ -340,8 +340,8 @@ impl cce_ui::engine::Application for SystemInterface {
fn settings(&self) -> cce_ui::engine::WindowSettings {
cce_ui::engine::WindowSettings {
- title: "CCE System Interface".to_string(),
- app_id: "cce-system-interface".to_string(),
+ title: "CCE System Settings".to_string(),
+ app_id: "cce-system-settings".to_string(),
width: 820,
height: 680,
fullscreen: false,
diff --git a/src/pages/interface.rs b/src/pages/interface.rs
index 9984653..5f8aa6d 100644
--- a/src/pages/interface.rs
+++ b/src/pages/interface.rs
@@ -8,7 +8,7 @@ use cce_ui::widget::{
};
const CONFIG_PATH: &str = "/home/lsgalante/.config/cce/config.json";
-const LINKS_PATH: &str = "/home/lsgalante/.config/cce/cce-system-interface/links.json";
+const LINKS_PATH: &str = "/home/lsgalante/.config/cce/cce-system-settings/links.json";
thread_local! {
static TEST_CONFIG_PATH: std::cell::RefCell<Option<String>> = std::cell::RefCell::new(None);
@@ -250,6 +250,8 @@ pub struct InterfaceState {
pub textbox_corner_radius_spinbox: Spinbox,
pub slider_height: u16,
pub slider_height_spinbox: Spinbox,
+ pub slider_corner_radius: u16,
+ pub slider_corner_radius_spinbox: Spinbox,
pub font_selector_height: u16,
pub font_selector_height_spinbox: Spinbox,
pub font_selector_corner_radius: u16,
@@ -333,9 +335,9 @@ impl Default for InterfaceState {
desktop_background_color: [0, 0, 0],
desktop_grid_color: [255, 255, 255, 13],
desktop_grid_scale: 100,
- desktop_grid_scale_spinbox: Spinbox::new(100, 5, 1000, 5).with_label("Grid Scale").with_config(CONFIG_PATH, "desktop_grid_scale"),
+ desktop_grid_scale_spinbox: Spinbox::new(100, 5, 1000, 5).with_label("Grid Cell Size").with_config(CONFIG_PATH, "desktop_grid_scale"),
desktop_line_width: 1,
- desktop_line_width_spinbox: Spinbox::new(1, 1, 20, 1).with_label("Line Width").with_unit("px").with_config(CONFIG_PATH, "desktop_line_width"),
+ desktop_line_width_spinbox: Spinbox::new(1, 0, 100, 1).with_label("Grid Gap").with_unit("px").with_config(CONFIG_PATH, "desktop_line_width"),
high_color: [0x3e, 0x3e, 0x3e],
disabled_color: [0x55, 0x55, 0x55],
visual_guides_color: [0xff, 0x8c, 0x00],
@@ -429,6 +431,8 @@ impl Default for InterfaceState {
textbox_corner_radius_spinbox: Spinbox::new(4, 0, 50, 1).with_label("Border Radius").with_unit("px").with_config(CONFIG_PATH, "textbox_corner_radius"),
slider_height: 28,
slider_height_spinbox: Spinbox::new(28, 10, 100, 1).with_label("Height").with_unit("px").with_config(CONFIG_PATH, "slider_height"),
+ slider_corner_radius: 4,
+ slider_corner_radius_spinbox: Spinbox::new(4, 0, 50, 1).with_label("Corner Radius").with_unit("px").with_config(CONFIG_PATH, "slider_corner_radius"),
font_selector_height: 44,
font_selector_height_spinbox: Spinbox::new(44, 10, 100, 1).with_label("Height").with_unit("px").with_config(CONFIG_PATH, "font_selector_height"),
font_selector_corner_radius: 4,
@@ -575,6 +579,7 @@ pub enum InterfaceMessage {
SetTextboxHeight(u16),
SetTextboxCornerRadius(u16),
SetSliderHeight(u16),
+ SetSliderCornerRadius(u16),
SetFontSelectorHeight(u16),
SetFontSelectorCornerRadius(u16),
SetDropdownHeight(u16),
@@ -710,6 +715,7 @@ pub fn read_interface_config() -> InterfaceState {
let textbox_height = parse_u16_from(&content, "textbox_height", 44);
let textbox_corner_radius = parse_u16_from(&content, "textbox_corner_radius", 4);
let slider_height = parse_u16_from(&content, "slider_height", 28);
+ let slider_corner_radius = parse_u16_from(&content, "slider_corner_radius", 4);
let font_selector_height = parse_u16_from(&content, "font_selector_height", 44);
let font_selector_corner_radius = parse_u16_from(&content, "font_selector_corner_radius", 4);
let dropdown_height = parse_u16_from(&content, "dropdown_height", 44);
@@ -749,9 +755,9 @@ pub fn read_interface_config() -> InterfaceState {
desktop_background_color: bg,
desktop_grid_color,
desktop_grid_scale,
- desktop_grid_scale_spinbox: Spinbox::new(desktop_grid_scale as i32, 5, 1000, 5).with_label("Grid Scale").with_config(CONFIG_PATH, "desktop_grid_scale"),
+ desktop_grid_scale_spinbox: Spinbox::new(desktop_grid_scale as i32, 5, 1000, 5).with_label("Grid Cell Size").with_config(CONFIG_PATH, "desktop_grid_scale"),
desktop_line_width,
- desktop_line_width_spinbox: Spinbox::new(desktop_line_width as i32, 1, 20, 1).with_label("Line Width").with_unit("px").with_config(CONFIG_PATH, "desktop_line_width"),
+ desktop_line_width_spinbox: Spinbox::new(desktop_line_width as i32, 0, 100, 1).with_label("Grid Gap").with_unit("px").with_config(CONFIG_PATH, "desktop_line_width"),
high_color: border,
disabled_color: disabled,
visual_guides_color: visual_guides,
@@ -845,6 +851,8 @@ pub fn read_interface_config() -> InterfaceState {
textbox_corner_radius_spinbox: Spinbox::new(textbox_corner_radius as i32, 0, 50, 1).with_label("Border Radius").with_unit("px").with_config(CONFIG_PATH, "textbox_corner_radius"),
slider_height,
slider_height_spinbox: Spinbox::new(slider_height as i32, 10, 100, 1).with_label("Height").with_unit("px").with_config(CONFIG_PATH, "slider_height"),
+ slider_corner_radius,
+ slider_corner_radius_spinbox: Spinbox::new(slider_corner_radius as i32, 0, 50, 1).with_label("Corner Radius").with_unit("px").with_config(CONFIG_PATH, "slider_corner_radius"),
font_selector_height,
font_selector_height_spinbox: Spinbox::new(font_selector_height as i32, 10, 100, 1).with_label("Height").with_unit("px").with_config(CONFIG_PATH, "font_selector_height"),
font_selector_corner_radius,
@@ -1364,6 +1372,13 @@ pub fn propagate_links(state: &mut InterfaceState, key: &str, val_str: &str) {
apply_slider_height(val);
}
}
+ "slider_corner_radius" => {
+ if let Ok(val) = val_str.parse::<u16>() {
+ state.slider_corner_radius = val;
+ state.slider_corner_radius_spinbox.value = val as i32;
+ apply_slider_corner_radius(val);
+ }
+ }
"font_selector_height" => {
if let Ok(val) = val_str.parse::<u16>() {
state.font_selector_height = val;
@@ -1921,6 +1936,11 @@ fn apply_slider_height(height: u16) {
cce_ui::layout::set_slider_height(height as f32);
}
+fn apply_slider_corner_radius(radius: u16) {
+ write_config_value("slider_corner_radius", &radius.to_string());
+ cce_ui::layout::set_slider_corner_radius(radius as f32);
+}
+
fn apply_font_selector_height(height: u16) {
write_config_value("font_selector_height", &height.to_string());
@@ -2431,6 +2451,8 @@ pub fn view(state: &mut InterfaceState, cx: f32, cy: f32, cw: f32, ch: f32, sec_
subsec.widget_full(&mut state.color_selectors[4], 40.0, ctx);
state.slider_height_spinbox.value = state.slider_height as i32;
subsec.widget_full(&mut state.slider_height_spinbox, 44.0, ctx);
+ state.slider_corner_radius_spinbox.value = state.slider_corner_radius as i32;
+ subsec.widget_full(&mut state.slider_corner_radius_spinbox, 44.0, ctx);
});
@@ -3085,6 +3107,11 @@ pub fn update(state: &mut InterfaceState, msg: InterfaceMessage) {
apply_slider_height(height);
propagate_links(state, "slider_height", &height.to_string());
}
+ InterfaceMessage::SetSliderCornerRadius(radius) => {
+ state.slider_corner_radius = radius;
+ apply_slider_corner_radius(radius);
+ propagate_links(state, "slider_corner_radius", &radius.to_string());
+ }
InterfaceMessage::SetFontSelectorHeight(height) => {
state.font_selector_height = height;
apply_font_selector_height(height);
@@ -4276,6 +4303,34 @@ mod tests {
let _ = fs::remove_file(path_str);
}
+ #[test]
+ fn test_read_write_slider_corner_radius() {
+ let dir = std::env::temp_dir();
+ let path = dir.join("test_slider_corner_radius_config.toml");
+ let path_str = path.to_str().unwrap();
+
+ // 1. Initial configuration
+ let initial_content = "{\"layout\": {\"gap\": 18, \"border_color\": \"#374673\"}}";
+ fs::write(path_str, initial_content).unwrap();
+
+ // 2. Parse slider_corner_radius when missing (should return default 4)
+ let content = fs::read_to_string(path_str).unwrap();
+ let val = parse_u16_from(&content, "slider_corner_radius", 4);
+ assert_eq!(val, 4);
+
+ // 3. Write slider_corner_radius config
+ assert!(write_config_value_path(path_str, "slider_corner_radius", "6"));
+ let updated = fs::read_to_string(path_str).unwrap();
+ assert!(updated.contains("\"slider_corner_radius\": 6"));
+
+ // 4. Parse slider_corner_radius when present (should return written value 6)
+ let val2 = parse_u16_from(&updated, "slider_corner_radius", 4);
+ assert_eq!(val2, 6);
+
+ // Clean up
+ let _ = fs::remove_file(path_str);
+ }
+
#[test]
fn test_read_write_plate_opacity() {
let dir = std::env::temp_dir();
@@ -4980,6 +5035,9 @@ mod tests {
#[test]
fn test_widget_value_linking() {
let original_links = fs::read_to_string(LINKS_PATH).unwrap_or_default();
+ if let Some(parent) = std::path::Path::new(LINKS_PATH).parent() {
+ fs::create_dir_all(parent).unwrap();
+ }
let test_links = r#"{
"spinbox_height": "textbox_height",
"textbox_height": "dropdown_height"
@@ -5015,6 +5073,13 @@ mod tests {
let original_config = fs::read_to_string(CONFIG_PATH).unwrap_or_default();
let original_links = fs::read_to_string(LINKS_PATH).unwrap_or_default();
+ if let Some(parent) = std::path::Path::new(CONFIG_PATH).parent() {
+ fs::create_dir_all(parent).unwrap();
+ }
+ if let Some(parent) = std::path::Path::new(LINKS_PATH).parent() {
+ fs::create_dir_all(parent).unwrap();
+ }
+
let test_config = "{\"layout\": {\"spinbox_height\": 28, \"textbox_height\": 28, \"dropdown_height\": 28}}";
fs::write(CONFIG_PATH, test_config).unwrap();
@@ -5412,6 +5477,8 @@ impl crate::pages::AppPage for InterfaceState {
self.textbox_corner_radius_spinbox.set_parent(None, ctx);
self.slider_height_spinbox.clear_children(ctx);
self.slider_height_spinbox.set_parent(None, ctx);
+ self.slider_corner_radius_spinbox.clear_children(ctx);
+ self.slider_corner_radius_spinbox.set_parent(None, ctx);
self.color_selector_font_selector.clear_children(ctx);
self.color_selector_font_selector.set_parent(None, ctx);
self.menubar_font_selector.clear_children(ctx);
@@ -5551,27 +5618,72 @@ impl crate::pages::AppPage for InterfaceState {
// Section 3: Controls
cce_ui::widget::link_parent_child(&mut sec_containers[3], &mut self.color_selectors[5], ctx);
+ // Slider
cce_ui::widget::link_parent_child(&mut sec_containers[3], &mut self.color_selectors[4], ctx);
cce_ui::widget::link_parent_child(&mut sec_containers[3], &mut self.slider_height_spinbox, ctx);
+ cce_ui::widget::link_parent_child(&mut sec_containers[3], &mut self.slider_corner_radius_spinbox, ctx);
+ // MenuBar
+ cce_ui::widget::link_parent_child(&mut sec_containers[3], &mut self.color_selectors[8], ctx);
+ cce_ui::widget::link_parent_child(&mut sec_containers[3], &mut self.color_selectors[10], ctx);
+ cce_ui::widget::link_parent_child(&mut sec_containers[3], &mut self.menubar_font_selector, ctx);
+ cce_ui::widget::link_parent_child(&mut sec_containers[3], &mut self.menubar_opacity_spinbox, ctx);
+ // Toggle
+ cce_ui::widget::link_parent_child(&mut sec_containers[3], &mut self.color_selectors[11], ctx);
+ cce_ui::widget::link_parent_child(&mut sec_containers[3], &mut self.color_selectors[12], ctx);
+ cce_ui::widget::link_parent_child(&mut sec_containers[3], &mut self.toggle_height_spinbox, ctx);
+ cce_ui::widget::link_parent_child(&mut sec_containers[3], &mut self.toggle_corner_radius_spinbox, ctx);
+ // Breadcrumb
+ cce_ui::widget::link_parent_child(&mut sec_containers[3], &mut self.color_selectors[14], ctx);
+ cce_ui::widget::link_parent_child(&mut sec_containers[3], &mut self.breadcrumb_font_selector, ctx);
+ // Spinbox
+ cce_ui::widget::link_parent_child(&mut sec_containers[3], &mut self.spinbox_height_spinbox, ctx);
+ cce_ui::widget::link_parent_child(&mut sec_containers[3], &mut self.spinbox_corner_radius_spinbox, ctx);
+ // ColorSelector
+ cce_ui::widget::link_parent_child(&mut sec_containers[3], &mut self.color_selector_height_spinbox, ctx);
+ cce_ui::widget::link_parent_child(&mut sec_containers[3], &mut self.color_selector_preview_corner_radius_spinbox, ctx);
+ cce_ui::widget::link_parent_child(&mut sec_containers[3], &mut self.color_selector_preview_margin_spinbox, ctx);
+ cce_ui::widget::link_parent_child(&mut sec_containers[3], &mut self.color_selector_corner_radius_spinbox, ctx);
+ cce_ui::widget::link_parent_child(&mut sec_containers[3], &mut self.color_selector_font_selector, ctx);
+ // Textbox
+ cce_ui::widget::link_parent_child(&mut sec_containers[3], &mut self.textbox_height_spinbox, ctx);
+ cce_ui::widget::link_parent_child(&mut sec_containers[3], &mut self.textbox_corner_radius_spinbox, ctx);
+ // FontSelector
+ cce_ui::widget::link_parent_child(&mut sec_containers[3], &mut self.font_selector_height_spinbox, ctx);
+ cce_ui::widget::link_parent_child(&mut sec_containers[3], &mut self.font_selector_corner_radius_spinbox, ctx);
+ // Dropdown
+ cce_ui::widget::link_parent_child(&mut sec_containers[3], &mut self.dropdown_height_spinbox, ctx);
+ cce_ui::widget::link_parent_child(&mut sec_containers[3], &mut self.dropdown_corner_radius_spinbox, ctx);
+ // Button
+ cce_ui::widget::link_parent_child(&mut sec_containers[3], &mut self.button_corner_radius_spinbox, ctx);
+ // ButtonStrip
+ cce_ui::widget::link_parent_child(&mut sec_containers[3], &mut self.button_padding_spinbox, ctx);
+ cce_ui::widget::link_parent_child(&mut sec_containers[3], &mut self.button_strip_spacing_spinbox, ctx);
+ // Labels
+ cce_ui::widget::link_parent_child(&mut sec_containers[3], &mut self.label_margin_spinbox, ctx);
// Section 4: Indicators
- cce_ui::widget::link_parent_child(&mut sec_containers[4], &mut self.color_selectors[11], ctx);
- cce_ui::widget::link_parent_child(&mut sec_containers[4], &mut self.color_selectors[12], ctx);
- cce_ui::widget::link_parent_child(&mut sec_containers[4], &mut self.toggle_height_spinbox, ctx);
- cce_ui::widget::link_parent_child(&mut sec_containers[4], &mut self.toggle_corner_radius_spinbox, ctx);
+ cce_ui::widget::link_parent_child(&mut sec_containers[4], &mut self.color_selectors[9], ctx);
// Section 5: Notification
cce_ui::widget::link_parent_child(&mut sec_containers[5], &mut self.color_selectors[16], ctx);
- cce_ui::widget::link_parent_child(&mut sec_containers[5], &mut self.color_selectors[17], ctx);
- cce_ui::widget::link_parent_child(&mut sec_containers[5], &mut self.color_selectors[18], ctx);
- cce_ui::widget::link_parent_child(&mut sec_containers[5], &mut self.color_selectors[20], ctx);
cce_ui::widget::link_parent_child(&mut sec_containers[5], &mut self.notification_opacity_spinbox, ctx);
// Section 6: Surfaces
+ // Backplate
+ cce_ui::widget::link_parent_child(&mut sec_containers[6], &mut self.color_selectors[17], ctx);
+ cce_ui::widget::link_parent_child(&mut sec_containers[6], &mut self.backplate_corner_radius_spinbox, ctx);
+ // Plate
cce_ui::widget::link_parent_child(&mut sec_containers[6], &mut self.color_selectors[0], ctx);
+ cce_ui::widget::link_parent_child(&mut sec_containers[6], &mut self.plate_padding_spinbox, ctx);
+ cce_ui::widget::link_parent_child(&mut sec_containers[6], &mut self.plate_opacity_spinbox, ctx);
+ cce_ui::widget::link_parent_child(&mut sec_containers[6], &mut self.plate_corner_radius_spinbox, ctx);
+ // Popover
+ cce_ui::widget::link_parent_child(&mut sec_containers[6], &mut self.color_selectors[15], ctx);
+ // Desktop
cce_ui::widget::link_parent_child(&mut sec_containers[6], &mut self.color_selectors[6], ctx);
cce_ui::widget::link_parent_child(&mut sec_containers[6], &mut self.color_selectors[23], ctx);
- cce_ui::widget::link_parent_child(&mut sec_containers[6], &mut self.color_selectors[21], ctx);
+ cce_ui::widget::link_parent_child(&mut sec_containers[6], &mut self.desktop_grid_scale_spinbox, ctx);
+ cce_ui::widget::link_parent_child(&mut sec_containers[6], &mut self.desktop_line_width_spinbox, ctx);
// Section 7: Fonts
cce_ui::widget::link_parent_child(&mut sec_containers[7], &mut self.sans_box, ctx);
@@ -5591,23 +5703,31 @@ impl crate::pages::AppPage for InterfaceState {
cce_ui::widget::link_parent_child(&mut sec_containers[7], &mut self.terminal_size_box, ctx);
// Section 8: Containers
- cce_ui::widget::link_parent_child(&mut sec_containers[8], &mut self.color_selectors[9], ctx);
- cce_ui::widget::link_parent_child(&mut sec_containers[8], &mut self.color_selectors[10], ctx);
- cce_ui::widget::link_parent_child(&mut sec_containers[8], &mut self.button_corner_radius_spinbox, ctx);
- cce_ui::widget::link_parent_child(&mut sec_containers[8], &mut self.color_selectors[8], ctx);
- cce_ui::widget::link_parent_child(&mut sec_containers[8], &mut self.button_padding_spinbox, ctx);
- cce_ui::widget::link_parent_child(&mut sec_containers[8], &mut self.color_selectors[14], ctx);
- cce_ui::widget::link_parent_child(&mut sec_containers[8], &mut self.color_selectors[15], ctx);
- cce_ui::widget::link_parent_child(&mut sec_containers[8], &mut self.button_strip_spacing_spinbox, ctx);
- cce_ui::widget::link_parent_child(&mut sec_containers[8], &mut self.color_selectors[19], ctx);
- cce_ui::widget::link_parent_child(&mut sec_containers[8], &mut self.section_padding_spinbox, ctx);
- cce_ui::widget::link_parent_child(&mut sec_containers[8], &mut self.color_selectors[13], ctx);
- cce_ui::widget::link_parent_child(&mut sec_containers[8], &mut self.plate_padding_spinbox, ctx);
- cce_ui::widget::link_parent_child(&mut sec_containers[8], &mut self.plate_opacity_spinbox, ctx);
- cce_ui::widget::link_parent_child(&mut sec_containers[8], &mut self.plate_corner_radius_spinbox, ctx);
+ // Page
+ cce_ui::widget::link_parent_child(&mut sec_containers[8], &mut self.color_selectors[18], ctx);
cce_ui::widget::link_parent_child(&mut sec_containers[8], &mut self.page_opacity_spinbox, ctx);
+ // Layer
+ cce_ui::widget::link_parent_child(&mut sec_containers[8], &mut self.color_selectors[19], ctx);
cce_ui::widget::link_parent_child(&mut sec_containers[8], &mut self.layer_opacity_spinbox, ctx);
+ // Section
+ cce_ui::widget::link_parent_child(&mut sec_containers[8], &mut self.section_padding_spinbox, ctx);
cce_ui::widget::link_parent_child(&mut sec_containers[8], &mut self.page_margin_spinbox, ctx);
+ cce_ui::widget::link_parent_child(&mut sec_containers[8], &mut self.section_label_font_selector, ctx);
+ // Nested Section
+ cce_ui::widget::link_parent_child(&mut sec_containers[8], &mut self.label_alignment_menu, ctx);
+ cce_ui::widget::link_parent_child(&mut sec_containers[8], &mut self.label_offset_spinbox, ctx);
+ cce_ui::widget::link_parent_child(&mut sec_containers[8], &mut self.nested_section_label_font_selector, ctx);
+ // ScrollingList
+ cce_ui::widget::link_parent_child(&mut sec_containers[8], &mut self.color_selectors[13], ctx);
+ cce_ui::widget::link_parent_child(&mut sec_containers[8], &mut self.color_selectors[20], ctx);
+ cce_ui::widget::link_parent_child(&mut sec_containers[8], &mut self.color_selectors[21], ctx);
+ // Graph
+ cce_ui::widget::link_parent_child(&mut sec_containers[8], &mut self.graph_show_grid_toggle, ctx);
+ cce_ui::widget::link_parent_child(&mut sec_containers[8], &mut self.graph_snap_enabled_toggle, ctx);
+ cce_ui::widget::link_parent_child(&mut sec_containers[8], &mut self.graph_uniform_background_toggle, ctx);
+ cce_ui::widget::link_parent_child(&mut sec_containers[8], &mut self.graph_cell_opacity_spinbox, ctx);
+ cce_ui::widget::link_parent_child(&mut sec_containers[8], &mut self.graph_gap_opacity_spinbox, ctx);
+ cce_ui::widget::link_parent_child(&mut sec_containers[8], &mut self.graph_gap_width_spinbox, ctx);
// Section 9: Windows
cce_ui::widget::link_parent_child(&mut sec_containers[9], &mut self.windows.side_panel_behavior_menu, ctx);
@@ -5761,6 +5881,9 @@ impl crate::pages::AppPage for InterfaceState {
if self.slider_height_spinbox.take_change() {
actions.push(AppAction::Interface(InterfaceMessage::SetSliderHeight(self.slider_height_spinbox.value as u16)));
}
+ if self.slider_corner_radius_spinbox.take_change() {
+ actions.push(AppAction::Interface(InterfaceMessage::SetSliderCornerRadius(self.slider_corner_radius_spinbox.value as u16)));
+ }
if self.label_alignment_menu.take_change() {
actions.push(AppAction::Interface(InterfaceMessage::SetNestedSectionLabelAlignment(self.label_alignment_menu.selected)));
diff --git a/src/pages/storage.rs b/src/pages/storage.rs
index 9eae334..887ff67 100644
--- a/src/pages/storage.rs
+++ b/src/pages/storage.rs
@@ -43,7 +43,7 @@ pub enum StorageMessage {
}
fn status_path() -> String {
- format!("{}/.config/cce-system-interface/backup_status.txt", std::env::var("HOME").unwrap_or_default())
+ format!("{}/.config/cce-system-settings/backup_status.txt", std::env::var("HOME").unwrap_or_default())
}
pub fn read_backup_status() -> (String, String, Option<String>) {
@@ -111,7 +111,7 @@ pub async fn fetch_storage_state() -> StorageState {
pub async fn run_backup() -> Result<(String, String), String> {
// Run the backup system helper script via pkexec (graphical auth prompt)
let output = tokio::process::Command::new("pkexec")
- .arg("/home/lsgalante/.local/share/cce-system-interface/helpers/backup-system.sh")
+ .arg("/home/lsgalante/.local/share/cce-system-settings/helpers/backup-system.sh")
.output()
.await
.map_err(|e| format!("Failed to run backup script: {}", e))?;
diff --git a/src/pages/system_info.rs b/src/pages/system_info.rs
index 5e3af39..03b851b 100644
--- a/src/pages/system_info.rs
+++ b/src/pages/system_info.rs
@@ -176,14 +176,14 @@ fn format_duration(secs: i64) -> String {
fn spawn_cpu_power(powersave: bool) {
let script = if powersave { "cpu-powersave-on" } else { "cpu-powersave-off" };
let mut cmd = std::process::Command::new("pkexec");
- cmd.arg(format!("/home/lsgalante/.local/share/cce-system-interface/helpers/{}", script));
+ cmd.arg(format!("/home/lsgalante/.local/share/cce-system-settings/helpers/{}", script));
let _ = cce_ui::process::spawn_detached(cmd);
}
fn spawn_gpu_power(powersave: bool) {
let script = if powersave { "gpu-powersave-on" } else { "gpu-powersave-off" };
let mut cmd = std::process::Command::new("pkexec");
- cmd.arg(format!("/home/lsgalante/.local/share/cce-system-interface/helpers/{}", script));
+ cmd.arg(format!("/home/lsgalante/.local/share/cce-system-settings/helpers/{}", script));
let _ = cce_ui::process::spawn_detached(cmd);
}
diff --git a/src/renderer.rs b/src/renderer.rs
index 9615829..d31aab4 100644
--- a/src/renderer.rs
+++ b/src/renderer.rs
@@ -1,6 +1,6 @@
use crate::{SystemInterface, AppWidget, make_text_buffer, make_text_buffer_with_font};
-use cce_system_interface::app::PageContent;
-use cce_system_interface::pages::Page;
+use cce_system_settings::app::PageContent;
+use cce_system_settings::pages::Page;
use cce_ui::widget::{Element, TextItem, PageSelector};
impl SystemInterface {
@@ -316,7 +316,7 @@ impl SystemInterface {
let scale = cce_ui::scale::scale_factor();
let tw = buf.layout_runs().next().map(|r| r.line_w).unwrap_or(0.0) / scale;
let lh = label_size * s * 1.4;
- let mut left_align = btn.left_align;
+ let mut left_align = btn.justify == cce_ui::widget::Justification::Left;
// Auto-detect if inside a ScrollBox to apply left alignment by default
if !left_align && base.w >= 60.0 {