From 1a6dbdbb0c1b3a99f56848bd5143118b16b72f3a Mon Sep 17 00:00:00 2001 From: Redhawk18 Date: Tue, 29 Aug 2023 17:29:10 -0400 Subject: [PATCH] added more styles for pane grid --- src/gui/mod.rs | 12 ++++++------ src/gui/theme/mod.rs | 30 ++++++++++++++++++++++-------- src/gui/theme/shades.rs | 3 +-- src/gui/widgets/menu_bar.rs | 3 +-- src/gui/widgets/pane_grid.rs | 16 +++++++--------- src/gui/widgets/tab_bar.rs | 6 ++++-- 6 files changed, 41 insertions(+), 29 deletions(-) diff --git a/src/gui/mod.rs b/src/gui/mod.rs index 649fb68..c2401c0 100644 --- a/src/gui/mod.rs +++ b/src/gui/mod.rs @@ -29,6 +29,7 @@ pub enum Message { TabSelected(usize), TabClosed(usize), + PaneClick(pane_grid::Pane), PaneDragged(pane_grid::DragEvent), PaneResized(pane_grid::ResizeEvent), @@ -176,18 +177,17 @@ impl Application for Blaze { } Message::PaneDragged(_) => {} Message::PaneResized(_) => todo!(), + + Message::PaneClick(pane) => self.panes.active = Some(pane), } Command::none() } fn view(&self) -> Element { - column!( - menu_bar(), - pane_grid(&self.panes, &self.tabs) - ) - .padding(8) - .into() + column!(menu_bar(), pane_grid(&self.panes, &self.tabs)) + .padding(8) + .into() } fn theme(&self) -> Theme { diff --git a/src/gui/theme/mod.rs b/src/gui/theme/mod.rs index 4117607..4d08e13 100644 --- a/src/gui/theme/mod.rs +++ b/src/gui/theme/mod.rs @@ -102,7 +102,7 @@ pub enum Container { #[default] Primary, PaneGridTitleBar(bool), - PaneGridContent, + PaneGridContent(bool), } impl container::StyleSheet for Theme { @@ -113,14 +113,28 @@ impl container::StyleSheet for Theme { Container::Primary => container::Appearance { ..Default::default() }, - Container::PaneGridTitleBar(_) => container::Appearance { - text_color: Some(self.colors.accent.default), - border_color: self.colors.text.default, - background: Some(Background::Color(self.colors.accent.default)), - border_width: 4.0, - border_radius: 4.0.into(), + Container::PaneGridTitleBar(active) => container::Appearance { + text_color: Some(self.colors.text.default), + border_color: if *active { + self.colors.accent.default + } else { + self.colors.primary.default + }, + background: Some(Background::Color(self.colors.background.default)), + border_width: 1.0, + border_radius: [4.0, 4.0, 0.0, 0.0].into(), + }, + Container::PaneGridContent(active) => container::Appearance { + text_color: Some(self.colors.text.default), + border_color: if *active { + self.colors.accent.default + } else { + self.colors.primary.default + }, + background: Some(Background::Color(self.colors.background.default)), + border_width: 1.0, + border_radius: [0.0, 0.0, 4.0, 4.0].into(), }, - Container::PaneGridContent => todo!(), } } } diff --git a/src/gui/theme/shades.rs b/src/gui/theme/shades.rs index ef9c876..8c0b0c7 100644 --- a/src/gui/theme/shades.rs +++ b/src/gui/theme/shades.rs @@ -1,6 +1,5 @@ use iced::Color; -use palette::rgb::Rgb; -use palette::{DarkenAssign, FromColor, LightenAssign, Okhsl, Srgb}; +use palette::{rgb::Rgb, DarkenAssign, FromColor, LightenAssign, Okhsl, Srgb}; /// provides post-processing to Pigment's raw colors #[derive(Clone)] diff --git a/src/gui/widgets/menu_bar.rs b/src/gui/widgets/menu_bar.rs index 6cb8400..30dd9e1 100644 --- a/src/gui/widgets/menu_bar.rs +++ b/src/gui/widgets/menu_bar.rs @@ -1,5 +1,4 @@ -use crate::gui::theme::Renderer; -use crate::gui::{FileTab, Message, Tab}; +use crate::gui::{theme::Renderer, FileTab, Message, Tab}; use iced::widget::button; use iced_aw::{MenuBar, MenuTree}; diff --git a/src/gui/widgets/pane_grid.rs b/src/gui/widgets/pane_grid.rs index 5ab1ff4..bbb3686 100644 --- a/src/gui/widgets/pane_grid.rs +++ b/src/gui/widgets/pane_grid.rs @@ -1,22 +1,20 @@ -use crate::gui::theme::Renderer; -use crate::gui::{Tabs, Panes}; +use crate::gui::{theme::Renderer, widgets::tab_bar::tab_bar, Message, PaneState, Panes, Tabs}; -use crate::gui::{Message, PaneState, Tab}; - -use iced::widget::pane_grid::{Content, PaneGrid, State, TitleBar}; - -use super::tab_bar::tab_bar; +use iced::widget::pane_grid::{Content, PaneGrid, TitleBar}; pub fn pane_grid<'a>(panes: &'a Panes, tabs: &'a Tabs) -> PaneGrid<'a, Message, Renderer> { PaneGrid::new(&panes.data, |pane, state, _is_maximized| { + let is_focused = panes.active == Some(pane); Content::new(match state { PaneState::Tab => tab_bar(tabs.active, &tabs.data), }) - .style(crate::gui::theme::Container::PaneGridTitleBar(true)) + .style(crate::gui::theme::Container::PaneGridContent(is_focused)) .title_bar( - TitleBar::new("content").style(crate::gui::theme::Container::PaneGridTitleBar(true)), + TitleBar::new("content") + .style(crate::gui::theme::Container::PaneGridTitleBar(is_focused)), ) }) + .on_click(Message::PaneClick) .on_drag(Message::PaneDragged) .on_resize(10, Message::PaneResized) } diff --git a/src/gui/widgets/tab_bar.rs b/src/gui/widgets/tab_bar.rs index fdbb4ac..307c38d 100644 --- a/src/gui/widgets/tab_bar.rs +++ b/src/gui/widgets/tab_bar.rs @@ -1,5 +1,7 @@ -use crate::gui::theme::{Element, Renderer}; -use crate::gui::{Message, Tab}; +use crate::gui::{ + theme::{Element, Renderer}, + Message, Tab, +}; use iced::widget::{column, text_input, Column}; use iced_aw::{TabBar, TabLabel};