Upper controls.

This commit is contained in:
Peter Tripp 2025-08-01 15:43:30 -04:00
parent faa45c53d7
commit 23dddba1e6
No known key found for this signature in database
3 changed files with 19 additions and 9 deletions

View file

@ -30,7 +30,7 @@ use std::{
sync::Arc, sync::Arc,
time::Duration, time::Duration,
}; };
use ui::{IconButtonShape, KeyBinding, Tooltip, prelude::*, vertical_divider}; use ui::{ButtonSize, IconButtonShape, KeyBinding, Tooltip, prelude::*, vertical_divider};
use util::ResultExt; use util::ResultExt;
use workspace::{ use workspace::{
Item, ItemHandle, ItemNavHistory, ToolbarItemEvent, ToolbarItemLocation, ToolbarItemView, Item, ItemHandle, ItemNavHistory, ToolbarItemEvent, ToolbarItemLocation, ToolbarItemView,
@ -796,17 +796,18 @@ fn render_diff_hunk_controls(
.mr_0p5() .mr_0p5()
.gap_1() .gap_1()
.px_0p5() .px_0p5()
.pb_1() .py_0p5()
.border_x_1() .border_x_1()
.border_b_1() .border_t_1()
.border_color(cx.theme().colors().border) .border_color(cx.theme().colors().border)
.rounded_b_md() .rounded_t_md()
.bg(cx.theme().colors().editor_background) .bg(cx.theme().colors().editor_background)
.gap_1() .gap_1()
.block_mouse_except_scroll() .block_mouse_except_scroll()
.shadow_md() .shadow_md()
.children(vec![ .children(vec![
Button::new(("reject", row as u64), "Reject") Button::new(("reject", row as u64), "Reject")
.size(ButtonSize::Compact)
.disabled(is_created_file) .disabled(is_created_file)
.key_binding( .key_binding(
KeyBinding::for_action_in( KeyBinding::for_action_in(
@ -835,6 +836,7 @@ fn render_diff_hunk_controls(
} }
}), }),
Button::new(("keep", row as u64), "Keep") Button::new(("keep", row as u64), "Keep")
.size(ButtonSize::Compact)
.key_binding( .key_binding(
KeyBinding::for_action_in(&Keep, &editor.read(cx).focus_handle(cx), window, cx) KeyBinding::for_action_in(&Keep, &editor.read(cx).focus_handle(cx), window, cx)
.map(|kb| kb.size(rems_from_px(12.))), .map(|kb| kb.size(rems_from_px(12.))),

View file

@ -23656,17 +23656,18 @@ fn render_diff_hunk_controls(
.mr_1() .mr_1()
.gap_1() .gap_1()
.px_0p5() .px_0p5()
.pb_1() .py_0p5()
.border_x_1() .border_x_1()
.border_b_1() .border_t_1()
.border_color(cx.theme().colors().border_variant) .border_color(cx.theme().colors().border_variant)
.rounded_b_lg() .rounded_t_lg()
.bg(cx.theme().colors().editor_background) .bg(cx.theme().colors().editor_background)
.gap_1() .gap_1()
.block_mouse_except_scroll() .block_mouse_except_scroll()
.shadow_md() .shadow_md()
.child(if status.has_secondary_hunk() { .child(if status.has_secondary_hunk() {
Button::new(("stage", row as u64), "Stage") Button::new(("stage", row as u64), "Stage")
.size(ButtonSize::Compact)
.alpha(if status.is_pending() { 0.66 } else { 1.0 }) .alpha(if status.is_pending() { 0.66 } else { 1.0 })
.tooltip({ .tooltip({
let focus_handle = editor.focus_handle(cx); let focus_handle = editor.focus_handle(cx);
@ -23694,6 +23695,7 @@ fn render_diff_hunk_controls(
}) })
} else { } else {
Button::new(("unstage", row as u64), "Unstage") Button::new(("unstage", row as u64), "Unstage")
.size(ButtonSize::Compact)
.alpha(if status.is_pending() { 0.66 } else { 1.0 }) .alpha(if status.is_pending() { 0.66 } else { 1.0 })
.tooltip({ .tooltip({
let focus_handle = editor.focus_handle(cx); let focus_handle = editor.focus_handle(cx);
@ -23722,6 +23724,7 @@ fn render_diff_hunk_controls(
}) })
.child( .child(
Button::new(("restore", row as u64), "Restore") Button::new(("restore", row as u64), "Restore")
.size(ButtonSize::Compact)
.tooltip({ .tooltip({
let focus_handle = editor.focus_handle(cx); let focus_handle = editor.focus_handle(cx);
move |window, cx| { move |window, cx| {

View file

@ -4985,8 +4985,13 @@ impl EditorElement {
.iter() .iter()
.any(|p| p.map_or(false, |p| display_row_range.contains(&p.row()))) .any(|p| p.map_or(false, |p| display_row_range.contains(&p.row())))
{ {
let y = display_row_range.start.as_f32() * line_height // Position controls at the end of the previous line to avoid covering diff content
+ text_hitbox.bounds.top() let control_row = if display_row_range.start.0 > 0 {
display_row_range.start.0 - 1
} else {
display_row_range.start.0
};
let y = control_row as f32 * line_height + text_hitbox.bounds.top()
- scroll_pixel_position.y; - scroll_pixel_position.y;
let mut element = render_diff_hunk_controls( let mut element = render_diff_hunk_controls(