system settings
git clone https://git.lucas.co/cce-system-interface.git
Add Popover section to Controls section of cce-system-interface
src/main.rs | 9 +++++++++
src/pages/interface.rs | 33 ++++++++++++++++++++++++++++++++-
2 files changed, 41 insertions(+), 1 deletion(-)
diff --git a/src/main.rs b/src/main.rs
index 45719eb..40b2147 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -952,6 +952,9 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
// (Breadcrumb child widgets)
link_parent_child(&mut self.page_sec_containers[2], &mut self.app.interface.color_selectors[15], &mut self.ui_context);
+ // (Popover child widgets)
+ link_parent_child(&mut self.page_sec_containers[2], &mut self.app.interface.color_selectors[16], &mut self.ui_context);
+
// (Spinbox child widgets)
link_parent_child(&mut self.page_sec_containers[2], &mut self.app.interface.spinbox_height_spinbox, &mut self.ui_context);
@@ -1488,6 +1491,7 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
13 => self.app.interface.toggle_disabled_color,
14 => self.app.interface.scrollinglist_bg_color,
15 => self.app.interface.breadcrumb_bg_color,
+ 16 => self.app.interface.popover_bg_color,
_ => self.app.interface.low_color,
};
if cp.color != state_color {
@@ -1508,6 +1512,7 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
13 => pages::interface::InterfaceMessage::SetToggleDisabledColor(cp.color),
14 => pages::interface::InterfaceMessage::SetScrollingListBgColor(cp.color),
15 => pages::interface::InterfaceMessage::SetBreadcrumbBgColor(cp.color),
+ 16 => pages::interface::InterfaceMessage::SetPopoverBgColor(cp.color),
_ => pages::interface::InterfaceMessage::SetLowColor(cp.color),
}));
color_changed = true;
@@ -2640,6 +2645,7 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
13 => pages::interface::InterfaceMessage::PickToggleDisabledColor,
14 => pages::interface::InterfaceMessage::PickScrollingListBgColor,
15 => pages::interface::InterfaceMessage::PickBreadcrumbBgColor,
+ 16 => pages::interface::InterfaceMessage::PickPopoverBgColor,
_ => pages::interface::InterfaceMessage::PickLowColor,
}));
}
@@ -2661,6 +2667,7 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
13 => pages::interface::InterfaceMessage::SetToggleDisabledColor(cp.color),
14 => pages::interface::InterfaceMessage::SetScrollingListBgColor(cp.color),
15 => pages::interface::InterfaceMessage::SetBreadcrumbBgColor(cp.color),
+ 16 => pages::interface::InterfaceMessage::SetPopoverBgColor(cp.color),
_ => pages::interface::InterfaceMessage::SetLowColor(cp.color),
}));
}
@@ -3539,6 +3546,7 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
13 => pages::interface::InterfaceMessage::SetToggleDisabledColor(cp.color),
14 => pages::interface::InterfaceMessage::SetScrollingListBgColor(cp.color),
15 => pages::interface::InterfaceMessage::SetBreadcrumbBgColor(cp.color),
+ 16 => pages::interface::InterfaceMessage::SetPopoverBgColor(cp.color),
_ => pages::interface::InterfaceMessage::SetLowColor(cp.color),
}));
}
@@ -4237,6 +4245,7 @@ fn collect_popover_rects(w: &dyn clear_ui::widget::Element, popovers: &mut Vec<(
13 => pages::interface::InterfaceMessage::SetToggleDisabledColor(cp.color),
14 => pages::interface::InterfaceMessage::SetScrollingListBgColor(cp.color),
15 => pages::interface::InterfaceMessage::SetBreadcrumbBgColor(cp.color),
+ 16 => pages::interface::InterfaceMessage::SetPopoverBgColor(cp.color),
_ => pages::interface::InterfaceMessage::SetLowColor(cp.color),
}));
}
diff --git a/src/pages/interface.rs b/src/pages/interface.rs
index 0e4d47f..8a60f22 100644
--- a/src/pages/interface.rs
+++ b/src/pages/interface.rs
@@ -33,6 +33,7 @@ pub struct InterfaceState {
pub toggle_disabled_color: [u8; 3],
pub scrollinglist_bg_color: [u8; 3],
pub breadcrumb_bg_color: [u8; 3],
+ pub popover_bg_color: [u8; 3],
pub color_selectors: Vec<ColorSelector>,
pub menubar_opacity: f32,
pub menubar_opacity_spinbox: Spinbox,
@@ -147,6 +148,7 @@ impl Default for InterfaceState {
toggle_disabled_color: [135, 135, 148],
scrollinglist_bg_color: [81, 81, 97],
breadcrumb_bg_color: [81, 81, 97],
+ popover_bg_color: [81, 81, 97],
color_selectors: vec![
ColorSelector::new([71, 71, 81]).with_label("Low Color"), // 0: Plate - Low Color
ColorSelector::new([0x3e, 0x3e, 0x3e]).with_label("High Color"), // 1: Layout - High Color
@@ -164,6 +166,7 @@ impl Default for InterfaceState {
ColorSelector::new([135, 135, 148]).with_label("Disabled"), // 13: Toggles - Disabled
ColorSelector::new([81, 81, 97]).with_label("Background"), // 14: ScrollingList - Background
ColorSelector::new([81, 81, 97]).with_label("Background"), // 15: Breadcrumb - Background
+ ColorSelector::new([81, 81, 97]).with_label("Background"), // 16: Popover - Background
],
paginator_tab_margin_x: 5,
paginator_tab_margin_y: 10,
@@ -280,6 +283,7 @@ pub enum InterfaceMessage {
SetToggleDisabledColor([u8; 3]),
SetScrollingListBgColor([u8; 3]),
SetBreadcrumbBgColor([u8; 3]),
+ SetPopoverBgColor([u8; 3]),
SetTabMarginX(u16),
SetTabMarginY(u16),
SetTabPaddingX(u16),
@@ -328,6 +332,7 @@ pub enum InterfaceMessage {
PickToggleDisabledColor,
PickScrollingListBgColor,
PickBreadcrumbBgColor,
+ PickPopoverBgColor,
Refreshed(InterfaceState),
TypefaceRefreshed(InterfaceState),
SetSans(String),
@@ -392,6 +397,8 @@ pub fn read_interface_config() -> InterfaceState {
let scrollinglist_bg = parse_color_from_key(&content, "scrollinglist_bg_color", [81, 81, 97]);
let breadcrumb_bg = parse_color_from_key(&content, "breadcrumb_bg_color", scrollinglist_bg);
+
+ let popover_bg = parse_color_from_key(&content, "popover_bg_color", scrollinglist_bg);
let paginator_tab_margin_general = parse_u16_from(&content, "paginator_tab_margin", 999);
let paginator_tab_margin_x = parse_u16_from(&content, "paginator_tab_margin_x", if paginator_tab_margin_general != 999 { paginator_tab_margin_general } else { 5 });
@@ -445,6 +452,7 @@ pub fn read_interface_config() -> InterfaceState {
toggle_disabled_color: toggle_disabled,
scrollinglist_bg_color: scrollinglist_bg,
breadcrumb_bg_color: breadcrumb_bg,
+ popover_bg_color: popover_bg,
color_selectors: vec![
ColorSelector::new(page_low).with_label("Low Color").with_font_family(&color_selector_font), // 0: Plate - Low Color
ColorSelector::new(border).with_label("High Color").with_font_family(&color_selector_font), // 1: Layout - High Color
@@ -462,6 +470,7 @@ pub fn read_interface_config() -> InterfaceState {
ColorSelector::new(toggle_disabled).with_label("Disabled").with_font_family(&color_selector_font), // 13: Toggles - Disabled
ColorSelector::new(scrollinglist_bg).with_label("Background").with_font_family(&color_selector_font), // 14: ScrollingList - Background
ColorSelector::new(breadcrumb_bg).with_label("Background").with_font_family(&color_selector_font), // 15: Breadcrumb - Background
+ ColorSelector::new(popover_bg).with_label("Background").with_font_family(&color_selector_font), // 16: Popover - Background
],
paginator_tab_margin_x,
paginator_tab_margin_y,
@@ -799,6 +808,15 @@ fn apply_breadcrumb_bg_color(rgb: [u8; 3]) {
clear_ui::color::set_breadcrumb_bg_color([r, g, b, 1.0]);
}
+fn apply_popover_bg_color(rgb: [u8; 3]) {
+ let hex = format!("\"#{:02x}{:02x}{:02x}\"", rgb[0], rgb[1], rgb[2]);
+ write_config_value("popover_bg_color", &hex);
+ let r = clear_ui::color::srgb_to_linear(rgb[0] as f32 / 255.0);
+ let g = clear_ui::color::srgb_to_linear(rgb[1] as f32 / 255.0);
+ let b = clear_ui::color::srgb_to_linear(rgb[2] as f32 / 255.0);
+ clear_ui::color::set_popover_bg_color([r, g, b, 1.0]);
+}
+
fn apply_paginator_tab_margin_x(margin: u16) {
write_config_value("paginator_tab_margin_x", &margin.to_string());
send_ipc_command(&format!("layout paginator_tab_margin_x {}", margin));
@@ -1519,6 +1537,15 @@ pub fn view(state: &mut InterfaceState, cx: f32, cy: f32, cw: f32, ch: f32, sec_
});
sec.spacing(12.0);
+ // Popover Section
+ sec.add_section("Popover", false, |subsec| {
+ subsec.spacing(8.0);
+ state.color_selectors[16].color = state.popover_bg_color;
+ subsec.widget_full(&mut state.color_selectors[16], 40.0, ctx);
+ subsec.spacing(8.0);
+ });
+ sec.spacing(12.0);
+
// Spinbox Section
sec.add_section("Spinbox", false, |subsec| {
subsec.spacing(8.0);
@@ -1772,6 +1799,10 @@ pub fn update(state: &mut InterfaceState, msg: InterfaceMessage) {
state.breadcrumb_bg_color = rgb;
apply_breadcrumb_bg_color(rgb);
}
+ InterfaceMessage::SetPopoverBgColor(rgb) => {
+ state.popover_bg_color = rgb;
+ apply_popover_bg_color(rgb);
+ }
InterfaceMessage::SetTabMarginX(margin) => {
state.paginator_tab_margin_x = margin;
apply_paginator_tab_margin_x(margin);
@@ -1925,7 +1956,7 @@ pub fn update(state: &mut InterfaceState, msg: InterfaceMessage) {
send_ipc_command("reload");
status_interface_reload();
}
- InterfaceMessage::PickLowColor | InterfaceMessage::PickHighColor | InterfaceMessage::PickDisabledColor | InterfaceMessage::PickSeparatorColor | InterfaceMessage::PickVisualGuides | InterfaceMessage::PickSliderTrackColor | InterfaceMessage::PickPageLowColor | InterfaceMessage::PickColorBordersColor | InterfaceMessage::PickNormalColor | InterfaceMessage::PickPaginatorSidebarColor | InterfaceMessage::PickPrimaryHighlightColor | InterfaceMessage::PickMenubarTabLabelColor | InterfaceMessage::PickToggleEnabledColor | InterfaceMessage::PickToggleDisabledColor | InterfaceMessage::PickScrollingListBgColor | InterfaceMessage::PickBreadcrumbBgColor => {}
+ InterfaceMessage::PickLowColor | InterfaceMessage::PickHighColor | InterfaceMessage::PickDisabledColor | InterfaceMessage::PickSeparatorColor | InterfaceMessage::PickVisualGuides | InterfaceMessage::PickSliderTrackColor | InterfaceMessage::PickPageLowColor | InterfaceMessage::PickColorBordersColor | InterfaceMessage::PickNormalColor | InterfaceMessage::PickPaginatorSidebarColor | InterfaceMessage::PickPrimaryHighlightColor | InterfaceMessage::PickMenubarTabLabelColor | InterfaceMessage::PickToggleEnabledColor | InterfaceMessage::PickToggleDisabledColor | InterfaceMessage::PickScrollingListBgColor | InterfaceMessage::PickBreadcrumbBgColor | InterfaceMessage::PickPopoverBgColor => {}
InterfaceMessage::Refreshed(new) => {
let was_mx_hovered = state.tab_margin_spinbox_x.hovered();
let was_my_hovered = state.tab_margin_spinbox_y.hovered();