mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-25 08:41:05 +00:00
feat: new ui.Text:scroll() API for setting text to scroll horizontally or vertically
This commit is contained in:
parent
2e1156f267
commit
53077f157c
2 changed files with 10 additions and 5 deletions
|
|
@ -23,9 +23,9 @@ pub struct Text {
|
||||||
pub area: Area,
|
pub area: Area,
|
||||||
|
|
||||||
// TODO: block
|
// TODO: block
|
||||||
pub inner: ratatui::text::Text<'static>,
|
pub inner: ratatui::text::Text<'static>,
|
||||||
pub wrap: u8,
|
pub wrap: u8,
|
||||||
// TODO: scroll
|
pub scroll: ratatui::layout::Position,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Text {
|
impl Text {
|
||||||
|
|
@ -58,7 +58,7 @@ impl Text {
|
||||||
trans: impl Fn(yazi_config::popup::Position) -> ratatui::layout::Rect,
|
trans: impl Fn(yazi_config::popup::Position) -> ratatui::layout::Rect,
|
||||||
) {
|
) {
|
||||||
let rect = self.area.transform(trans);
|
let rect = self.area.transform(trans);
|
||||||
if self.wrap == WRAP_NO {
|
if self.wrap == WRAP_NO && self.scroll == Default::default() {
|
||||||
self.inner.render(rect, buf);
|
self.inner.render(rect, buf);
|
||||||
} else {
|
} else {
|
||||||
ratatui::widgets::Paragraph::from(self).render(rect, buf);
|
ratatui::widgets::Paragraph::from(self).render(rect, buf);
|
||||||
|
|
@ -130,7 +130,7 @@ impl From<Text> for ratatui::widgets::Paragraph<'static> {
|
||||||
if value.wrap != WRAP_NO {
|
if value.wrap != WRAP_NO {
|
||||||
p = p.wrap(ratatui::widgets::Wrap { trim: value.wrap == WRAP_TRIM });
|
p = p.wrap(ratatui::widgets::Wrap { trim: value.wrap == WRAP_TRIM });
|
||||||
}
|
}
|
||||||
p
|
p.scroll((value.scroll.y, value.scroll.x))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -155,6 +155,10 @@ impl UserData for Text {
|
||||||
};
|
};
|
||||||
Ok(ud)
|
Ok(ud)
|
||||||
});
|
});
|
||||||
|
methods.add_function_mut("scroll", |_, (ud, x, y): (AnyUserData, u16, u16)| {
|
||||||
|
ud.borrow_mut::<Self>()?.scroll = ratatui::layout::Position { x, y };
|
||||||
|
Ok(ud)
|
||||||
|
});
|
||||||
methods.add_method("max_width", |_, me, ()| {
|
methods.add_method("max_width", |_, me, ()| {
|
||||||
Ok(me.inner.lines.iter().take(me.area.size().height as usize).map(|l| l.width()).max())
|
Ok(me.inner.lines.iter().take(me.area.size().height as usize).map(|l| l.width()).max())
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,7 @@ impl Utils {
|
||||||
area,
|
area,
|
||||||
inner,
|
inner,
|
||||||
wrap: if YAZI.preview.wrap == PreviewWrap::Yes { WRAP } else { WRAP_NO },
|
wrap: if YAZI.preview.wrap == PreviewWrap::Yes { WRAP } else { WRAP_NO },
|
||||||
|
scroll: Default::default(),
|
||||||
})];
|
})];
|
||||||
|
|
||||||
emit!(Call(Cmd::new("mgr:update_peeked").with_any("lock", lock)));
|
emit!(Call(Cmd::new("mgr:update_peeked").with_any("lock", lock)));
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue