Prevent scrollbar from covering bottom right text in terminal (#33636)
Closes https://github.com/zed-industries/zed/issues/27241 Release Notes: - Fixed terminal scrollbar covering bottom right text by adding proper content padding when scrollbar is visible --------- Co-authored-by: Danilo Leal <daniloleal09@gmail.com>
This commit is contained in:
parent
e0fc32009f
commit
fd1beedb16
1 changed files with 17 additions and 6 deletions
|
@ -64,8 +64,8 @@ use std::{
|
|||
};
|
||||
|
||||
const CURSOR_BLINK_INTERVAL: Duration = Duration::from_millis(500);
|
||||
|
||||
const GIT_DIFF_PATH_PREFIXES: &[&str] = &["a", "b"];
|
||||
const TERMINAL_SCROLLBAR_WIDTH: Pixels = px(12.);
|
||||
|
||||
/// Event to transmit the scroll from the element to the view
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
|
@ -956,13 +956,12 @@ impl TerminalView {
|
|||
.on_scroll_wheel(cx.listener(|_, _, _window, cx| {
|
||||
cx.notify();
|
||||
}))
|
||||
.h_full()
|
||||
.absolute()
|
||||
.right_1()
|
||||
.top_1()
|
||||
.top_0()
|
||||
.bottom_0()
|
||||
.w(px(12.))
|
||||
.cursor_default()
|
||||
.right_0()
|
||||
.h_full()
|
||||
.w(TERMINAL_SCROLLBAR_WIDTH)
|
||||
.children(Scrollbar::vertical(self.scrollbar_state.clone())),
|
||||
)
|
||||
}
|
||||
|
@ -1496,6 +1495,16 @@ impl Render for TerminalView {
|
|||
|
||||
let focused = self.focus_handle.is_focused(window);
|
||||
|
||||
// Always calculate scrollbar width to prevent layout shift
|
||||
let scrollbar_width = if Self::should_show_scrollbar(cx)
|
||||
&& self.content_mode(window, cx).is_scrollable()
|
||||
&& self.terminal.read(cx).total_lines() > self.terminal.read(cx).viewport_lines()
|
||||
{
|
||||
TERMINAL_SCROLLBAR_WIDTH
|
||||
} else {
|
||||
px(0.)
|
||||
};
|
||||
|
||||
div()
|
||||
.id("terminal-view")
|
||||
.size_full()
|
||||
|
@ -1545,6 +1554,8 @@ impl Render for TerminalView {
|
|||
// TODO: Oddly this wrapper div is needed for TerminalElement to not steal events from the context menu
|
||||
div()
|
||||
.size_full()
|
||||
.bg(cx.theme().colors().editor_background)
|
||||
.when(scrollbar_width > px(0.), |div| div.pr(scrollbar_width))
|
||||
.child(TerminalElement::new(
|
||||
terminal_handle,
|
||||
terminal_view_handle,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue