1
1
mirror of https://github.com/wez/wezterm.git synced 2024-09-19 02:37:51 +03:00

integrated-title-bar: Add macOS support

This commit is contained in:
Yuri Izmer 2022-11-13 23:28:59 +03:00 committed by Wez Furlong
parent 7d79933d28
commit e354791c34
No known key found for this signature in database
GPG Key ID: 7A7F66A31EC9B387
3 changed files with 40 additions and 12 deletions

View File

@ -182,6 +182,8 @@ impl TabBarState {
&self.items
}
// MacOS uses native buttons.
#[cfg(not(target_os = "macos"))]
fn fancy_window_decorations(
mouse_x: Option<usize>,
x: &mut usize,
@ -406,6 +408,7 @@ impl TabBarState {
let mut x = 0;
let mut items = vec![];
#[cfg(not(target_os = "macos"))]
if fancy_window_decorations && config.fancy_window_decorations.is_left && !cfg!(widnows) {
Self::fancy_window_decorations(mouse_x, &mut x, config, &mut items, &mut line, &colors);
}
@ -416,6 +419,14 @@ impl TabBarState {
.clone(),
);
#[cfg(target_os = "macos")]
if fancy_window_decorations && config.use_fancy_tab_bar == false {
for _ in 0..10 as usize {
line.insert_cell(x, black_cell.clone(), title_width, SEQ_ZERO);
x += 1;
}
}
let left_status_line = parse_status_text(left_status, black_cell.attrs().clone());
if left_status_line.len() > 0 {
items.push(TabEntry {
@ -504,6 +515,7 @@ impl TabBarState {
}
// Reserve place for buttons
#[cfg(not(target_os = "macos"))]
let title_width = if fancy_window_decorations
&& !config.fancy_window_decorations.is_left
&& !cfg!(target_os = "macos")
@ -560,10 +572,8 @@ impl TabBarState {
line.insert_cell(x, black_cell.clone(), title_width, SEQ_ZERO);
}
if fancy_window_decorations
&& !config.fancy_window_decorations.is_left
&& !cfg!(target_os = "macos")
{
#[cfg(not(target_os = "macos"))]
if fancy_window_decorations && !config.fancy_window_decorations.is_left {
x = title_width;
Self::fancy_window_decorations(mouse_x, &mut x, config, &mut items, &mut line, &colors);
}

View File

@ -308,8 +308,8 @@ fn window_button_element(
) -> Element {
use window::FancyWindowDecorationsStyle as Style;
#[cfg(any(windows, targer_os = "macos"))]
let style = Style::default();
#[cfg(windows)]
let style = Style::Windows;
let poly = match style {
Style::Windows => {
@ -1276,16 +1276,28 @@ impl super::TermWindow {
let window_buttons_at_left = self.config.window_decorations
== window::WindowDecorations::FANCY
&& (self.config.fancy_window_decorations.is_left
|| cfg!(target_os = "macos") && cfg!(not(windows)));
|| (cfg!(target_os = "macos")) && cfg!(not(windows)));
let left_padding = if window_buttons_at_left { 0.0 } else { 0.5 };
let left_padding = if window_buttons_at_left {
if cfg!(target_os = "macos") {
if !self.window_state.contains(window::WindowState::FULL_SCREEN) {
Dimension::Pixels(70.0)
} else {
Dimension::Cells(0.5)
}
} else {
Dimension::Pixels(0.0)
}
} else {
Dimension::Cells(0.5)
};
children.push(
Element::new(&font, ElementContent::Children(left_eles))
.vertical_align(VerticalAlign::Bottom)
.colors(bar_colors.clone())
.padding(BoxDimension {
left: Dimension::Cells(left_padding),
left: left_padding,
right: Dimension::Cells(0.),
top: Dimension::Cells(0.),
bottom: Dimension::Cells(0.),

View File

@ -1229,7 +1229,9 @@ fn apply_decorations_to_window(window: &StrongPtr, decorations: WindowDecoration
unsafe {
window.setStyleMask_(mask);
let hidden = if decorations.contains(WindowDecorations::TITLE) {
let hidden = if decorations.contains(WindowDecorations::TITLE)
|| decorations.contains(WindowDecorations::FANCY)
{
NO
} else {
YES
@ -1250,7 +1252,11 @@ fn apply_decorations_to_window(window: &StrongPtr, decorations: WindowDecoration
} else {
appkit::NSWindowTitleVisibility::NSWindowTitleHidden
});
window.setTitlebarAppearsTransparent_(hidden);
if decorations == WindowDecorations::FANCY {
window.setTitlebarAppearsTransparent_(YES);
} else {
window.setTitlebarAppearsTransparent_(hidden);
}
}
}
@ -1264,7 +1270,7 @@ fn decoration_to_mask(decorations: WindowDecorations) -> NSWindowStyleMask {
| NSWindowStyleMask::NSClosableWindowMask
| NSWindowStyleMask::NSMiniaturizableWindowMask
| NSWindowStyleMask::NSResizableWindowMask
} else if decorations == WindowDecorations::RESIZE {
} else if decorations == WindowDecorations::RESIZE || decorations == WindowDecorations::FANCY {
NSWindowStyleMask::NSTitledWindowMask
| NSWindowStyleMask::NSClosableWindowMask
| NSWindowStyleMask::NSMiniaturizableWindowMask