Compare commits
2 Commits
77f32e55cf
...
79ddd2680b
Author | SHA1 | Date | |
---|---|---|---|
79ddd2680b | |||
b2441ec2dc |
@@ -38,11 +38,11 @@ impl PageCache {
|
|||||||
|
|
||||||
pub fn get_page_or_cache(&mut self, page_number: usize) -> Result<Rc<MyPageType>> {
|
pub fn get_page_or_cache(&mut self, page_number: usize) -> Result<Rc<MyPageType>> {
|
||||||
if let Some(page) = self.get_page(page_number) {
|
if let Some(page) = self.get_page(page_number) {
|
||||||
return Ok(page);
|
Ok(page)
|
||||||
} else {
|
} else {
|
||||||
let _ = self.cache_page(page_number, 100);
|
let _ = self.cache_page(page_number, 100);
|
||||||
if let Some(page) = self.get_page(page_number) {
|
if let Some(page) = self.get_page(page_number) {
|
||||||
return Ok(page);
|
Ok(page)
|
||||||
} else {
|
} else {
|
||||||
bail!("Failed caching and retrieving page {}", page_number);
|
bail!("Failed caching and retrieving page {}", page_number);
|
||||||
}
|
}
|
||||||
|
19
src/ui.rs
19
src/ui.rs
@@ -2,6 +2,7 @@ use std::{
|
|||||||
cell::RefCell,
|
cell::RefCell,
|
||||||
path::{Path, PathBuf},
|
path::{Path, PathBuf},
|
||||||
rc::Rc,
|
rc::Rc,
|
||||||
|
time::{Duration, Instant},
|
||||||
};
|
};
|
||||||
|
|
||||||
use gtk::{
|
use gtk::{
|
||||||
@@ -24,6 +25,7 @@ pub struct Ui {
|
|||||||
pub image_left: Picture,
|
pub image_left: Picture,
|
||||||
pub image_right: Picture,
|
pub image_right: Picture,
|
||||||
pub document_canvas: Option<DocumentCanvas>,
|
pub document_canvas: Option<DocumentCanvas>,
|
||||||
|
pub last_touch_time: Option<Instant>,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct DocumentCanvas {
|
pub struct DocumentCanvas {
|
||||||
@@ -55,21 +57,19 @@ impl DocumentCanvas {
|
|||||||
|
|
||||||
pub fn cache_initial_pages(&self, area_height: i32) {
|
pub fn cache_initial_pages(&self, area_height: i32) {
|
||||||
self.page_cache_sender.send_priority_cache_commands(
|
self.page_cache_sender.send_priority_cache_commands(
|
||||||
&vec![self.current_page_number, self.current_page_number + 1],
|
&[self.current_page_number, self.current_page_number + 1],
|
||||||
area_height,
|
area_height,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn cache_surrounding_pages(&self, area_height: i32) {
|
pub fn cache_surrounding_pages(&self, area_height: i32) {
|
||||||
self.page_cache_sender.send_cache_commands(
|
self.page_cache_sender.send_cache_commands(
|
||||||
&vec![
|
&[self.current_page_number.saturating_sub(2),
|
||||||
self.current_page_number.saturating_sub(2),
|
|
||||||
self.current_page_number.saturating_sub(1),
|
self.current_page_number.saturating_sub(1),
|
||||||
self.current_page_number,
|
self.current_page_number,
|
||||||
self.current_page_number + 1,
|
self.current_page_number + 1,
|
||||||
self.current_page_number + 2,
|
self.current_page_number + 2,
|
||||||
self.current_page_number + 3,
|
self.current_page_number + 3],
|
||||||
],
|
|
||||||
area_height,
|
area_height,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -152,6 +152,14 @@ fn process_right_click(ui: &mut Ui, _x: f64, _y: f64) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn process_left_click(ui: &mut Ui, x: f64, y: f64) {
|
fn process_left_click(ui: &mut Ui, x: f64, y: f64) {
|
||||||
|
if let Some(last_touch_time) = ui.last_touch_time {
|
||||||
|
if last_touch_time.elapsed() < Duration::from_millis(100) {
|
||||||
|
// Prevent accidental double touching
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ui.last_touch_time = Some(Instant::now());
|
||||||
if ui.document_canvas.is_none() {
|
if ui.document_canvas.is_none() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -238,6 +246,7 @@ impl Ui {
|
|||||||
image_left,
|
image_left,
|
||||||
image_right,
|
image_right,
|
||||||
document_canvas: None,
|
document_canvas: None,
|
||||||
|
last_touch_time: None,
|
||||||
};
|
};
|
||||||
let ui = Rc::new(RefCell::new(ui));
|
let ui = Rc::new(RefCell::new(ui));
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user