From c2c94ddda5991fb2eb110d48d23ef398ad8e4c47 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Sat, 19 Jan 2019 10:10:28 -0600 Subject: [PATCH] Pixel-perfect fonts --- TODO.md | 2 +- docs/emigui_wasm.js | 77 +++++++-------- docs/emigui_wasm_bg.wasm | Bin 528648 -> 529109 bytes docs/index.html | 24 ++--- emigui/src/emigui.rs | 11 ++- emigui/src/font.rs | 204 +++++++++++++++------------------------ emigui/src/fonts.rs | 15 ++- emigui/src/layout.rs | 8 +- emigui/src/math.rs | 13 ++- emigui/src/mesher.rs | 22 ++--- emigui/src/types.rs | 7 ++ emigui_wasm/src/app.rs | 13 ++- emigui_wasm/src/lib.rs | 12 ++- emigui_wasm/src/webgl.rs | 11 ++- 14 files changed, 207 insertions(+), 212 deletions(-) diff --git a/TODO.md b/TODO.md index c220cfe6..273568c5 100644 --- a/TODO.md +++ b/TODO.md @@ -2,7 +2,7 @@ * Break off example app from emigui_wasm * Try it on iPhone * Read TTF from browser? -* Device pixel density aware font rendering +* requestAnimationFrame # Additional bindings, e.g. Piston diff --git a/docs/emigui_wasm.js b/docs/emigui_wasm.js index 1e840518..3865002e 100644 --- a/docs/emigui_wasm.js +++ b/docs/emigui_wasm.js @@ -25,13 +25,14 @@ } /** * @param {string} arg0 + * @param {number} arg1 * @returns {State} */ - __exports.new_webgl_gui = function(arg0) { + __exports.new_webgl_gui = function(arg0, arg1) { const ptr0 = passStringToWasm(arg0); const len0 = WASM_VECTOR_LEN; try { - return State.__wrap(wasm.new_webgl_gui(ptr0, len0)); + return State.__wrap(wasm.new_webgl_gui(ptr0, len0, arg1)); } finally { wasm.__wbindgen_free(ptr0, len0 * 1); @@ -330,20 +331,20 @@ __exports.__widl_f_performance_Window = function(arg0) { }; -__exports.__wbg_new_1b06d86d496d7b40 = function(arg0) { +__exports.__wbg_new_12b9ae8fdb332911 = function(arg0) { return addHeapObject(new Float32Array(getObject(arg0))); }; -__exports.__wbg_subarray_fe30ee182e9ec716 = function(arg0, arg1, arg2) { +__exports.__wbg_subarray_1c02edccacdc6b96 = function(arg0, arg1, arg2) { return addHeapObject(getObject(arg0).subarray(arg1, arg2)); }; -__exports.__wbg_newnoargs_a6ad1b52f5989ea9 = function(arg0, arg1) { +__exports.__wbg_newnoargs_970ffcd96c15d34e = function(arg0, arg1) { let varg0 = getStringFromWasm(arg0, arg1); return addHeapObject(new Function(varg0)); }; -__exports.__wbg_call_720151a19a4c6808 = function(arg0, arg1, exnptr) { +__exports.__wbg_call_6ecd167e59b01396 = function(arg0, arg1, exnptr) { try { return addHeapObject(getObject(arg0).call(getObject(arg1))); } catch (e) { @@ -354,62 +355,38 @@ __exports.__wbg_call_720151a19a4c6808 = function(arg0, arg1, exnptr) { } }; -__exports.__wbg_new_e9ac55ad4b35397d = function(arg0) { +__exports.__wbg_new_24372bdd16e7ac17 = function(arg0) { return addHeapObject(new Int16Array(getObject(arg0))); }; -__exports.__wbg_subarray_930aeb4c907055d1 = function(arg0, arg1, arg2) { +__exports.__wbg_subarray_333aec38f24ecc8c = function(arg0, arg1, arg2) { return addHeapObject(getObject(arg0).subarray(arg1, arg2)); }; -__exports.__wbg_new_d90640b4228ff695 = function(arg0) { +__exports.__wbg_new_4e991c7c717b13c1 = function(arg0) { return addHeapObject(new Uint8Array(getObject(arg0))); }; -__exports.__wbg_subarray_ba3c433705738bca = function(arg0, arg1, arg2) { +__exports.__wbg_subarray_0de502469162fe71 = function(arg0, arg1, arg2) { return addHeapObject(getObject(arg0).subarray(arg1, arg2)); }; -__exports.__wbg_new_1c85449424e3413d = function(arg0) { +__exports.__wbg_new_ebb3136fdb1b1152 = function(arg0) { return addHeapObject(new Uint16Array(getObject(arg0))); }; -__exports.__wbg_subarray_08927d6d29836298 = function(arg0, arg1, arg2) { +__exports.__wbg_subarray_acb28098200224ff = function(arg0, arg1, arg2) { return addHeapObject(getObject(arg0).subarray(arg1, arg2)); }; -__exports.__wbg_instanceof_Memory_7db9a3f810fae661 = function(idx) { +__exports.__wbg_instanceof_Memory_48643a8591466d1a = function(idx) { return getObject(idx) instanceof WebAssembly.Memory ? 1 : 0; }; -__exports.__wbg_buffer_0346d756c794d630 = function(arg0) { +__exports.__wbg_buffer_74e21c76ddf2eb17 = function(arg0) { return addHeapObject(getObject(arg0).buffer); }; -function freeState(ptr) { - - wasm.__wbg_state_free(ptr); -} -/** -*/ -class State { - - static __wrap(ptr) { - const obj = Object.create(State.prototype); - obj.ptr = ptr; - - return obj; - } - - free() { - const ptr = this.ptr; - this.ptr = 0; - freeState(ptr); - } - -} -__exports.State = State; - __exports.__wbindgen_object_clone_ref = function(idx) { return addHeapObject(getObject(idx)); }; @@ -472,6 +449,30 @@ function takeObject(idx) { __exports.__wbindgen_rethrow = function(idx) { throw takeObject(idx); }; +function freeState(ptr) { + + wasm.__wbg_state_free(ptr); +} +/** +*/ +class State { + + static __wrap(ptr) { + const obj = Object.create(State.prototype); + obj.ptr = ptr; + + return obj; + } + + free() { + const ptr = this.ptr; + this.ptr = 0; + freeState(ptr); + } + +} +__exports.State = State; + __exports.__wbindgen_throw = function(ptr, len) { throw new Error(getStringFromWasm(ptr, len)); }; diff --git a/docs/emigui_wasm_bg.wasm b/docs/emigui_wasm_bg.wasm index f8e8da4d5672d3eb784a06ea6bb555db682f3e3d..708e92e5ead78a11f18e946cbb3e13704a9ac6e1 100644 GIT binary patch delta 95726 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

#pK<#DLtjD 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 delta 94358 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

h=wO=6co!FS!z_DeZEu9rMo>VaB9Awr~spp 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 AlK=n! diff --git a/docs/index.html b/docs/index.html index 36698c0f..78549424 100644 --- a/docs/index.html +++ b/docs/index.html @@ -56,7 +56,7 @@ function paint_gui(canvas, input) { if (g_webgl_painter === null) { - g_webgl_painter = wasm_bindgen.new_webgl_gui("canvas"); + g_webgl_painter = wasm_bindgen.new_webgl_gui("canvas", pixels_per_point()); } wasm_bindgen.run_gui(g_webgl_painter, JSON.stringify(input)); } @@ -64,24 +64,24 @@ var g_mouse_pos = { x: -1000.0, y: -1000.0 }; var g_mouse_down = false; + function pixels_per_point() { + // return 1.0; + return window.devicePixelRatio || 1.0; + } + function auto_resize_canvas(canvas) { - // TODO: figure out why this isn't quite working. - if (true) { - canvas.setAttribute("width", window.innerWidth); - canvas.setAttribute("height", window.innerHeight); - } else { - // TODO: this stuff - var pixels_per_point = window.devicePixelRatio || 1; - canvas.setAttribute("width", window.innerWidth * pixels_per_point); - canvas.setAttribute("height", window.innerHeight * pixels_per_point); - } + canvas.style.width = window.innerWidth + "px"; + canvas.style.height = window.innerHeight + "px"; + canvas.width = window.innerWidth * pixels_per_point(); + canvas.height = window.innerHeight * pixels_per_point(); } function get_input(canvas) { return { mouse_down: g_mouse_down, mouse_pos: g_mouse_pos, - screen_size: { x: canvas.width, y: canvas.height } + screen_size: { x: window.innerWidth, y: window.innerHeight }, + pixels_per_point: pixels_per_point(), }; } diff --git a/emigui/src/emigui.rs b/emigui/src/emigui.rs index d3e96db1..0a3690db 100644 --- a/emigui/src/emigui.rs +++ b/emigui/src/emigui.rs @@ -51,7 +51,10 @@ fn show_font_texture(texture: &Texture, gui: &mut Region) { "Font texture size: {} x {} (hover to zoom)", texture.width, texture.height ))); - let size = vec2(texture.width as f32, texture.height as f32); + let mut size = vec2(texture.width as f32, texture.height as f32); + if size.x > gui.width() { + size *= gui.width() / size.x; + } let interact = gui.reserve_space(size, None); let rect = interact.rect; let top_left = Vertex { @@ -118,10 +121,10 @@ pub struct Emigui { } impl Emigui { - pub fn new() -> Emigui { + pub fn new(pixels_per_point: f32) -> Emigui { Emigui { last_input: Default::default(), - data: Arc::new(layout::Data::new()), + data: Arc::new(layout::Data::new(pixels_per_point)), style: Default::default(), stats: Default::default(), } @@ -182,7 +185,7 @@ impl Emigui { show_font_texture(self.texture(), gui); if *old_font_sizes != new_font_sizes { let mut new_data = (*self.data).clone(); - let fonts = Fonts::from_sizes(new_font_sizes); + let fonts = Fonts::from_sizes(new_font_sizes, self.data.input.pixels_per_point); new_data.fonts = Arc::new(fonts); self.data = Arc::new(new_data); } diff --git a/emigui/src/font.rs b/emigui/src/font.rs index f7a2b759..ace7b147 100644 --- a/emigui/src/font.rs +++ b/emigui/src/font.rs @@ -9,8 +9,11 @@ use crate::{ pub struct TextFragment { /// The start of each character, starting at zero. + /// Unit: points. pub x_offsets: Vec, + /// 0 for the first line, n * line_spacing for the rest + /// Unit: points. pub y_offset: f32, pub text: String, } @@ -27,22 +30,24 @@ impl TextFragment { // ---------------------------------------------------------------------------- -#[derive(Clone, Copy, Debug, PartialEq)] +#[derive(Clone, Copy, Debug)] pub struct UvRect { - /// X/Y offset for nice rendering - pub offset: (i16, i16), + /// X/Y offset for nice rendering (unit: points). + pub offset: Vec2, + pub size: Vec2, - /// Top left corner. + /// Top left corner UV in texture. pub min: (u16, u16), - /// Inclusive + /// Bottom right corner (exclusive). pub max: (u16, u16), } -#[derive(Clone, Copy, Debug, PartialEq)] +#[derive(Clone, Copy, Debug)] pub struct GlyphInfo { id: rusttype::GlyphId, + /// Unit: points. pub advance_width: f32, /// Texture coordinates. None for space. @@ -53,24 +58,28 @@ pub struct GlyphInfo { const FIRST_ASCII: usize = 32; // 32 == space const LAST_ASCII: usize = 126; +/// The interface uses points as the unit for everything. #[derive(Clone)] pub struct Font { font: rusttype::Font<'static>, /// Maximum character height - scale: f32, + scale_in_pixels: f32, + pixels_per_point: f32, /// NUM_CHARS big glyph_infos: Vec, atlas: Arc>, } impl Font { - pub fn new(atlas: Arc>, font_data: &'static [u8], scale: f32) -> Font { + pub fn new( + atlas: Arc>, + font_data: &'static [u8], + scale_in_points: f32, + pixels_per_point: f32, + ) -> Font { let font = rusttype::Font::from_bytes(font_data).expect("Error constructing Font"); - // println!( - // "font.v_metrics: {:?}", - // font.v_metrics(Scale::uniform(scale)) - // ); + let scale_in_pixels = pixels_per_point * scale_in_points; let glyphs: Vec<_> = Self::supported_characters() .map(|c| { @@ -81,7 +90,7 @@ impl Font { "Failed to find a glyph for the character '{}'", c ); - let glyph = glyph.scaled(Scale::uniform(scale)); + let glyph = glyph.scaled(Scale::uniform(scale_in_pixels)); glyph.positioned(point(0.0, 0.0)) }) .collect(); @@ -90,7 +99,7 @@ impl Font { let mut atlas_lock = atlas.lock().unwrap(); for glyph in glyphs { - if let Some(bb) = glyph.pixel_bounding_box() { + let uv = if let Some(bb) = glyph.pixel_bounding_box() { let glyph_width = bb.width() as usize; let glyph_height = bb.height() as usize; assert!(glyph_width >= 1); @@ -107,41 +116,53 @@ impl Font { } }); - let offset_y = scale as i16 + bb.min.y as i16 - 4; // TODO: use font.v_metrics - glyph_infos.push(GlyphInfo { - id: glyph.id(), - advance_width: glyph.unpositioned().h_metrics().advance_width, - uv: Some(UvRect { - offset: (bb.min.x as i16, offset_y as i16), - min: (glyph_pos.0 as u16, glyph_pos.1 as u16), - max: ( - (glyph_pos.0 + glyph_width - 1) as u16, - (glyph_pos.1 + glyph_height - 1) as u16, - ), - }), - }); + let offset_y_in_pixels = + scale_in_pixels as f32 + bb.min.y as f32 - 4.0 * pixels_per_point; // TODO: use font.v_metrics + Some(UvRect { + offset: vec2( + bb.min.x as f32 / pixels_per_point, + offset_y_in_pixels / pixels_per_point, + ), + size: vec2(glyph_width as f32, glyph_height as f32) / pixels_per_point, + min: (glyph_pos.0 as u16, glyph_pos.1 as u16), + max: ( + (glyph_pos.0 + glyph_width) as u16, + (glyph_pos.1 + glyph_height) as u16, + ), + }) } else { // No bounding box. Maybe a space? - glyph_infos.push(GlyphInfo { - id: glyph.id(), - advance_width: glyph.unpositioned().h_metrics().advance_width, - uv: None, - }); - } + None + }; + + let advance_width_in_points = + glyph.unpositioned().h_metrics().advance_width / pixels_per_point; + + glyph_infos.push(GlyphInfo { + id: glyph.id(), + advance_width: advance_width_in_points, + uv, + }); } drop(atlas_lock); Font { font, - scale, + scale_in_pixels, + pixels_per_point, glyph_infos, atlas, } } + pub fn round_to_pixel(&self, point: f32) -> f32 { + (point * self.pixels_per_point).round() / self.pixels_per_point + } + + /// In points pub fn line_spacing(&self) -> f32 { - self.scale + self.scale_in_pixels / self.pixels_per_point } pub fn supported_characters() -> impl Iterator { @@ -168,7 +189,7 @@ impl Font { /// Returns the a single line of characters separated into words pub fn layout_single_line(&self, text: &str) -> Vec { - let scale = Scale::uniform(self.scale); + let scale_in_pixels = Scale::uniform(self.scale_in_pixels); let mut current_fragment = TextFragment { x_offsets: vec![0.0], @@ -176,16 +197,19 @@ impl Font { text: String::new(), }; let mut all_fragments = vec![]; - let mut cursor_x = 0.0f32; + let mut cursor_x_in_points = 0.0f32; let mut last_glyph_id = None; for c in text.chars() { if let Some(glyph) = self.glyph_info(c) { if let Some(last_glyph_id) = last_glyph_id { - cursor_x += self.font.pair_kerning(scale, last_glyph_id, glyph.id) + cursor_x_in_points += + self.font + .pair_kerning(scale_in_pixels, last_glyph_id, glyph.id) + / self.pixels_per_point } - cursor_x += glyph.advance_width; - cursor_x = cursor_x.round(); + cursor_x_in_points += glyph.advance_width; + cursor_x_in_points = self.round_to_pixel(cursor_x_in_points); last_glyph_id = Some(glyph.id); let is_space = glyph.uv.is_none(); @@ -194,14 +218,14 @@ impl Font { if !current_fragment.text.is_empty() { all_fragments.push(current_fragment); current_fragment = TextFragment { - x_offsets: vec![cursor_x], + x_offsets: vec![cursor_x_in_points], y_offset: 0.0, text: String::new(), } } } else { current_fragment.text.push(c); - current_fragment.x_offsets.push(cursor_x); + current_fragment.x_offsets.push(cursor_x_in_points); } } else { // Ignore unknown glyph @@ -214,9 +238,13 @@ impl Font { all_fragments } - pub fn layout_single_line_max_width(&self, text: &str, max_width: f32) -> Vec { + pub fn layout_single_line_max_width( + &self, + text: &str, + max_width_in_points: f32, + ) -> Vec { let mut words = self.layout_single_line(text); - if words.is_empty() || words.last().unwrap().max_x() <= max_width { + if words.is_empty() || words.last().unwrap().max_x() <= max_width_in_points { return words; // Early-out } @@ -227,7 +255,7 @@ impl Font { let mut cursor_y = 0.0; for word in words.iter_mut().skip(1) { - if word.max_x() - line_start_x >= max_width { + if word.max_x() - line_start_x >= max_width_in_points { // Time for a new line: cursor_y += line_spacing; line_start_x = word.min_x(); @@ -243,12 +271,16 @@ impl Font { } /// Returns each line + total bounding box size. - pub fn layout_multiline(&self, text: &str, max_width: f32) -> (Vec, Vec2) { + pub fn layout_multiline( + &self, + text: &str, + max_width_in_points: f32, + ) -> (Vec, Vec2) { let line_spacing = self.line_spacing(); let mut cursor_y = 0.0; let mut text_fragments = Vec::new(); for line in text.split('\n') { - let mut line_fragments = self.layout_single_line_max_width(&line, max_width); + let mut line_fragments = self.layout_single_line_max_width(&line, max_width_in_points); if let Some(last_word) = line_fragments.last() { let line_height = last_word.y_offset + line_spacing; for fragment in &mut line_fragments { @@ -259,7 +291,7 @@ impl Font { } else { cursor_y += line_spacing; } - cursor_y = cursor_y.round(); + cursor_y = self.round_to_pixel(cursor_y); } let mut widest_line = 0.0; @@ -270,80 +302,4 @@ impl Font { let bounding_size = vec2(widest_line, cursor_y); (text_fragments, bounding_size) } - - pub fn debug_print_all_chars(&self) { - let mut atlas_lock = self.atlas.lock().unwrap(); - let texture_mut = atlas_lock.texture_mut(); - - let max_width = 160; - let scale = Scale::uniform(self.scale); - let mut pixel_rows = vec![vec![0; max_width]; self.scale.ceil() as usize]; - let mut cursor_x = 0.0; - let cursor_y = 0; - let mut last_glyph_id = None; - for c in Self::supported_characters() { - if let Some(glyph) = self.glyph_info(c) { - if let Some(last_glyph_id) = last_glyph_id { - cursor_x += self.font.pair_kerning(scale, last_glyph_id, glyph.id) - } - if cursor_x + glyph.advance_width >= max_width as f32 { - println!("{}", (0..max_width).map(|_| "X").collect::()); - for row in pixel_rows { - println!("{}", as_ascii(&row)); - } - pixel_rows = vec![vec![0; max_width]; self.scale.ceil() as usize]; - cursor_x = 0.0; - } - if let Some(uv) = glyph.uv { - for x in uv.min.0..=uv.max.0 { - for y in uv.min.1..=uv.max.1 { - let pixel = texture_mut[(x as usize, y as usize)]; - let rx = uv.offset.0 + x as i16 - uv.min.0 as i16; - let ry = uv.offset.1 + y as i16 - uv.min.1 as i16; - let px = (cursor_x + rx as f32).round(); - let py = cursor_y + ry; - if 0.0 <= px && 0 <= py { - pixel_rows[py as usize][px as usize] = pixel; - } - } - } - } - cursor_x += glyph.advance_width; - last_glyph_id = Some(glyph.id); - } - } - println!("{}", (0..max_width).map(|_| "X").collect::()); - } -} - -fn as_ascii(pixels: &[u8]) -> String { - pixels - .iter() - .map(|pixel| { - if *pixel == 0 { - ' ' - } else if *pixel < 85 { - '.' - } else if *pixel < 170 { - 'o' - } else if *pixel < 255 { - 'O' - } else { - 'X' - } - }) - .collect() -} - -#[cfg(test)] -mod tests { - use super::*; - #[test] - fn font_test() { - let atlas = TextureAtlas::new(128, 8); - let atlas = Arc::new(Mutex::new(atlas)); - let font_data = include_bytes!("../fonts/Roboto-Regular.ttf"); - let font = Font::new(atlas, font_data, 13.0); - font.debug_print_all_chars(); - } } diff --git a/emigui/src/fonts.rs b/emigui/src/fonts.rs index 35b87b9b..3233d4d9 100644 --- a/emigui/src/fonts.rs +++ b/emigui/src/fonts.rs @@ -21,22 +21,24 @@ pub enum TextStyle { pub type FontSizes = BTreeMap; pub struct Fonts { + pixels_per_point: f32, sizes: FontSizes, fonts: BTreeMap, texture: Texture, } impl Fonts { - pub fn new() -> Fonts { + pub fn new(pixels_per_point: f32) -> Fonts { let mut sizes = FontSizes::new(); sizes.insert(TextStyle::Body, 18.0); sizes.insert(TextStyle::Button, 22.0); sizes.insert(TextStyle::Heading, 28.0); - Fonts::from_sizes(sizes) + Fonts::from_sizes(sizes, pixels_per_point) } - pub fn from_sizes(sizes: FontSizes) -> Fonts { + pub fn from_sizes(sizes: FontSizes, pixels_per_point: f32) -> Fonts { let mut fonts = Fonts { + pixels_per_point, sizes: Default::default(), fonts: Default::default(), texture: Default::default(), @@ -69,7 +71,12 @@ impl Fonts { self.sizes = sizes.clone(); self.fonts = sizes .into_iter() - .map(|(text_style, size)| (text_style, Font::new(atlas.clone(), typeface_data, size))) + .map(|(text_style, size)| { + ( + text_style, + Font::new(atlas.clone(), typeface_data, size, self.pixels_per_point), + ) + }) .collect(); self.texture = atlas.lock().unwrap().texture().clone(); diff --git a/emigui/src/layout.rs b/emigui/src/layout.rs index c8434352..3a3cbb6a 100644 --- a/emigui/src/layout.rs +++ b/emigui/src/layout.rs @@ -189,10 +189,10 @@ impl Clone for Data { } impl Data { - pub fn new() -> Data { + pub fn new(pixels_per_point: f32) -> Data { Data { options: Default::default(), - fonts: Arc::new(Fonts::new()), + fonts: Arc::new(Fonts::new(pixels_per_point)), input: Default::default(), memory: Default::default(), graphics: Default::default(), @@ -319,6 +319,10 @@ impl Region { self.dir } + pub fn cursor(&self) -> Vec2 { + self.cursor + } + // ------------------------------------------------------------------------ // Sub-regions: diff --git a/emigui/src/math.rs b/emigui/src/math.rs index 31d77b0a..8fcc43e2 100644 --- a/emigui/src/math.rs +++ b/emigui/src/math.rs @@ -28,10 +28,10 @@ impl Vec2 { } impl std::ops::AddAssign for Vec2 { - fn add_assign(&mut self, other: Vec2) { + fn add_assign(&mut self, rhs: Vec2) { *self = Vec2 { - x: self.x + other.x, - y: self.y + other.y, + x: self.x + rhs.x, + y: self.y + rhs.y, }; } } @@ -56,6 +56,13 @@ impl std::ops::Sub for Vec2 { } } +impl std::ops::MulAssign for Vec2 { + fn mul_assign(&mut self, rhs: f32) { + self.x *= rhs; + self.y *= rhs; + } +} + impl std::ops::Mul for Vec2 { type Output = Vec2; fn mul(self, factor: f32) -> Vec2 { diff --git a/emigui/src/mesher.rs b/emigui/src/mesher.rs index e65ee7b8..2ce561bc 100644 --- a/emigui/src/mesher.rs +++ b/emigui/src/mesher.rs @@ -1,5 +1,5 @@ const ANTI_ALIAS: bool = true; -const AA_SIZE: f32 = 1.0; +const AA_SIZE: f32 = 0.5; // TODO: 1.0 / pixels_per_point /// Outputs render info in a format suitable for e.g. OpenGL. use crate::{ @@ -336,23 +336,15 @@ impl Frame { for (c, x_offset) in text.chars().zip(x_offsets.iter()) { if let Some(glyph) = font.uv_rect(c) { let mut top_left = Vertex { - pos: *pos - + vec2( - x_offset + (glyph.offset.0 as f32), - glyph.offset.1 as f32, - ), - uv: (glyph.min.0, glyph.min.1), + pos: *pos + glyph.offset + vec2(*x_offset, 0.0), + uv: glyph.min, color: *color, }; - top_left.pos.x = top_left.pos.x.round(); // Pixel-perfection. - top_left.pos.y = top_left.pos.y.round(); // Pixel-perfection. + top_left.pos.x = font.round_to_pixel(top_left.pos.x); // Pixel-perfection. + top_left.pos.y = font.round_to_pixel(top_left.pos.y); // Pixel-perfection. let bottom_right = Vertex { - pos: top_left.pos - + vec2( - (1 + glyph.max.0 - glyph.min.0) as f32, - (1 + glyph.max.1 - glyph.min.1) as f32, - ), - uv: (glyph.max.0 + 1, glyph.max.1 + 1), + pos: top_left.pos + glyph.size, + uv: glyph.max, color: *color, }; frame.add_rect(top_left, bottom_right); diff --git a/emigui/src/types.rs b/emigui/src/types.rs index 3d4d09e9..348264f9 100644 --- a/emigui/src/types.rs +++ b/emigui/src/types.rs @@ -17,6 +17,9 @@ pub struct RawInput { /// Size of the screen in points. pub screen_size: Vec2, + + /// Also known as device pixel ratio, > 1 for HDPI screens. + pub pixels_per_point: f32, } /// What the gui maintains @@ -36,6 +39,9 @@ pub struct GuiInput { /// Size of the screen in points. pub screen_size: Vec2, + + /// Also known as device pixel ratio, > 1 for HDPI screens. + pub pixels_per_point: f32, } impl GuiInput { @@ -46,6 +52,7 @@ impl GuiInput { mouse_released: last.mouse_down && !new.mouse_down, mouse_pos: new.mouse_pos, screen_size: new.screen_size, + pixels_per_point: new.pixels_per_point, } } } diff --git a/emigui_wasm/src/app.rs b/emigui_wasm/src/app.rs index 9c02a0d1..659f42a8 100644 --- a/emigui_wasm/src/app.rs +++ b/emigui_wasm/src/app.rs @@ -30,9 +30,20 @@ impl App { gui.add(Separator::new()); gui.add(label(format!( - "Screen size: {} x {}", + "Screen size: {} x {}, pixels_per_point: {}", gui.input().screen_size.x, gui.input().screen_size.y, + gui.input().pixels_per_point, + ))); + gui.add(label(format!( + "mouse_pos: {} x {}", + gui.input().mouse_pos.x, + gui.input().mouse_pos.y, + ))); + gui.add(label(format!( + "gui cursor: {} x {}", + gui.cursor().x, + gui.cursor().y, ))); gui.horizontal(Align::Min, |gui| { diff --git a/emigui_wasm/src/lib.rs b/emigui_wasm/src/lib.rs index ec9a5cde..7a88676d 100644 --- a/emigui_wasm/src/lib.rs +++ b/emigui_wasm/src/lib.rs @@ -29,10 +29,10 @@ pub struct State { } impl State { - fn new(canvas_id: &str) -> Result { + fn new(canvas_id: &str, pixels_per_point: f32) -> Result { Ok(State { app: Default::default(), - emigui: Emigui::new(), + emigui: Emigui::new(pixels_per_point), webgl_painter: webgl::Painter::new(canvas_id)?, everything_ms: 0.0, }) @@ -56,7 +56,9 @@ impl State { region.add(label(format!("Everything: {:.1} ms", self.everything_ms))); let frame = self.emigui.paint(); - let result = self.webgl_painter.paint(&frame, self.emigui.texture()); + let result = + self.webgl_painter + .paint(&frame, self.emigui.texture(), raw_input.pixels_per_point); self.everything_ms = now_ms() - everything_start; @@ -65,8 +67,8 @@ impl State { } #[wasm_bindgen] -pub fn new_webgl_gui(canvas_id: &str) -> Result { - State::new(canvas_id) +pub fn new_webgl_gui(canvas_id: &str, pixels_per_point: f32) -> Result { + State::new(canvas_id, pixels_per_point) } #[wasm_bindgen] diff --git a/emigui_wasm/src/webgl.rs b/emigui_wasm/src/webgl.rs index 088fb0e8..33fdb58a 100644 --- a/emigui_wasm/src/webgl.rs +++ b/emigui_wasm/src/webgl.rs @@ -143,7 +143,12 @@ impl Painter { self.current_texture_id = Some(texture.id); } - pub fn paint(&mut self, frame: &Frame, texture: &Texture) -> Result<(), JsValue> { + pub fn paint( + &mut self, + frame: &Frame, + texture: &Texture, + pixels_per_point: f32, + ) -> Result<(), JsValue> { self.upload_texture(texture); let gl = &self.gl; @@ -280,8 +285,8 @@ impl Painter { .unwrap(); gl.uniform2f( Some(&u_screen_size_loc), - self.canvas.width() as f32, - self.canvas.height() as f32, + self.canvas.width() as f32 / pixels_per_point, + self.canvas.height() as f32 / pixels_per_point, ); let u_tex_size_loc = gl