aboutsummaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs66
1 files changed, 36 insertions, 30 deletions
diff --git a/src/main.rs b/src/main.rs
index ec68ebf6..b699fe44 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -19,14 +19,18 @@
#![feature(io)]
#![feature(drop_types_in_const)]
#![feature(unicode)]
+#![feature(custom_derive, plugin)]
+#![plugin(serde_macros)]
+extern crate cgmath;
+extern crate errno;
extern crate font;
-extern crate libc;
extern crate glutin;
-extern crate cgmath;
+extern crate libc;
extern crate notify;
-extern crate errno;
extern crate parking_lot;
+extern crate serde;
+extern crate serde_yaml;
#[macro_use]
extern crate bitflags;
@@ -37,6 +41,7 @@ mod macros;
mod renderer;
pub mod grid;
mod meter;
+pub mod config;
mod input;
mod tty;
pub mod ansi;
@@ -49,6 +54,7 @@ use std::sync::{mpsc, Arc};
use parking_lot::Mutex;
+use config::Config;
use font::FontDesc;
use meter::Meter;
use renderer::{QuadRenderer, GlyphCache};
@@ -131,18 +137,21 @@ mod gl {
include!(concat!(env!("OUT_DIR"), "/gl_bindings.rs"));
}
-#[cfg(target_os = "linux")]
-static FONT: &'static str = "DejaVu Sans Mono";
-#[cfg(target_os = "linux")]
-static FONT_STYLE: &'static str = "Book";
-
-#[cfg(target_os = "macos")]
-static FONT: &'static str = "Menlo";
-#[cfg(target_os = "macos")]
-static FONT_STYLE: &'static str = "Regular";
-
-
fn main() {
+ // Load configuration
+ let config = match Config::load() {
+ Err(err) => match err {
+ // Use default config when not found
+ config::Error::NotFound => Config::default(),
+ // Exit when there's a problem with it
+ _ => die!("{}", err),
+ },
+ Ok(config) => config,
+ };
+
+ let font = config.font();
+ let dpi = config.dpi();
+ let render_timer = config.render_timer();
let mut window = glutin::WindowBuilder::new()
.with_vsync()
@@ -156,17 +165,12 @@ fn main() {
println!("device_pixel_ratio: {}", dpr);
- let font_size = 11.;
-
- let sep_x = 0.0;
- let sep_y = 0.0;
+ let desc = FontDesc::new(font.family(), font.style());
+ let mut rasterizer = font::Rasterizer::new(dpi.x(), dpi.y(), dpr);
- let desc = FontDesc::new(FONT, FONT_STYLE);
- let mut rasterizer = font::Rasterizer::new(96., 96., dpr);
-
- let metrics = rasterizer.metrics(&desc, font_size);
- let cell_width = (metrics.average_advance + sep_x) as u32;
- let cell_height = (metrics.line_height + sep_y) as u32;
+ let metrics = rasterizer.metrics(&desc, font.size());
+ let cell_width = (metrics.average_advance + font.offset().x() as f64) as u32;
+ let cell_height = (metrics.line_height + font.offset().y() as f64) as u32;
println!("Cell Size: ({} x {})", cell_width, cell_height);
@@ -175,7 +179,7 @@ fn main() {
let reader = terminal.tty().reader();
let writer = terminal.tty().writer();
- let mut glyph_cache = GlyphCache::new(rasterizer, desc, font_size);
+ let mut glyph_cache = GlyphCache::new(rasterizer, desc, font.size());
let needs_render = Arc::new(AtomicBool::new(true));
let needs_render2 = needs_render.clone();
@@ -322,11 +326,13 @@ fn main() {
}
// Draw render timer
- let timing = format!("{:.3} usec", meter.average());
- let color = Rgb { r: 0xd5, g: 0x4e, b: 0x53 };
- renderer.with_api(terminal.size_info(), |mut api| {
- api.render_string(&timing[..], &mut glyph_cache, &color);
- });
+ if render_timer {
+ let timing = format!("{:.3} usec", meter.average());
+ let color = Rgb { r: 0xd5, g: 0x4e, b: 0x53 };
+ renderer.with_api(terminal.size_info(), |mut api| {
+ api.render_string(&timing[..], &mut glyph_cache, &color);
+ });
+ }
}
window.swap_buffers().unwrap();