Up or Down
This commit is contained in:
parent
23dddba1e6
commit
88a37b04aa
3 changed files with 44 additions and 11 deletions
|
@ -791,20 +791,29 @@ fn render_diff_hunk_controls(
|
||||||
) -> AnyElement {
|
) -> AnyElement {
|
||||||
let editor = editor.clone();
|
let editor = editor.clone();
|
||||||
|
|
||||||
h_flex()
|
// Get controls positioning from editor state
|
||||||
|
let controls_above = editor.read(cx).diff_hunk_controls_above();
|
||||||
|
|
||||||
|
let mut container = h_flex()
|
||||||
.h(line_height)
|
.h(line_height)
|
||||||
.mr_0p5()
|
.mr_0p5()
|
||||||
.gap_1()
|
.gap_1()
|
||||||
.px_0p5()
|
.px_0p5()
|
||||||
.py_0p5()
|
.py_0p5()
|
||||||
.border_x_1()
|
.border_x_1()
|
||||||
.border_t_1()
|
|
||||||
.border_color(cx.theme().colors().border)
|
.border_color(cx.theme().colors().border)
|
||||||
.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();
|
||||||
|
|
||||||
|
if controls_above {
|
||||||
|
container = container.border_t_1().rounded_t_md();
|
||||||
|
} else {
|
||||||
|
container = container.border_b_1().rounded_b_md();
|
||||||
|
}
|
||||||
|
|
||||||
|
container
|
||||||
.children(vec![
|
.children(vec![
|
||||||
Button::new(("reject", row as u64), "Reject")
|
Button::new(("reject", row as u64), "Reject")
|
||||||
.size(ButtonSize::Compact)
|
.size(ButtonSize::Compact)
|
||||||
|
|
|
@ -1126,6 +1126,7 @@ pub struct Editor {
|
||||||
show_git_blame_inline_delay_task: Option<Task<()>>,
|
show_git_blame_inline_delay_task: Option<Task<()>>,
|
||||||
git_blame_inline_enabled: bool,
|
git_blame_inline_enabled: bool,
|
||||||
render_diff_hunk_controls: RenderDiffHunkControlsFn,
|
render_diff_hunk_controls: RenderDiffHunkControlsFn,
|
||||||
|
diff_hunk_controls_above: bool,
|
||||||
serialize_dirty_buffers: bool,
|
serialize_dirty_buffers: bool,
|
||||||
show_selection_menu: Option<bool>,
|
show_selection_menu: Option<bool>,
|
||||||
blame: Option<Entity<GitBlame>>,
|
blame: Option<Entity<GitBlame>>,
|
||||||
|
@ -2137,6 +2138,7 @@ impl Editor {
|
||||||
git_blame_inline_enabled: full_mode
|
git_blame_inline_enabled: full_mode
|
||||||
&& ProjectSettings::get_global(cx).git.inline_blame_enabled(),
|
&& ProjectSettings::get_global(cx).git.inline_blame_enabled(),
|
||||||
render_diff_hunk_controls: Arc::new(render_diff_hunk_controls),
|
render_diff_hunk_controls: Arc::new(render_diff_hunk_controls),
|
||||||
|
diff_hunk_controls_above: true,
|
||||||
serialize_dirty_buffers: !is_minimap
|
serialize_dirty_buffers: !is_minimap
|
||||||
&& ProjectSettings::get_global(cx)
|
&& ProjectSettings::get_global(cx)
|
||||||
.session
|
.session
|
||||||
|
@ -23641,6 +23643,12 @@ struct LineManipulationResult {
|
||||||
pub line_count_after: usize,
|
pub line_count_after: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Editor {
|
||||||
|
pub fn diff_hunk_controls_above(&self) -> bool {
|
||||||
|
self.diff_hunk_controls_above
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn render_diff_hunk_controls(
|
fn render_diff_hunk_controls(
|
||||||
row: u32,
|
row: u32,
|
||||||
status: &DiffHunkStatus,
|
status: &DiffHunkStatus,
|
||||||
|
@ -23651,20 +23659,28 @@ fn render_diff_hunk_controls(
|
||||||
_window: &mut Window,
|
_window: &mut Window,
|
||||||
cx: &mut App,
|
cx: &mut App,
|
||||||
) -> AnyElement {
|
) -> AnyElement {
|
||||||
h_flex()
|
// Get controls positioning from editor state
|
||||||
|
let controls_above = editor.read(cx).diff_hunk_controls_above();
|
||||||
|
let mut container = h_flex()
|
||||||
.h(line_height)
|
.h(line_height)
|
||||||
.mr_1()
|
.mr_1()
|
||||||
.gap_1()
|
.gap_1()
|
||||||
.px_0p5()
|
.px_0p5()
|
||||||
.py_0p5()
|
.py_0p5()
|
||||||
.border_x_1()
|
.border_x_1()
|
||||||
.border_t_1()
|
|
||||||
.border_color(cx.theme().colors().border_variant)
|
.border_color(cx.theme().colors().border_variant)
|
||||||
.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();
|
||||||
|
|
||||||
|
if controls_above {
|
||||||
|
container = container.border_t_1().rounded_t_lg();
|
||||||
|
} else {
|
||||||
|
container = container.border_b_1().rounded_b_lg();
|
||||||
|
}
|
||||||
|
|
||||||
|
container
|
||||||
.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)
|
.size(ButtonSize::Compact)
|
||||||
|
|
|
@ -4985,10 +4985,18 @@ 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())))
|
||||||
{
|
{
|
||||||
// Position controls at the end of the previous line to avoid covering diff content
|
// Get controls positioning from editor state
|
||||||
let control_row = if display_row_range.start.0 > 0 {
|
let controls_above = editor.read(cx).diff_hunk_controls_above();
|
||||||
display_row_range.start.0 - 1
|
|
||||||
|
let control_row = if controls_above {
|
||||||
|
// Position controls one line above the diff hunk to avoid covering diff content
|
||||||
|
if display_row_range.start.0 > 0 {
|
||||||
|
display_row_range.start.0 - 1
|
||||||
|
} else {
|
||||||
|
display_row_range.start.0
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
|
// Position controls at the start of the diff hunk (original behavior)
|
||||||
display_row_range.start.0
|
display_row_range.start.0
|
||||||
};
|
};
|
||||||
let y = control_row as f32 * line_height + text_hitbox.bounds.top()
|
let y = control_row as f32 * line_height + text_hitbox.bounds.top()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue