Add buttons to scroll file editor

This commit is contained in:
2025-07-22 12:58:53 +02:00
parent fe0b9d049e
commit 579aace306

View File

@ -40,6 +40,12 @@ pub struct FileEditor {
#[serde(skip)]
inner: Option<Inner>,
/// The distance to scroll when paging up or down.
///
/// This is calculated when the view is rendered.
#[serde(skip)]
scroll_delta: f32,
/// Whether the file has been edited since it was last saved to disk.
is_dirty: bool,
}
@ -89,6 +95,7 @@ impl FileEditor {
buffer,
file_mtime: None,
buffer_mtime: Local::now(),
scroll_delta: 0.0,
is_dirty: false,
inner: None,
}
@ -162,6 +169,18 @@ impl FileEditor {
const MAX_NOTE_WIDTH: f32 = 600.0;
// distance to scroll when paging up or down.
let mut scroll_delta = 0.0;
ui.input_mut(|input| {
if input.consume_key(egui::Modifiers::NONE, egui::Key::PageUp) {
scroll_delta += self.scroll_delta;
}
if input.consume_key(egui::Modifiers::NONE, egui::Key::PageDown) {
scroll_delta -= self.scroll_delta;
}
});
ui.horizontal(|ui| {
ui.label("new");
if ui.button(" text ").clicked() {
@ -173,9 +192,23 @@ impl FileEditor {
self.buffer
.push(BufferItem::Handwriting(Default::default()));
}
ui.add_space(16.0);
ui.label("scroll");
if ui.button(" up ").clicked() {
scroll_delta += self.scroll_delta;
}
if ui.button("down").clicked() {
scroll_delta -= self.scroll_delta;
}
});
ScrollArea::vertical().show(ui, |ui| {
let scroll_area = ScrollArea::vertical().show(ui, |ui| {
if scroll_delta != 0.0 {
ui.scroll_with_delta(Vec2::new(0.0, scroll_delta));
}
ui.horizontal(|ui| {
let side_padding = ui.available_width().sub(MAX_NOTE_WIDTH).max(0.0).div(2.0);
ui.add_space(side_padding);
@ -186,6 +219,8 @@ impl FileEditor {
ui.add_space(side_padding);
});
});
self.scroll_delta = scroll_area.inner_rect.height() * 0.9;
});
}