editor: Add minimap (#26893)
## Overview This PR adds the minimap feature to the Zed editor, closely following the [design from Visual Studio Code](https://code.visualstudio.com/docs/getstarted/userinterface#_minimap). When configured, a second instance of the editor will appear to the left of the scrollbar. This instance is not interactive and it has a slimmed down set of annotations, but it is otherwise just a zoomed-out version of the main editor instance. A thumb shows the line boundaries of the main viewport, as well as the progress through the document. Clicking on a section of code in the minimap will jump the editor to that code. Dragging the thumb will act like the scrollbar, moving sequentially through the document.  ## New settings This adds a `minimap` section to the editor settings with the following keys: ### `show` When to show the minimap in the editor. This setting can take three values: 1. Show the minimap if the editor's scrollbar is visible: `"auto"` 2. Always show the minimap: `"always"` 3. Never show the minimap: `"never"` (default) ### `thumb` When to show the minimap thumb. This setting can take two values: 1. Show the minimap thumb if the mouse is over the minimap: `"hover"` 2. Always show the minimap thumb: `"always"` (default) ### `width` The width of the minimap in pixels. Default: `100` ### `font_size` The font size of the minimap in pixels. Default: `2` ## Providing feedback In order to keep the PR focused on development updates, please use the discussion thread for feature suggestions and usability feedback: #26894 ## Features left to add - [x] fix scrolling performance - [x] user settings for enable/disable, width, text size, etc. - [x] show overview of visible lines in minimap - [x] clicking on minimap should navigate to the corresponding section of code - ~[ ] more prominent highlighting in the minimap editor~ - ~[ ] override scrollbar auto setting to always when minimap is set to always show~ Release Notes: - Added minimap for high-level overview and quick navigation of editor contents. --------- Co-authored-by: MrSubidubi <dev@bahn.sh> Co-authored-by: Kirill Bulatov <kirill@zed.dev>
This commit is contained in:
parent
902931fdfc
commit
607a9445fc
21 changed files with 1083 additions and 216 deletions
|
@ -157,6 +157,8 @@ pub struct ScrollManager {
|
|||
active_scrollbar: Option<ActiveScrollbarState>,
|
||||
visible_line_count: Option<f32>,
|
||||
forbid_vertical_scroll: bool,
|
||||
dragging_minimap: bool,
|
||||
show_minimap_thumb: bool,
|
||||
}
|
||||
|
||||
impl ScrollManager {
|
||||
|
@ -172,6 +174,8 @@ impl ScrollManager {
|
|||
last_autoscroll: None,
|
||||
visible_line_count: None,
|
||||
forbid_vertical_scroll: false,
|
||||
dragging_minimap: false,
|
||||
show_minimap_thumb: false,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -341,6 +345,24 @@ impl ScrollManager {
|
|||
self.show_scrollbars
|
||||
}
|
||||
|
||||
pub fn show_minimap_thumb(&mut self, cx: &mut Context<Editor>) {
|
||||
if !self.show_minimap_thumb {
|
||||
self.show_minimap_thumb = true;
|
||||
cx.notify();
|
||||
}
|
||||
}
|
||||
|
||||
pub fn hide_minimap_thumb(&mut self, cx: &mut Context<Editor>) {
|
||||
if self.show_minimap_thumb {
|
||||
self.show_minimap_thumb = false;
|
||||
cx.notify();
|
||||
}
|
||||
}
|
||||
|
||||
pub fn minimap_thumb_visible(&mut self) -> bool {
|
||||
self.show_minimap_thumb
|
||||
}
|
||||
|
||||
pub fn autoscroll_request(&self) -> Option<Autoscroll> {
|
||||
self.autoscroll_request.map(|(autoscroll, _)| autoscroll)
|
||||
}
|
||||
|
@ -396,6 +418,15 @@ impl ScrollManager {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn is_dragging_minimap(&self) -> bool {
|
||||
self.dragging_minimap
|
||||
}
|
||||
|
||||
pub fn set_is_dragging_minimap(&mut self, dragging: bool, cx: &mut Context<Editor>) {
|
||||
self.dragging_minimap = dragging;
|
||||
cx.notify();
|
||||
}
|
||||
|
||||
pub fn clamp_scroll_left(&mut self, max: f32) -> bool {
|
||||
if max < self.anchor.offset.x {
|
||||
self.anchor.offset.x = max;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue