summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVille Hakulinen <ville.hakulinen@gmail.com>2020-07-03 22:00:03 +0300
committerVille Hakulinen <ville.hakulinen@gmail.com>2020-07-12 01:57:30 +0300
commitb246b4f8504878bab2ff24b7ff7f2190a53ac1a7 (patch)
tree942047f2ddfa8a9a8171bee566db4b9bf170668d
parentf44c25e871eeebc1fdbbfc6419c232e0fd3a83f1 (diff)
Handle float win anchor correctly
-rw-r--r--src/ui/grid/grid.rs9
-rw-r--r--src/ui/state.rs27
2 files changed, 21 insertions, 15 deletions
diff --git a/src/ui/grid/grid.rs b/src/ui/grid/grid.rs
index 76d9e9f..3cf563e 100644
--- a/src/ui/grid/grid.rs
+++ b/src/ui/grid/grid.rs
@@ -130,10 +130,11 @@ impl Grid {
}
// Update cursor color.
- let row = ctx.rows.get(ctx.cursor.0 as usize).unwrap();
- let cell = row.cell_at(ctx.cursor.1 as usize);
- let hl = hl_defs.get(&cell.hl_id).unwrap();
- ctx.cursor_color = hl.foreground.unwrap_or(hl_defs.default_fg);
+ if let Some(row) = ctx.rows.get(ctx.cursor.0 as usize) {
+ let cell = row.cell_at(ctx.cursor.1 as usize);
+ let hl = hl_defs.get(&cell.hl_id).unwrap();
+ ctx.cursor_color = hl.foreground.unwrap_or(hl_defs.default_fg);
+ }
while let Some(area) = ctx.queue_draw_area.pop() {
self.da.queue_draw_area(
diff --git a/src/ui/state.rs b/src/ui/state.rs
index e529f6b..2b2ec84 100644
--- a/src/ui/state.rs
+++ b/src/ui/state.rs
@@ -571,14 +571,16 @@ impl UIState {
let x = if evt.anchor.is_west() {
x_offset + anchor_metrics.cell_width * evt.anchor_col
} else {
- x_offset + anchor_metrics.cell_width * evt.anchor_col
- }.max(0.0);
+ x_offset + anchor_metrics.cell_width * evt.anchor_col - width
+ }
+ .max(0.0);
let y = if evt.anchor.is_north() {
y_offset + anchor_metrics.cell_height * evt.anchor_row
} else {
- y_offset + anchor_metrics.cell_height * evt.anchor_row
- }.max(0.0);
+ y_offset + anchor_metrics.cell_height * evt.anchor_row - height
+ }
+ .max(0.0);
let base_grid = self.grids.get(&1).unwrap();
let base_metrics = base_grid.get_grid_metrics();
@@ -600,13 +602,16 @@ impl UIState {
let nvim = nvim.clone();
let grid = evt.grid;
spawn_local(async move {
- nvim.ui_try_resize_grid(
- grid,
- new_size.0.unwrap_or_else(|| grid_metrics.cols) as i64,
- new_size.1.unwrap_or_else(|| grid_metrics.rows) as i64,
- )
- .await
- .unwrap();
+ if let Err(err) = nvim
+ .ui_try_resize_grid(
+ grid,
+ new_size.0.unwrap_or_else(|| grid_metrics.cols) as i64,
+ new_size.1.unwrap_or_else(|| grid_metrics.rows) as i64,
+ )
+ .await
+ {
+ error!("Failed to resize grid({}): {}", grid, err);
+ }
});
}