Resize underline nvim instance
This commit is contained in:
parent
118faaca25
commit
3b5e26f95c
1
Cargo.lock
generated
1
Cargo.lock
generated
@ -5,6 +5,7 @@ dependencies = [
|
|||||||
"cairo-rs 0.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
"cairo-rs 0.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"gdk 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"gdk 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"glib 0.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
"glib 0.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"glib-sys 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"gtk 0.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
"gtk 0.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"neovim-lib 0.1.0",
|
"neovim-lib 0.1.0",
|
||||||
"phf 0.7.14 (registry+https://github.com/rust-lang/crates.io-index)",
|
"phf 0.7.14 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
@ -7,7 +7,8 @@ build = "build.rs"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
cairo-rs = "0.0.8"
|
cairo-rs = "0.0.8"
|
||||||
glib = "0.0.8"
|
glib = "0.0.8"
|
||||||
gdk = "0.3.0"
|
glib-sys = "0.3"
|
||||||
|
gdk = "0.3"
|
||||||
#neovim-lib = "0.1"
|
#neovim-lib = "0.1"
|
||||||
rmp = "0.7"
|
rmp = "0.7"
|
||||||
phf = "0.7"
|
phf = "0.7"
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
extern crate gtk;
|
extern crate gtk;
|
||||||
extern crate gdk;
|
extern crate gdk;
|
||||||
extern crate glib;
|
extern crate glib;
|
||||||
|
extern crate glib_sys;
|
||||||
extern crate cairo;
|
extern crate cairo;
|
||||||
extern crate neovim_lib;
|
extern crate neovim_lib;
|
||||||
extern crate rmp;
|
extern crate rmp;
|
||||||
|
43
src/ui.rs
43
src/ui.rs
@ -12,7 +12,9 @@ use cairo::enums::{FontWeight, FontSlant};
|
|||||||
use gtk;
|
use gtk;
|
||||||
use gtk::prelude::*;
|
use gtk::prelude::*;
|
||||||
use gtk::{Window, WindowType, DrawingArea, Grid, ToolButton, ButtonBox, Orientation, Image};
|
use gtk::{Window, WindowType, DrawingArea, Grid, ToolButton, ButtonBox, Orientation, Image};
|
||||||
use gdk::EventKey;
|
use gdk::{EventKey, EventConfigure};
|
||||||
|
use glib;
|
||||||
|
use glib_sys;
|
||||||
use neovim_lib::{Neovim, NeovimApi};
|
use neovim_lib::{Neovim, NeovimApi};
|
||||||
|
|
||||||
use ui_model::{UiModel, Attrs, Color, COLOR_BLACK, COLOR_WHITE};
|
use ui_model::{UiModel, Attrs, Color, COLOR_BLACK, COLOR_WHITE};
|
||||||
@ -44,6 +46,7 @@ pub struct Ui {
|
|||||||
fg_color: Color,
|
fg_color: Color,
|
||||||
line_height: Option<f64>,
|
line_height: Option<f64>,
|
||||||
char_width: Option<f64>,
|
char_width: Option<f64>,
|
||||||
|
resize_timer: Option<u32>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Ui {
|
impl Ui {
|
||||||
@ -57,6 +60,7 @@ impl Ui {
|
|||||||
fg_color: COLOR_WHITE,
|
fg_color: COLOR_WHITE,
|
||||||
line_height: None,
|
line_height: None,
|
||||||
char_width: None,
|
char_width: None,
|
||||||
|
resize_timer: None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -106,6 +110,7 @@ impl Ui {
|
|||||||
gtk::main_quit();
|
gtk::main_quit();
|
||||||
Inhibit(false)
|
Inhibit(false)
|
||||||
});
|
});
|
||||||
|
self.drawing_area.connect_configure_event(gtk_configure_event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -116,7 +121,7 @@ fn gtk_key_press(_: &Window, ev: &EventKey) -> Inhibit {
|
|||||||
ui.nvim().input(&input).expect("Error run input command to nvim");
|
ui.nvim().input(&input).expect("Error run input command to nvim");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
Inhibit(true)
|
Inhibit(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn calc_char_bounds(ctx: &cairo::Context) -> TextExtents {
|
fn calc_char_bounds(ctx: &cairo::Context) -> TextExtents {
|
||||||
@ -140,7 +145,39 @@ fn gtk_draw(drawing_area: &DrawingArea, ctx: &cairo::Context) -> Inhibit {
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
Inhibit(true)
|
Inhibit(false)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn gtk_configure_event(_: &DrawingArea, ev: &EventConfigure) -> Inhibit {
|
||||||
|
UI.with(|ui_cell| {
|
||||||
|
let mut ui = ui_cell.borrow_mut();
|
||||||
|
let (width, height) = ev.get_size();
|
||||||
|
|
||||||
|
if let Some(timer) = ui.resize_timer {
|
||||||
|
unsafe { glib_sys::g_source_remove(timer) };
|
||||||
|
}
|
||||||
|
if let Some(line_height) = ui.line_height {
|
||||||
|
if let Some(char_width) = ui.char_width {
|
||||||
|
|
||||||
|
ui.resize_timer = Some(glib::timeout_add(250, move || {
|
||||||
|
UI.with(|ui_cell| {
|
||||||
|
let mut ui = ui_cell.borrow_mut();
|
||||||
|
ui.resize_timer = None;
|
||||||
|
|
||||||
|
let rows = (height as f64 / line_height).trunc() as usize;
|
||||||
|
let columns = (width as f64 / char_width).trunc() as usize;
|
||||||
|
if ui.model.rows != rows || ui.model.columns != columns {
|
||||||
|
if let Err(err) = ui.nvim().ui_try_resize(columns as u64, rows as u64) {
|
||||||
|
println!("Error trying resize nvim {}", err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Continue(false)
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Inhibit(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn draw(ui: &Ui, ctx: &cairo::Context) {
|
fn draw(ui: &Ui, ctx: &cairo::Context) {
|
||||||
|
Loading…
Reference in New Issue
Block a user