Add buttons to scroll file editor
This commit is contained in:
@ -40,6 +40,12 @@ pub struct FileEditor {
|
|||||||
#[serde(skip)]
|
#[serde(skip)]
|
||||||
inner: Option<Inner>,
|
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.
|
/// Whether the file has been edited since it was last saved to disk.
|
||||||
is_dirty: bool,
|
is_dirty: bool,
|
||||||
}
|
}
|
||||||
@ -89,6 +95,7 @@ impl FileEditor {
|
|||||||
buffer,
|
buffer,
|
||||||
file_mtime: None,
|
file_mtime: None,
|
||||||
buffer_mtime: Local::now(),
|
buffer_mtime: Local::now(),
|
||||||
|
scroll_delta: 0.0,
|
||||||
is_dirty: false,
|
is_dirty: false,
|
||||||
inner: None,
|
inner: None,
|
||||||
}
|
}
|
||||||
@ -162,6 +169,18 @@ impl FileEditor {
|
|||||||
|
|
||||||
const MAX_NOTE_WIDTH: f32 = 600.0;
|
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.horizontal(|ui| {
|
||||||
ui.label("new");
|
ui.label("new");
|
||||||
if ui.button(" text ").clicked() {
|
if ui.button(" text ").clicked() {
|
||||||
@ -173,9 +192,23 @@ impl FileEditor {
|
|||||||
self.buffer
|
self.buffer
|
||||||
.push(BufferItem::Handwriting(Default::default()));
|
.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| {
|
ui.horizontal(|ui| {
|
||||||
let side_padding = ui.available_width().sub(MAX_NOTE_WIDTH).max(0.0).div(2.0);
|
let side_padding = ui.available_width().sub(MAX_NOTE_WIDTH).max(0.0).div(2.0);
|
||||||
ui.add_space(side_padding);
|
ui.add_space(side_padding);
|
||||||
@ -186,6 +219,8 @@ impl FileEditor {
|
|||||||
ui.add_space(side_padding);
|
ui.add_space(side_padding);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
self.scroll_delta = scroll_area.inner_rect.height() * 0.9;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user