Clean up impl a bit
This commit is contained in:
parent
d529a1deb4
commit
863a3b1886
1 changed files with 42 additions and 29 deletions
|
@ -438,7 +438,32 @@ pub struct Editor {
|
|||
keymap_context_layers: BTreeMap<TypeId, gpui::keymap::Context>,
|
||||
input_enabled: bool,
|
||||
leader_replica_id: Option<u16>,
|
||||
hover_popover: (Option<HoverPopover>, std::time::Instant, std::time::Instant),
|
||||
hover_popover: HoverState,
|
||||
}
|
||||
|
||||
pub struct HoverState {
|
||||
popover: Option<HoverPopover>,
|
||||
last_hover: std::time::Instant,
|
||||
start_grace: std::time::Instant,
|
||||
}
|
||||
|
||||
impl HoverState {
|
||||
/// Takes whether the cursor is currently hovering over a symbol,
|
||||
/// and returns a tuple containing whether there was a recent hover,
|
||||
/// and whether the hover is still in the grace period.
|
||||
pub fn determine_state(&mut self, hovering: bool) -> (bool, bool) {
|
||||
let recent_hover = self.last_hover.elapsed() < std::time::Duration::from_millis(200);
|
||||
if !hovering {
|
||||
self.last_hover = std::time::Instant::now();
|
||||
}
|
||||
|
||||
let in_grace = self.start_grace.elapsed() < std::time::Duration::from_millis(100);
|
||||
if hovering && !recent_hover {
|
||||
self.start_grace = std::time::Instant::now();
|
||||
}
|
||||
|
||||
return (recent_hover, in_grace);
|
||||
}
|
||||
}
|
||||
|
||||
pub struct EditorSnapshot {
|
||||
|
@ -1053,7 +1078,11 @@ impl Editor {
|
|||
keymap_context_layers: Default::default(),
|
||||
input_enabled: true,
|
||||
leader_replica_id: None,
|
||||
hover_popover: (None, std::time::Instant::now(), std::time::Instant::now()),
|
||||
hover_popover: HoverState {
|
||||
popover: None,
|
||||
last_hover: std::time::Instant::now(),
|
||||
start_grace: std::time::Instant::now(),
|
||||
},
|
||||
};
|
||||
this.end_selection(cx);
|
||||
|
||||
|
@ -2442,10 +2471,9 @@ impl Editor {
|
|||
async move {
|
||||
if let Some(this) = this.upgrade(&cx) {
|
||||
this.update(&mut cx, |this, cx| {
|
||||
if this.hover_popover.0.is_some() {
|
||||
// dbg!("hidden");
|
||||
this.hover_popover.0 = None;
|
||||
this.hover_popover.1 = std::time::Instant::now();
|
||||
let (recent_hover, in_grace) = this.hover_popover.determine_state(false);
|
||||
if this.hover_popover.popover.is_some() {
|
||||
this.hover_popover.popover = None;
|
||||
cx.notify();
|
||||
}
|
||||
});
|
||||
|
@ -2534,31 +2562,16 @@ impl Editor {
|
|||
|
||||
if let Some(this) = this.upgrade(&cx) {
|
||||
this.update(&mut cx, |this, cx| {
|
||||
let item_hovered_recently =
|
||||
this.hover_popover.1.elapsed() < std::time::Duration::from_millis(200);
|
||||
if hover_popover.is_none() {
|
||||
this.hover_popover.1 = std::time::Instant::now();
|
||||
}
|
||||
|
||||
let in_grace_period =
|
||||
this.hover_popover.2.elapsed() < std::time::Duration::from_millis(100);
|
||||
if hover_popover.is_some() && !item_hovered_recently {
|
||||
this.hover_popover.2 = std::time::Instant::now();
|
||||
}
|
||||
let (recent_hover, in_grace) =
|
||||
this.hover_popover.determine_state(hover_popover.is_some());
|
||||
|
||||
let smooth_handoff =
|
||||
this.hover_popover.0.is_some() && hover_popover.is_some();
|
||||
this.hover_popover.popover.is_some() && hover_popover.is_some();
|
||||
let visible =
|
||||
this.hover_popover.popover.is_some() || hover_popover.is_some();
|
||||
|
||||
let visible = this.hover_popover.0.is_some() || hover_popover.is_some();
|
||||
|
||||
println!(
|
||||
"grace: {}\nrecently: {}",
|
||||
in_grace_period, item_hovered_recently
|
||||
);
|
||||
|
||||
if (smooth_handoff || !item_hovered_recently || in_grace_period) && visible
|
||||
{
|
||||
this.hover_popover.0 = hover_popover;
|
||||
if (smooth_handoff || !recent_hover || in_grace) && visible {
|
||||
this.hover_popover.popover = hover_popover;
|
||||
cx.notify();
|
||||
}
|
||||
});
|
||||
|
@ -2819,7 +2832,7 @@ impl Editor {
|
|||
|
||||
pub fn render_hover_popover(&self, style: EditorStyle) -> Option<(DisplayPoint, ElementBox)> {
|
||||
self.hover_popover
|
||||
.0
|
||||
.popover
|
||||
.as_ref()
|
||||
.map(|hover| hover.render(style))
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue