Edit mode cursor
This commit is contained in:
parent
a11581748c
commit
60539e0ccf
@ -31,6 +31,8 @@ pub trait RedrawEvents {
|
|||||||
fn on_update_bg(&mut self, bg: i64);
|
fn on_update_bg(&mut self, bg: i64);
|
||||||
|
|
||||||
fn on_update_fg(&mut self, fg: i64);
|
fn on_update_fg(&mut self, fg: i64);
|
||||||
|
|
||||||
|
fn on_mode_change(&mut self, mode: &str);
|
||||||
}
|
}
|
||||||
|
|
||||||
macro_rules! try_str {
|
macro_rules! try_str {
|
||||||
@ -187,6 +189,12 @@ fn call(method: &str, args: Vec<Value>) {
|
|||||||
Ok(())
|
Ok(())
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
"mode_change" => {
|
||||||
|
safe_call(move |ui| {
|
||||||
|
ui.on_mode_change(try_str!(args[0]));
|
||||||
|
Ok(())
|
||||||
|
});
|
||||||
|
}
|
||||||
_ => println!("Event {}({:?})", method, args),
|
_ => println!("Event {}({:?})", method, args),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
26
src/ui.rs
26
src/ui.rs
@ -37,6 +37,13 @@ thread_local!(pub static UI: RefCell<Ui> = {
|
|||||||
RefCell::new(Ui::new())
|
RefCell::new(Ui::new())
|
||||||
});
|
});
|
||||||
|
|
||||||
|
#[derive(PartialEq)]
|
||||||
|
enum NvimMode {
|
||||||
|
Normal,
|
||||||
|
Insert,
|
||||||
|
Other,
|
||||||
|
}
|
||||||
|
|
||||||
pub struct Ui {
|
pub struct Ui {
|
||||||
pub model: UiModel,
|
pub model: UiModel,
|
||||||
nvim: Option<Neovim>,
|
nvim: Option<Neovim>,
|
||||||
@ -48,6 +55,7 @@ pub struct Ui {
|
|||||||
line_height: Option<f64>,
|
line_height: Option<f64>,
|
||||||
char_width: Option<f64>,
|
char_width: Option<f64>,
|
||||||
resize_timer: Option<u32>,
|
resize_timer: Option<u32>,
|
||||||
|
mode: NvimMode,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Ui {
|
impl Ui {
|
||||||
@ -63,6 +71,7 @@ impl Ui {
|
|||||||
line_height: None,
|
line_height: None,
|
||||||
char_width: None,
|
char_width: None,
|
||||||
resize_timer: None,
|
resize_timer: None,
|
||||||
|
mode: NvimMode::Insert,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -236,9 +245,16 @@ fn draw(ui: &Ui, ctx: &cairo::Context) {
|
|||||||
|
|
||||||
if row == line_idx && col == col_idx {
|
if row == line_idx && col == col_idx {
|
||||||
ctx.set_source_rgba(1.0 - bg.0, 1.0 - bg.1, 1.0 - bg.2, 0.5);
|
ctx.set_source_rgba(1.0 - bg.0, 1.0 - bg.1, 1.0 - bg.2, 0.5);
|
||||||
|
|
||||||
|
let cursor_width = if ui.mode == NvimMode::Insert {
|
||||||
|
char_width / 5.0
|
||||||
|
} else {
|
||||||
|
char_width
|
||||||
|
};
|
||||||
|
|
||||||
ctx.rectangle(current_point.0,
|
ctx.rectangle(current_point.0,
|
||||||
line_y - line_height,
|
line_y - line_height,
|
||||||
char_width,
|
cursor_width,
|
||||||
line_height);
|
line_height);
|
||||||
ctx.fill();
|
ctx.fill();
|
||||||
ctx.move_to(current_point.0, current_point.1);
|
ctx.move_to(current_point.0, current_point.1);
|
||||||
@ -344,6 +360,14 @@ impl RedrawEvents for Ui {
|
|||||||
self.fg_color = COLOR_WHITE;
|
self.fg_color = COLOR_WHITE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn on_mode_change(&mut self, mode: &str) {
|
||||||
|
match mode {
|
||||||
|
"normal" => self.mode = NvimMode::Normal,
|
||||||
|
"insert" => self.mode = NvimMode::Insert,
|
||||||
|
_ => self.mode = NvimMode::Other,
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn split_color(indexed_color: u64) -> Color {
|
fn split_color(indexed_color: u64) -> Color {
|
||||||
|
Loading…
Reference in New Issue
Block a user