diff options
author | Ville Hakulinen <ville.hakulinen@gmail.com> | 2020-07-03 22:00:03 +0300 |
---|---|---|
committer | Ville Hakulinen <ville.hakulinen@gmail.com> | 2020-07-12 01:57:30 +0300 |
commit | b246b4f8504878bab2ff24b7ff7f2190a53ac1a7 (patch) | |
tree | 942047f2ddfa8a9a8171bee566db4b9bf170668d | |
parent | f44c25e871eeebc1fdbbfc6419c232e0fd3a83f1 (diff) |
Handle float win anchor correctly
-rw-r--r-- | src/ui/grid/grid.rs | 9 | ||||
-rw-r--r-- | src/ui/state.rs | 27 |
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); + } }); } |