dock: Render title bar based on visible panels (#1697)
Display the title when only one panel is visible.
## Breaking change
```diff
pub enum PanelStyle {
- Default,
+ #[default]
+ Auto,
TabBar,
}
- dock_area.panel_style(PanelStyle::Default)
+ dock_area.panel_style(PanelStyle::Auto)
```
This commit is contained in:
parent
36b229068d
commit
37326819af
3 changed files with 19 additions and 11 deletions
|
|
@ -8,9 +8,10 @@ mod tiles;
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use gpui::{
|
use gpui::{
|
||||||
actions, canvas, div, prelude::FluentBuilder, AnyElement, AnyView, App, AppContext, Axis,
|
AnyElement, AnyView, App, AppContext, Axis, Bounds, Context, Edges, Entity, EntityId,
|
||||||
Bounds, Context, Edges, Entity, EntityId, EventEmitter, InteractiveElement as _, IntoElement,
|
EventEmitter, InteractiveElement as _, IntoElement, ParentElement as _, Pixels, Render,
|
||||||
ParentElement as _, Pixels, Render, SharedString, Styled, Subscription, WeakEntity, Window,
|
SharedString, Styled, Subscription, WeakEntity, Window, actions, canvas, div,
|
||||||
|
prelude::FluentBuilder,
|
||||||
};
|
};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
|
@ -463,7 +464,7 @@ impl DockArea {
|
||||||
right_dock: None,
|
right_dock: None,
|
||||||
bottom_dock: None,
|
bottom_dock: None,
|
||||||
locked: false,
|
locked: false,
|
||||||
panel_style: PanelStyle::Default,
|
panel_style: PanelStyle::default(),
|
||||||
_subscriptions: vec![],
|
_subscriptions: vec![],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ use gpui::{
|
||||||
|
|
||||||
use rust_i18n::t;
|
use rust_i18n::t;
|
||||||
|
|
||||||
use super::{invalid_panel::InvalidPanel, DockArea, PanelInfo, PanelState};
|
use super::{DockArea, PanelInfo, PanelState, invalid_panel::InvalidPanel};
|
||||||
|
|
||||||
pub enum PanelEvent {
|
pub enum PanelEvent {
|
||||||
ZoomIn,
|
ZoomIn,
|
||||||
|
|
@ -16,10 +16,11 @@ pub enum PanelEvent {
|
||||||
LayoutChanged,
|
LayoutChanged,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
|
||||||
pub enum PanelStyle {
|
pub enum PanelStyle {
|
||||||
/// Display the TabBar when there are multiple tabs, otherwise display the simple title.
|
/// Display the TabBar when there are multiple tabs, otherwise display the simple title.
|
||||||
Default,
|
#[default]
|
||||||
|
Auto,
|
||||||
/// Always display the tab bar.
|
/// Always display the tab bar.
|
||||||
TabBar,
|
TabBar,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -601,7 +601,6 @@ impl TabPanel {
|
||||||
let Some(dock_area) = self.dock_area.upgrade() else {
|
let Some(dock_area) = self.dock_area.upgrade() else {
|
||||||
return div().into_any_element();
|
return div().into_any_element();
|
||||||
};
|
};
|
||||||
let panel_style = dock_area.read(cx).panel_style;
|
|
||||||
|
|
||||||
let left_dock_button = self.render_dock_toggle_button(DockPlacement::Left, window, cx);
|
let left_dock_button = self.render_dock_toggle_button(DockPlacement::Left, window, cx);
|
||||||
let bottom_dock_button = self.render_dock_toggle_button(DockPlacement::Bottom, window, cx);
|
let bottom_dock_button = self.render_dock_toggle_button(DockPlacement::Bottom, window, cx);
|
||||||
|
|
@ -609,8 +608,15 @@ impl TabPanel {
|
||||||
|
|
||||||
let is_bottom_dock = bottom_dock_button.is_some();
|
let is_bottom_dock = bottom_dock_button.is_some();
|
||||||
|
|
||||||
if self.panels.len() == 1 && panel_style == PanelStyle::Default {
|
let panel_style = dock_area.read(cx).panel_style;
|
||||||
let panel = self.panels.get(0).unwrap();
|
let visible_panels = self
|
||||||
|
.panels
|
||||||
|
.iter()
|
||||||
|
.filter(|panel| panel.visible(cx))
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
if visible_panels.len() == 1 && panel_style == PanelStyle::default() {
|
||||||
|
let panel = visible_panels.get(0).unwrap();
|
||||||
|
|
||||||
if !panel.visible(cx) {
|
if !panel.visible(cx) {
|
||||||
return div().into_any_element();
|
return div().into_any_element();
|
||||||
|
|
@ -655,7 +661,7 @@ impl TabPanel {
|
||||||
.when(state.draggable, |this| {
|
.when(state.draggable, |this| {
|
||||||
this.on_drag(
|
this.on_drag(
|
||||||
DragPanel {
|
DragPanel {
|
||||||
panel: panel.clone(),
|
panel: (**panel).clone(),
|
||||||
tab_panel: view,
|
tab_panel: view,
|
||||||
},
|
},
|
||||||
|drag, _, _, cx| {
|
|drag, _, _, cx| {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue