system settings
git clone https://git.lucas.co/cce-system-interface.git
Replace settings sidebar with statusbar page dropdown
src/input_handler.rs | 65 +++++++++++++---------------------------------------
src/main.rs | 13 ++++++-----
src/renderer.rs | 14 +++++++----
3 files changed, 32 insertions(+), 60 deletions(-)
diff --git a/src/input_handler.rs b/src/input_handler.rs
index 778d2f4..1893279 100644
--- a/src/input_handler.rs
+++ b/src/input_handler.rs
@@ -33,7 +33,7 @@ impl SystemInterface {
let ly = self.cursor_y / s + self.scroll_y;
cce_ui::widget::hover_animation::set_cursor_pos(lx, ly_no_scroll);
let mut changed = false;
- if self.menubar.cursor_moved(lx_no_scroll, ly_no_scroll, &mut self.ui_context) {
+ if self.page_dropdown.cursor_moved(lx_no_scroll, ly_no_scroll, &mut self.ui_context) {
changed = true;
}
if self.switcher.cursor_moved(lx_no_scroll, ly_no_scroll, &mut self.ui_context) {
@@ -115,49 +115,23 @@ impl SystemInterface {
}
let mut handled = false;
- if state == cce_ui::widget::ElementState::Pressed {
- if lx_no_scroll < self.sidebar_width {
- if self.menubar.mouse_input(button, state, lx_no_scroll, ly_no_scroll, &mut self.ui_context) {
- use cce_ui::widget::MenuController;
- if let Some((idx, _)) = self.menubar.menu_click() {
- if idx < Page::ALL.len() {
- cce_ui::widget::focus::clear_focus();
- let new_page = Page::ALL[idx];
- self.app.current_page = new_page;
- self.current_page_shared.store(idx as u8, std::sync::atomic::Ordering::SeqCst);
- self.scroll_y = 0.0;
- self.update_status_text();
- }
- }
- self.needs_rebuild = true;
- handled = true;
+ if self.page_dropdown.mouse_input(button, state, lx_no_scroll, ly_no_scroll, &mut self.ui_context) {
+ if self.page_dropdown.take_change() {
+ let idx = self.page_dropdown.selected;
+ if idx < Page::ALL.len() {
+ cce_ui::widget::focus::clear_focus();
+ let new_page = Page::ALL[idx];
+ self.app.current_page = new_page;
+ self.current_page_shared.store(idx as u8, std::sync::atomic::Ordering::SeqCst);
+ self.scroll_y = 0.0;
+ self.update_status_text();
}
- } else {
- if self.switcher.mouse_input(button, state, lx_no_scroll, ly_no_scroll, &mut self.ui_context) {
- self.needs_rebuild = true;
- handled = true;
- }
- }
- } else {
- if self.menubar.mouse_input(button, state, lx_no_scroll, ly_no_scroll, &mut self.ui_context) {
- use cce_ui::widget::MenuController;
- if let Some((idx, _)) = self.menubar.menu_click() {
- if idx < Page::ALL.len() {
- cce_ui::widget::focus::clear_focus();
- let new_page = Page::ALL[idx];
- self.app.current_page = new_page;
- self.current_page_shared.store(idx as u8, std::sync::atomic::Ordering::SeqCst);
- self.scroll_y = 0.0;
- self.update_status_text();
- }
- }
- self.needs_rebuild = true;
- handled = true;
- }
- if self.switcher.mouse_input(button, state, lx_no_scroll, ly_no_scroll, &mut self.ui_context) {
- self.needs_rebuild = true;
- handled = true;
}
+ self.needs_rebuild = true;
+ handled = true;
+ } else if self.switcher.mouse_input(button, state, lx_no_scroll, ly_no_scroll, &mut self.ui_context) {
+ self.needs_rebuild = true;
+ handled = true;
}
if handled {
return true;
@@ -297,13 +271,6 @@ impl SystemInterface {
self.last_scroll_y = self.scroll_y;
return true;
}
- } else {
- let lx = px / s;
- let ly = py / s;
- if self.menubar.mouse_wheel(delta, lx, ly, &mut self.ui_context) {
- self.needs_rebuild = true;
- return true;
- }
}
false
}
diff --git a/src/main.rs b/src/main.rs
index e6e36be..b30cf80 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,4 +1,4 @@
-use cce_ui::widget::{hover_animation, Element, PageSelector};
+use cce_ui::widget::{hover_animation, Element};
use glyphon::{Attrs, Buffer, FontSystem, Metrics};
use cce_settings::app::{AppAction, AppState};
@@ -193,7 +193,7 @@ struct SystemInterface {
last_scroll_y: f32,
page_sec_containers: Vec<cce_ui::widget::SectionContainer>,
root_window: cce_ui::widget::Backplate,
- menubar: cce_ui::widget::Paginator,
+ page_dropdown: cce_ui::widget::input::Dropdown,
switcher: cce_ui::widget::Switcher,
pages: Vec<cce_ui::widget::Page>,
statusbar: cce_ui::widget::StatusBar,
@@ -230,8 +230,9 @@ impl cce_ui::engine::Application for SystemInterface {
let (sans_family, serif_family, monospace_family, _, _, _, _) = pages::fonts::read_preferred_fonts();
let pages_names = Page::ALL.iter().map(|p| p.label().to_string()).collect::<Vec<_>>();
- let menubar = cce_ui::widget::Paginator::new(pages_names);
- let sidebar_width = menubar.sidebar_w();
+ let page_dropdown = cce_ui::widget::input::Dropdown::new(pages_names, initial_page_idx)
+ .with_open_upward(true);
+ let sidebar_width = 0.0f32;
let switcher = cce_ui::widget::Switcher::new(sidebar_width, 0.0, 820.0 - sidebar_width, 680.0);
let mut pages = Vec::new();
@@ -299,7 +300,7 @@ impl cce_ui::engine::Application for SystemInterface {
])
.with_border([0.22, 0.22, 0.28, 1.0], 1.5)
.with_radius(win_radius as f32),
- menubar,
+ page_dropdown,
switcher,
pages,
statusbar: cce_ui::widget::StatusBar::new(),
@@ -321,7 +322,7 @@ impl cce_ui::engine::Application for SystemInterface {
this.switcher.add_child(page.as_ptr(), &mut this.ui_context);
}
- this.root_window.add_child(this.menubar.as_ptr(), &mut this.ui_context);
+ this.root_window.add_child(this.page_dropdown.as_ptr(), &mut this.ui_context);
this.root_window.add_child(this.switcher.as_ptr(), &mut this.ui_context);
this.root_window.add_child(this.statusbar.as_ptr(), &mut this.ui_context);
diff --git a/src/renderer.rs b/src/renderer.rs
index 7e034c1..6b864af 100644
--- a/src/renderer.rs
+++ b/src/renderer.rs
@@ -1,7 +1,7 @@
use crate::{SystemInterface, AppWidget, make_text_buffer_with_font};
use cce_settings::app::PageContent;
use cce_settings::pages::Page;
-use cce_ui::widget::{Element, TextItem, PageSelector};
+use cce_ui::widget::{Element, TextItem};
impl SystemInterface {
@@ -37,7 +37,7 @@ impl SystemInterface {
active_page.link_children(page_root, &mut self.page_sec_containers, &mut self.ui_context);
- self.sidebar_width = self.menubar.sidebar_w();
+ self.sidebar_width = 0.0;
self.header_height = 0.0; // No CSD Titlebar
let mut widgets = Vec::new();
let mut text_items = Vec::new();
@@ -66,7 +66,7 @@ impl SystemInterface {
}
let page_idx = Page::ALL.iter().position(|&p| p == self.app.current_page).unwrap_or(0);
- self.menubar.set_selected_page(page_idx);
+ self.page_dropdown.selected = page_idx;
self.switcher.set_active_index(Some(page_idx));
// Update root window size, background color, opacity, corner radius, and children
@@ -78,7 +78,7 @@ impl SystemInterface {
self.root_window.background_color = Some(cce_ui::color::to_linear([win_r, win_g, win_b, win_a]));
self.root_window.radius = 12.0;
self.root_window.clear_children(&mut self.ui_context);
- self.root_window.add_child(self.menubar.as_ptr(), &mut self.ui_context);
+ self.root_window.add_child(self.page_dropdown.as_ptr(), &mut self.ui_context);
self.root_window.add_child(self.switcher.as_ptr(), &mut self.ui_context);
self.root_window.add_child(self.statusbar.as_ptr(), &mut self.ui_context);
if self.search_open {
@@ -88,7 +88,11 @@ impl SystemInterface {
// Position sidebar and switcher below the titlebar
let mut dummy_pc = PageContent::new();
- cce_ui::layout::render_widget(&mut dummy_pc, &mut self.menubar, 0.0, self.header_height, self.sidebar_width, logical_sh - self.header_height - self.status_height, &mut self.ui_context);
+ let dropdown_w = 180.0f32;
+ let dropdown_h = 18.0f32;
+ let dropdown_x = logical_sw - dropdown_w - 12.0;
+ let dropdown_y = logical_sh - self.status_height + (self.status_height - dropdown_h) / 2.0;
+ cce_ui::layout::render_widget(&mut dummy_pc, &mut self.page_dropdown, dropdown_x, dropdown_y, dropdown_w, dropdown_h, &mut self.ui_context);
let switcher_h = if self.search_open {
logical_sh - self.header_height - 42.0 - self.status_height
} else {