diff --git a/src/editor/grid.rs b/src/editor/grid.rs index bf00c05..cc284ea 100644 --- a/src/editor/grid.rs +++ b/src/editor/grid.rs @@ -243,6 +243,6 @@ mod tests { assert_eq!(character_grid.width, width); assert_eq!(character_grid.height, height); - assert_eq!(character_grid.characters, vec![None; new_area]); + assert_eq!(character_grid.characters, vec![grid_cell.clone(); new_area]); } } diff --git a/src/editor/mod.rs b/src/editor/mod.rs index 47139e8..d4bc66f 100644 --- a/src/editor/mod.rs +++ b/src/editor/mod.rs @@ -114,11 +114,9 @@ impl Editor { height, } => { if let Some(window) = self.windows.get_mut(&grid) { - window.grid.resize(width, height); + window.resize(width, height); } else { - let new_window = - Window::new(grid, width, height, None, WindowAnchor::NorthWest, 0.0, 0.0); - self.windows.insert(grid, new_window); + self.windows.insert(grid, Window::new(grid, width, height, None, WindowAnchor::NorthWest, 0.0, 0.0)); } } RedrawEvent::GridLine { diff --git a/src/editor/window.rs b/src/editor/window.rs index e9112b6..cf3fadc 100644 --- a/src/editor/window.rs +++ b/src/editor/window.rs @@ -92,7 +92,7 @@ impl Window { text = text.repeat(times as usize); } - let mut draw_command_start_index = column_pos.clone(); + let cell_start_index = column_pos.clone(); if text.is_empty() { if let Some(cell) = self.grid.get_cell_mut(*column_pos, row_index) { *cell = Some(("".to_string(), style.clone())); @@ -108,27 +108,26 @@ impl Window { } let row = self.grid.row(row_index).unwrap(); - loop { - if draw_command_start_index > 0 { - if let Some((_, previous_style)) = &row[draw_command_start_index as usize - 1] { - if &style == previous_style { - draw_command_start_index = draw_command_start_index - 1; - continue; - } + + let mut draw_command_start_index = cell_start_index; + for possible_start_index in (cell_start_index.checked_sub(3).unwrap_or(0)..cell_start_index).rev() { + if let Some((_, possible_start_style)) = &row[possible_start_index as usize] { + if &style == possible_start_style { + draw_command_start_index = possible_start_index; + continue; } } break; } - let mut draw_command_end_index = column_pos.clone() - 1; - loop { - if draw_command_end_index < self.grid.width - 1 { - if let Some((_, next_style)) = &row[draw_command_end_index as usize] { - if &style == next_style { - draw_command_end_index = draw_command_end_index + 1; - continue; - } + let cell_end_index = column_pos.clone(); + let mut draw_command_end_index = column_pos.clone(); + for possible_end_index in cell_end_index..(cell_end_index + 3).min(self.grid.width - 1) { + if let Some((_, possible_end_style)) = &row[possible_end_index as usize] { + if &style == possible_end_style { + draw_command_end_index = possible_end_index; + continue; } } break; @@ -219,7 +218,6 @@ impl Window { } pub fn build_draw_commands(&mut self) -> Vec { - let mut draw_commands = Vec::new(); swap(&mut self.queued_draw_commands, &mut draw_commands); diff --git a/src/renderer/mod.rs b/src/renderer/mod.rs index bd214a5..2cf43f6 100644 --- a/src/renderer/mod.rs +++ b/src/renderer/mod.rs @@ -31,14 +31,20 @@ use cursor_renderer::CursorRenderer; #[derive(Clone)] pub struct RendererSettings { animation_length: f32, + floating_opacity: f32, + floating_blur: bool, } pub fn initialize_settings() { SETTINGS.set(&RendererSettings { animation_length: 0.15, + floating_opacity: 0.7, + floating_blur: true, }); register_nvim_setting!("window_animation_length", RendererSettings::animation_length); + register_nvim_setting!("floating_window_opacity", RendererSettings::floating_opacity); + register_nvim_setting!("floating_window_blur", RendererSettings::floating_opacity); } // ---------------------------------------------------------------------------- @@ -157,7 +163,8 @@ impl Renderer { cell_width: u64, style: &Option>, default_style: &Arc