Fix overlapping block headers when using custom line height (#4071)
This fixes block headers overlapping over text in the buffer when using a custom line height of 1.25. It fixes the issue by making the parent container a v-flex, vertically-justifying the content and moving from relative padding to absolute padding for the header itself. ## Before/After With setting: ```json "buffer_line_height": { "custom": 1.25 }, ``` ### Before  ### After  ### Release notes Release Notes: - Fixed headers in multi-buffers overlapping over content of the buffer
This commit is contained in:
commit
3d041f4e91
2 changed files with 42 additions and 39 deletions
|
@ -2288,17 +2288,18 @@ impl EditorElement {
|
||||||
.map(|p| SharedString::from(p.to_string_lossy().to_string() + "/"));
|
.map(|p| SharedString::from(p.to_string_lossy().to_string() + "/"));
|
||||||
}
|
}
|
||||||
|
|
||||||
div()
|
v_flex()
|
||||||
.id(("path header container", block_id))
|
.id(("path header container", block_id))
|
||||||
.size_full()
|
.size_full()
|
||||||
.p_1p5()
|
.justify_center()
|
||||||
|
.p(gpui::px(6.))
|
||||||
.child(
|
.child(
|
||||||
h_flex()
|
h_flex()
|
||||||
.id("path header block")
|
.id("path header block")
|
||||||
.py_1p5()
|
.size_full()
|
||||||
.pl_3()
|
.pl(gpui::px(12.))
|
||||||
.pr_2()
|
.pr(gpui::px(8.))
|
||||||
.rounded_lg()
|
.rounded_md()
|
||||||
.shadow_md()
|
.shadow_md()
|
||||||
.border()
|
.border()
|
||||||
.border_color(cx.theme().colors().border)
|
.border_color(cx.theme().colors().border)
|
||||||
|
@ -2861,6 +2862,7 @@ impl Element for EditorElement {
|
||||||
cx.with_text_style(
|
cx.with_text_style(
|
||||||
Some(gpui::TextStyleRefinement {
|
Some(gpui::TextStyleRefinement {
|
||||||
font_size: Some(self.style.text.font_size),
|
font_size: Some(self.style.text.font_size),
|
||||||
|
line_height: Some(self.style.text.line_height),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}),
|
}),
|
||||||
|cx| {
|
|cx| {
|
||||||
|
|
|
@ -282,6 +282,8 @@ impl EventEmitter<ViewEvent> for ProjectSearchView {}
|
||||||
|
|
||||||
impl Render for ProjectSearchView {
|
impl Render for ProjectSearchView {
|
||||||
fn render(&mut self, cx: &mut ViewContext<Self>) -> impl IntoElement {
|
fn render(&mut self, cx: &mut ViewContext<Self>) -> impl IntoElement {
|
||||||
|
const PLEASE_AUTHENTICATE: &str = "API Key Missing: Please set 'OPENAI_API_KEY' in Environment Variables. If you authenticated using the Assistant Panel, please restart Zed to Authenticate.";
|
||||||
|
|
||||||
if self.has_matches() {
|
if self.has_matches() {
|
||||||
div()
|
div()
|
||||||
.flex_1()
|
.flex_1()
|
||||||
|
@ -303,40 +305,39 @@ impl Render for ProjectSearchView {
|
||||||
let mut show_minor_text = true;
|
let mut show_minor_text = true;
|
||||||
let semantic_status = self.semantic_state.as_ref().and_then(|semantic| {
|
let semantic_status = self.semantic_state.as_ref().and_then(|semantic| {
|
||||||
let status = semantic.index_status;
|
let status = semantic.index_status;
|
||||||
match status {
|
match status {
|
||||||
SemanticIndexStatus::NotAuthenticated => {
|
SemanticIndexStatus::NotAuthenticated => {
|
||||||
major_text = Label::new("Not Authenticated");
|
major_text = Label::new("Not Authenticated");
|
||||||
show_minor_text = false;
|
show_minor_text = false;
|
||||||
Some(
|
Some(PLEASE_AUTHENTICATE.to_string())
|
||||||
"API Key Missing: Please set 'OPENAI_API_KEY' in Environment Variables. If you authenticated using the Assistant Panel, please restart Zed to Authenticate.".to_string())
|
}
|
||||||
}
|
SemanticIndexStatus::Indexed => Some("Indexing complete".to_string()),
|
||||||
SemanticIndexStatus::Indexed => Some("Indexing complete".to_string()),
|
SemanticIndexStatus::Indexing {
|
||||||
SemanticIndexStatus::Indexing {
|
remaining_files,
|
||||||
remaining_files,
|
rate_limit_expiry,
|
||||||
rate_limit_expiry,
|
} => {
|
||||||
} => {
|
if remaining_files == 0 {
|
||||||
if remaining_files == 0 {
|
Some("Indexing...".to_string())
|
||||||
Some("Indexing...".to_string())
|
} else {
|
||||||
} else {
|
if let Some(rate_limit_expiry) = rate_limit_expiry {
|
||||||
if let Some(rate_limit_expiry) = rate_limit_expiry {
|
let remaining_seconds =
|
||||||
let remaining_seconds =
|
rate_limit_expiry.duration_since(Instant::now());
|
||||||
rate_limit_expiry.duration_since(Instant::now());
|
if remaining_seconds > Duration::from_secs(0) {
|
||||||
if remaining_seconds > Duration::from_secs(0) {
|
Some(format!(
|
||||||
Some(format!(
|
"Remaining files to index (rate limit resets in {}s): {}",
|
||||||
"Remaining files to index (rate limit resets in {}s): {}",
|
remaining_seconds.as_secs(),
|
||||||
remaining_seconds.as_secs(),
|
remaining_files
|
||||||
remaining_files
|
))
|
||||||
))
|
} else {
|
||||||
} else {
|
Some(format!("Remaining files to index: {}", remaining_files))
|
||||||
Some(format!("Remaining files to index: {}", remaining_files))
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Some(format!("Remaining files to index: {}", remaining_files))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SemanticIndexStatus::NotIndexed => None,
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
Some(format!("Remaining files to index: {}", remaining_files))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SemanticIndexStatus::NotIndexed => None,
|
||||||
|
}
|
||||||
});
|
});
|
||||||
let major_text = div().justify_center().max_w_96().child(major_text);
|
let major_text = div().justify_center().max_w_96().child(major_text);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue