From c8b69412b2f0cfc1db4c8d21e2b784ce023a5180 Mon Sep 17 00:00:00 2001 From: Joe Wilm Date: Sat, 27 Feb 2016 20:26:31 -0800 Subject: [PATCH] Rasterizer uses DPI from Glutin --- Cargo.lock | 12 ++++++------ Cargo.toml | 7 ++++++- src/main.rs | 5 ++++- src/text.rs | 10 ++++++++-- 4 files changed, 24 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c177cf8c..7ad450e2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6,7 +6,7 @@ dependencies = [ "euclid 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", "freetype-rs 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "gl 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", - "glutin 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "glutin 0.4.9 (git+https://github.com/jwilm/glutin?rev=c95e6973ace3cbf321123a64588b27f032675be9)", "libc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", "servo-fontconfig 0.2.0 (git+https://github.com/jwilm/rust-fontconfig)", ] @@ -205,8 +205,8 @@ dependencies = [ [[package]] name = "glutin" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" +version = "0.4.9" +source = "git+https://github.com/jwilm/glutin?rev=c95e6973ace3cbf321123a64588b27f032675be9#c95e6973ace3cbf321123a64588b27f032675be9" dependencies = [ "android_glue 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "cgl 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -229,7 +229,7 @@ dependencies = [ "wayland-kbd 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "wayland-window 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", - "x11-dl 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "x11-dl 2.4.0 (git+https://github.com/jwilm/x11-rs?rev=40f08df7b4408980b922b3c6e258c9c6765c2c24)", ] [[package]] @@ -481,8 +481,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "x11-dl" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" +version = "2.4.0" +source = "git+https://github.com/jwilm/x11-rs?rev=40f08df7b4408980b922b3c6e258c9c6765c2c24#40f08df7b4408980b922b3c6e258c9c6765c2c24" dependencies = [ "dylib 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/Cargo.toml b/Cargo.toml index 74efab0a..b2a78b10 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,12 @@ license = "Apache-2.0" servo-fontconfig = { git = "https://github.com/jwilm/rust-fontconfig" } freetype-rs = "0.5.0" libc = "*" -glutin = "*" gl = "*" cgmath = "0.7" euclid = "0.6" + +[dependencies.glutin] +git = "https://github.com/jwilm/glutin" +rev = "c95e6973ace3cbf321123a64588b27f032675be9" +# version = "*" +# path = "../glutin" diff --git a/src/main.rs b/src/main.rs index 74a5058c..31e3586a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -26,8 +26,11 @@ fn main() { gl::Viewport(0, 0, width as i32, height as i32); } + let (dpi_x, dpi_y) = window.get_dpi().unwrap(); + let dpr = window.hidpi_factor(); + let desc = FontDesc::new("Ubuntu Mono", "Regular"); - let mut rasterizer = text::Rasterizer::new(); + let mut rasterizer = text::Rasterizer::new(dpi_x, dpi_y, dpr); let glyph_r = Glyph::new(&rasterizer.get_glyph(&desc, 180., 'R')); let glyph_u = Glyph::new(&rasterizer.get_glyph(&desc, 180., 'u')); diff --git a/src/text.rs b/src/text.rs index 8f5216e6..bd884ad3 100644 --- a/src/text.rs +++ b/src/text.rs @@ -10,6 +10,9 @@ pub struct Rasterizer { faces: HashMap>, library: Library, system_fonts: HashMap, + dpi_x: u32, + dpi_y: u32, + dpr: f32, } #[inline] @@ -35,13 +38,16 @@ impl FontDesc { } impl Rasterizer { - pub fn new() -> Rasterizer { + pub fn new(dpi_x: f32, dpi_y: f32, device_pixel_ratio: f32) -> Rasterizer { let library = Library::init().unwrap(); Rasterizer { system_fonts: get_font_families(), faces: HashMap::new(), library: library, + dpi_x: dpi_x as u32, + dpi_y: dpi_y as u32, + dpr: device_pixel_ratio, } } @@ -66,7 +72,7 @@ impl Rasterizer { pub fn get_glyph(&mut self, desc: &FontDesc, size: f32, c: char) -> RasterizedGlyph { let face = self.get_face(desc).expect("TODO handle get_face error"); // TODO DPI - face.set_char_size(to_freetype_26_6(size), 0, 96, 0).unwrap(); + face.set_char_size(to_freetype_26_6(size * self.dpr), 0, self.dpi_x, self.dpi_y).unwrap(); face.load_char(c as usize, freetype::face::RENDER).unwrap(); let glyph = face.glyph();