core: EditorCore,
regions: Vec<ComposeBufferRegion>,
layout: Vec<ComposeLayoutCell>,
+ cursor_pos: Option<(usize, usize)>,
scanner: &'static Scan,
conf: InstanceStatusConfig,
last_size: Option<(usize, usize)>,
},
regions: Vec::new(),
layout: Vec::new(),
+ cursor_pos: None,
scanner: Scan::get(),
conf,
last_size: None,
Some(cs)
}
+ fn determine_cursor_pos(&self) -> Option<(usize, usize)> {
+ let cursor_cell_index = self.layout
+ .partition_point(|cell| cell.pos < self.core.point);
+ if let Some(cell) = self.layout.get(cursor_cell_index) {
+ if cell.pos == self.core.point {
+ return Some((cell.x, cell.y));
+ }
+ }
+ None // _probably_ shouldn't happen unless something is confused
+ }
+
fn post_update(&mut self) {
self.regions = self.make_regions(&self.core);
if let Some((w, _h)) = self.last_size {
self.layout = self.layout(w);
}
+ self.cursor_pos = self.determine_cursor_pos();
}
}
}
let mut cursor_pos = CursorPosition::None;
- let cursor_cell_index = self.layout
- .partition_point(|cell| cell.pos < self.core.point);
- if let Some(cell) = self.layout.get(cursor_cell_index) {
- if cell.pos == self.core.point {
- if let Some(y) = cell.y.checked_sub(ytop) {
- let y = y + ystart;
- if y < h {
- cursor_pos = CursorPosition::At(cell.x, y);
- }
+ if let Some((cx, cy)) = self.cursor_pos {
+ if let Some(y) = cy.checked_sub(ytop) {
+ let cy = y + ystart;
+ if cy < h {
+ cursor_pos = CursorPosition::At(cx, cy);
}
}
}