From 420a6ddf18d977d53ec1cc5312d7f08cc1cbe9ca Mon Sep 17 00:00:00 2001 From: sxyazi Date: Thu, 16 Nov 2023 11:46:29 +0800 Subject: [PATCH] .. --- yazi-config/src/popup/origin.rs | 2 +- yazi-core/src/context.rs | 15 ++++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/yazi-config/src/popup/origin.rs b/yazi-config/src/popup/origin.rs index 72cb3fde..ac997ecf 100644 --- a/yazi-config/src/popup/origin.rs +++ b/yazi-config/src/popup/origin.rs @@ -1,6 +1,6 @@ use serde::Deserialize; -#[derive(Clone, Copy, Default, Deserialize)] +#[derive(Clone, Copy, Default, Deserialize, PartialEq, Eq)] pub enum Origin { #[default] #[serde(rename = "top-left")] diff --git a/yazi-core/src/context.rs b/yazi-core/src/context.rs index 34ee2461..d44ee720 100644 --- a/yazi-core/src/context.rs +++ b/yazi-core/src/context.rs @@ -26,13 +26,18 @@ impl Ctx { } } - pub fn area(&self, pos: &Position) -> Rect { - // TODO: hovered - if let Origin::Hovered = pos.origin { - return Rect::default(); + pub fn area(&self, position: &Position) -> Rect { + if position.origin != Origin::Hovered { + return position.rect(); } - pos.rect() + if let Some(r) = + self.manager.hovered().and_then(|h| self.manager.current().rect_current(&h.url)) + { + Position::sticky(r, position.offset) + } else { + Position::new(Origin::TopCenter, position.offset).rect() + } } #[inline]