Make pane divider stylable in theme

Co-Authored-By: Nate Butler <nate@zed.dev>
This commit is contained in:
Max Brunsfeld 2021-09-07 15:04:29 -07:00
parent d2bfae5fe1
commit 64cdf7cdd1
4 changed files with 19 additions and 19 deletions

View file

@ -3,6 +3,7 @@ base = { family = "Inconsolata", size = 14 }
[workspace] [workspace]
background = "$surface.0" background = "$surface.0"
pane_divider = { width = 3, color = "$border.0" }
[workspace.titlebar] [workspace.titlebar]
border = { width = 1, bottom = true, color = "$surface.1" } border = { width = 1, bottom = true, color = "$surface.1" }

View file

@ -6,6 +6,7 @@ use gpui::{
color::Color, color::Color,
elements::{ContainerStyle, LabelStyle}, elements::{ContainerStyle, LabelStyle},
fonts::{HighlightStyle, TextStyle}, fonts::{HighlightStyle, TextStyle},
Border,
}; };
use serde::Deserialize; use serde::Deserialize;
use std::collections::HashMap; use std::collections::HashMap;
@ -36,6 +37,7 @@ pub struct Workspace {
pub titlebar: ContainerStyle, pub titlebar: ContainerStyle,
pub tab: Tab, pub tab: Tab,
pub active_tab: Tab, pub active_tab: Tab,
pub pane_divider: Border,
pub left_sidebar: Sidebar, pub left_sidebar: Sidebar,
pub right_sidebar: Sidebar, pub right_sidebar: Sidebar,
} }

View file

@ -972,7 +972,9 @@ impl View for Workspace {
{ {
content.add_child(Flexible::new(0.8, element).boxed()); content.add_child(Flexible::new(0.8, element).boxed());
} }
content.add_child(Expanded::new(1.0, self.center.render()).boxed()); content.add_child(
Expanded::new(1.0, self.center.render(&settings.theme)).boxed(),
);
if let Some(element) = if let Some(element) =
self.right_sidebar.render_active_item(&settings, cx) self.right_sidebar.render_active_item(&settings, cx)
{ {

View file

@ -1,5 +1,6 @@
use crate::theme::Theme;
use anyhow::{anyhow, Result}; use anyhow::{anyhow, Result};
use gpui::{color::Color, elements::*, Axis, Border}; use gpui::{elements::*, Axis};
#[derive(Clone, Debug, Eq, PartialEq)] #[derive(Clone, Debug, Eq, PartialEq)]
pub struct PaneGroup { pub struct PaneGroup {
@ -44,8 +45,8 @@ impl PaneGroup {
} }
} }
pub fn render<'a>(&self) -> ElementBox { pub fn render<'a>(&self, theme: &Theme) -> ElementBox {
self.root.render() self.root.render(theme)
} }
} }
@ -73,10 +74,10 @@ impl Member {
Member::Axis(PaneAxis { axis, members }) Member::Axis(PaneAxis { axis, members })
} }
pub fn render<'a>(&self) -> ElementBox { pub fn render<'a>(&self, theme: &Theme) -> ElementBox {
match self { match self {
Member::Pane(view_id) => ChildView::new(*view_id).boxed(), Member::Pane(view_id) => ChildView::new(*view_id).boxed(),
Member::Axis(axis) => axis.render(), Member::Axis(axis) => axis.render(theme),
} }
} }
} }
@ -164,13 +165,17 @@ impl PaneAxis {
} }
} }
fn render<'a>(&self) -> ElementBox { fn render<'a>(&self, theme: &Theme) -> ElementBox {
let last_member_ix = self.members.len() - 1; let last_member_ix = self.members.len() - 1;
Flex::new(self.axis) Flex::new(self.axis)
.with_children(self.members.iter().enumerate().map(|(ix, member)| { .with_children(self.members.iter().enumerate().map(|(ix, member)| {
let mut member = member.render(); let mut member = member.render(theme);
if ix < last_member_ix { if ix < last_member_ix {
let mut border = Border::new(border_width(), border_color()); let mut border = theme.workspace.pane_divider;
border.left = false;
border.right = false;
border.top = false;
border.bottom = false;
match self.axis { match self.axis {
Axis::Vertical => border.bottom = true, Axis::Vertical => border.bottom = true,
Axis::Horizontal => border.right = true, Axis::Horizontal => border.right = true,
@ -377,13 +382,3 @@ mod tests {
// Ok(()) // Ok(())
// } // }
} }
#[inline(always)]
fn border_width() -> f32 {
2.0
}
#[inline(always)]
fn border_color() -> Color {
Color::new(0xdb, 0xdb, 0xdc, 0xff)
}