mirror of
https://github.com/zed-industries/zed.git
synced 2024-11-08 07:35:01 +03:00
Properly calculate y offsets for multi buffer context menus (#15594)
Follow-up of https://github.com/zed-industries/zed/pull/14727 Release Notes: - Fixed multi buffer context menus not showing properly Co-authored-by: Max Brunsfeld <max@zed.dev>
This commit is contained in:
parent
9b24e7d6de
commit
c98918aed8
@ -11800,24 +11800,8 @@ impl Editor {
|
||||
editor_snapshot: &EditorSnapshot,
|
||||
cx: &mut ViewContext<Self>,
|
||||
) -> Option<gpui::Point<Pixels>> {
|
||||
let text_layout_details = self.text_layout_details(cx);
|
||||
let line_height = text_layout_details
|
||||
.editor_style
|
||||
.text
|
||||
.line_height_in_pixels(cx.rem_size());
|
||||
let source_point = source.to_display_point(editor_snapshot);
|
||||
let first_visible_line = text_layout_details
|
||||
.scroll_anchor
|
||||
.anchor
|
||||
.to_display_point(editor_snapshot);
|
||||
if first_visible_line > source_point {
|
||||
return None;
|
||||
}
|
||||
let source_x = editor_snapshot.x_for_display_point(source_point, &text_layout_details);
|
||||
let source_y = line_height
|
||||
* ((source_point.row() - first_visible_line.row()).0 as f32
|
||||
- text_layout_details.scroll_anchor.offset.y);
|
||||
Some(gpui::Point::new(source_x, source_y))
|
||||
self.display_to_pixel_point(source_point, editor_snapshot, cx)
|
||||
}
|
||||
|
||||
pub fn display_to_pixel_point(
|
||||
@ -11828,15 +11812,16 @@ impl Editor {
|
||||
) -> Option<gpui::Point<Pixels>> {
|
||||
let line_height = self.style()?.text.line_height_in_pixels(cx.rem_size());
|
||||
let text_layout_details = self.text_layout_details(cx);
|
||||
let first_visible_line = text_layout_details
|
||||
let scroll_top = text_layout_details
|
||||
.scroll_anchor
|
||||
.anchor
|
||||
.to_display_point(editor_snapshot);
|
||||
if first_visible_line > source {
|
||||
.scroll_position(editor_snapshot)
|
||||
.y;
|
||||
|
||||
if source.row().as_f32() < scroll_top.floor() {
|
||||
return None;
|
||||
}
|
||||
let source_x = editor_snapshot.x_for_display_point(source, &text_layout_details);
|
||||
let source_y = line_height * (source.row() - first_visible_line.row()).0 as f32;
|
||||
let source_y = line_height * (source.row().as_f32() - scroll_top);
|
||||
Some(gpui::Point::new(source_x, source_y))
|
||||
}
|
||||
|
||||
|
@ -10,6 +10,7 @@ use gpui::prelude::FluentBuilder;
|
||||
use gpui::{DismissEvent, Pixels, Point, Subscription, View, ViewContext};
|
||||
use workspace::OpenInTerminal;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum MenuPosition {
|
||||
/// When the editor is scrolled, the context menu stays on the exact
|
||||
/// same position on the screen, never disappearing.
|
||||
@ -29,6 +30,15 @@ pub struct MouseContextMenu {
|
||||
_subscription: Subscription,
|
||||
}
|
||||
|
||||
impl std::fmt::Debug for MouseContextMenu {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
f.debug_struct("MouseContextMenu")
|
||||
.field("position", &self.position)
|
||||
.field("context_menu", &self.context_menu)
|
||||
.finish()
|
||||
}
|
||||
}
|
||||
|
||||
impl MouseContextMenu {
|
||||
pub(crate) fn pinned_to_editor(
|
||||
editor: &mut Editor,
|
||||
|
Loading…
Reference in New Issue
Block a user