From ca9333ec3ecf95265d32e89569fc023fb62e7dea Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Sun, 13 Jan 2019 00:55:56 +0100 Subject: [PATCH] Support multiple fonts --- docs/emigui_wasm_bg.wasm | Bin 484297 -> 502759 bytes emigui/src/emigui.rs | 14 +++++++--- emigui/src/font.rs | 8 ++---- emigui/src/fonts.rs | 58 +++++++++++++++++++++++++++++++++++++++ emigui/src/layout.rs | 24 +++++++++------- emigui/src/lib.rs | 4 +-- emigui/src/painter.rs | 12 ++++---- emigui/src/style.rs | 7 ++--- emigui/src/types.rs | 14 ++++------ emigui/src/widgets.rs | 44 +++++++++++++++++++++-------- emigui_wasm/src/app.rs | 3 +- emigui_wasm/src/lib.rs | 20 ++------------ emigui_wasm/src/webgl.rs | 2 +- 13 files changed, 140 insertions(+), 70 deletions(-) create mode 100644 emigui/src/fonts.rs diff --git a/docs/emigui_wasm_bg.wasm b/docs/emigui_wasm_bg.wasm index 30b96e968c5db7a091f29b6cd30a554546b16b18..c2e6330da868fc330f8ad8e2423bbbd9cdfff25b 100644 GIT binary patch delta 90803 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 VvQk08hzY~T4|P96_q-rS{vRuK_?iF! diff --git a/emigui/src/emigui.rs b/emigui/src/emigui.rs index 3013f86e..a98b967c 100644 --- a/emigui/src/emigui.rs +++ b/emigui/src/emigui.rs @@ -1,7 +1,6 @@ use std::sync::Arc; use crate::{ - font::Font, layout, layout::{LayoutOptions, Region}, style, @@ -48,20 +47,27 @@ pub struct Emigui { } impl Emigui { - pub fn new(font: Arc) -> Emigui { + pub fn new() -> Emigui { + let data = Arc::new(layout::Data::new()); + let fonts = data.fonts.clone(); Emigui { last_input: Default::default(), - data: Arc::new(layout::Data::new(font.clone())), + data, style: Default::default(), - painter: Painter::new(font), + painter: Painter::new(fonts), stats: Default::default(), } } + pub fn texture(&self) -> (u16, u16, &[u8]) { + self.data.fonts.texture() + } + pub fn new_frame(&mut self, new_input: RawInput) { let gui_input = GuiInput::from_last_and_new(&self.last_input, &new_input); self.last_input = new_input; + // TODO: avoid this clone let mut new_data = (*self.data).clone(); new_data.new_frame(gui_input); self.data = Arc::new(new_data); diff --git a/emigui/src/font.rs b/emigui/src/font.rs index 0c74e5a7..6eefb9c0 100644 --- a/emigui/src/font.rs +++ b/emigui/src/font.rs @@ -64,12 +64,8 @@ pub struct Font { } impl Font { - pub fn new(scale: usize, atlas: Arc>) -> Font { - // TODO: figure out a way to make the wasm smaller despite including a font. - // let font_data = include_bytes!("../fonts/ProggyClean.ttf"); // Use 13 for this. NOTHING ELSE. - // let font_data = include_bytes!("../fonts/DejaVuSans.ttf"); - let font_data = include_bytes!("../fonts/Roboto-Regular.ttf"); - let font = rusttype::Font::from_bytes(font_data as &[u8]).expect("Error constructing Font"); + pub fn new(atlas: Arc>, font_data: &'static [u8], scale: usize) -> Font { + let font = rusttype::Font::from_bytes(font_data).expect("Error constructing Font"); // println!( // "font.v_metrics: {:?}", diff --git a/emigui/src/fonts.rs b/emigui/src/fonts.rs new file mode 100644 index 00000000..05119df3 --- /dev/null +++ b/emigui/src/fonts.rs @@ -0,0 +1,58 @@ +use std::{ + collections::BTreeMap, + sync::{Arc, Mutex}, +}; + +use crate::{font::Font, texture_atlas::TextureAtlas}; + +/// TODO: rename +#[derive(Copy, Clone, Debug, Eq, Ord, PartialEq, PartialOrd, Serialize)] +pub enum TextStyle { + Body, + Button, + Heading, + // Monospace, +} + +pub struct Fonts { + fonts: BTreeMap, + texture: (u16, u16, Vec), +} + +impl Fonts { + pub fn new() -> Fonts { + let mut atlas = TextureAtlas::new(128, 8); // TODO: better default? + + // Make one white pixel for use for various stuff: + let pos = atlas.allocate((1, 1)); + atlas[pos] = 255; + + let atlas = Arc::new(Mutex::new(atlas)); + + // TODO: figure out a way to make the wasm smaller despite including a font. + // let font_data = include_bytes!("../fonts/ProggyClean.ttf"); // Use 13 for this. NOTHING ELSE. + // let font_data = include_bytes!("../fonts/DejaVuSans.ttf"); + let font_data = include_bytes!("../fonts/Roboto-Regular.ttf"); + + let mut fonts = BTreeMap::new(); + fonts.insert(TextStyle::Body, Font::new(atlas.clone(), font_data, 20)); + fonts.insert(TextStyle::Button, fonts[&TextStyle::Body].clone()); + fonts.insert(TextStyle::Heading, Font::new(atlas.clone(), font_data, 30)); + + let texture = atlas.lock().unwrap().clone().into_texture(); + + Fonts { fonts, texture } + } + + pub fn texture(&self) -> (u16, u16, &[u8]) { + (self.texture.0, self.texture.1, &self.texture.2) + } +} + +impl std::ops::Index for Fonts { + type Output = Font; + + fn index(&self, text_style: TextStyle) -> &Font { + &self.fonts[&text_style] + } +} diff --git a/emigui/src/layout.rs b/emigui/src/layout.rs index d8edbf6f..cc6ef203 100644 --- a/emigui/src/layout.rs +++ b/emigui/src/layout.rs @@ -5,7 +5,8 @@ use std::{ }; use crate::{ - font::{Font, TextFragment}, + font::TextFragment, + fonts::{Fonts, TextStyle}, math::*, types::*, widgets::{label, Widget}, @@ -143,7 +144,7 @@ impl GraphicLayers { pub struct Data { /// The default options for new regions pub(crate) options: Mutex, - pub(crate) font: Arc, + pub(crate) fonts: Arc, pub(crate) input: GuiInput, pub(crate) memory: Mutex, pub(crate) graphics: Mutex, @@ -153,7 +154,7 @@ impl Clone for Data { fn clone(&self) -> Self { Data { options: Mutex::new(self.options()), - font: self.font.clone(), + fonts: self.fonts.clone(), input: self.input.clone(), memory: Mutex::new(self.memory.lock().unwrap().clone()), graphics: Mutex::new(self.graphics.lock().unwrap().clone()), @@ -162,10 +163,10 @@ impl Clone for Data { } impl Data { - pub fn new(font: Arc) -> Data { + pub fn new() -> Data { Data { options: Default::default(), - font, + fonts: Arc::new(Fonts::new()), input: Default::default(), memory: Default::default(), graphics: Default::default(), @@ -277,8 +278,8 @@ impl Region { self.cursor } - pub fn font(&self) -> &Font { - &*self.data.font + pub fn fonts(&self) -> &Fonts { + &*self.data.fonts } pub fn width(&self) -> f32 { @@ -299,7 +300,9 @@ impl Region { ); let text: String = text.into(); let id = self.make_child_id(&text); - let (text, text_size) = self.font().layout_multiline(&text, self.width()); + let text_style = TextStyle::Heading; + let font = &self.fonts()[text_style]; + let (text, text_size) = font.layout_multiline(&text, self.width()); let text_cursor = self.cursor + self.options().button_padding; let (rect, interact) = self.reserve_space( vec2( @@ -328,6 +331,7 @@ impl Region { }); self.add_text( text_cursor + vec2(self.options().start_icon_width, 0.0), + text_style, text, ); @@ -504,11 +508,11 @@ impl Region { }) } - pub fn add_text(&mut self, pos: Vec2, text: Vec) { + pub fn add_text(&mut self, pos: Vec2, text_style: TextStyle, text: Vec) { for fragment in text { self.add_graphic(GuiCmd::Text { pos: pos + vec2(0.0, fragment.y_offset), - style: TextStyle::Label, + text_style, text: fragment.text, x_offsets: fragment.x_offsets, }); diff --git a/emigui/src/lib.rs b/emigui/src/lib.rs index a8a24348..62b0865c 100644 --- a/emigui/src/lib.rs +++ b/emigui/src/lib.rs @@ -8,6 +8,7 @@ extern crate serde_derive; mod emigui; mod font; +mod fonts; mod layout; pub mod math; mod painter; @@ -18,11 +19,10 @@ pub mod widgets; pub use crate::{ emigui::Emigui, - font::Font, + fonts::TextStyle, layout::LayoutOptions, layout::Region, painter::{Frame, Painter, Vertex}, style::Style, - texture_atlas::TextureAtlas, types::RawInput, }; diff --git a/emigui/src/painter.rs b/emigui/src/painter.rs index eed96105..f8909335 100644 --- a/emigui/src/painter.rs +++ b/emigui/src/painter.rs @@ -5,7 +5,7 @@ const AA_SIZE: f32 = 1.0; /// Outputs render info in a format suitable for e.g. OpenGL. use crate::{ - font::Font, + fonts::Fonts, math::{remap, vec2, Vec2, TAU}, types::{Color, PaintCmd}, }; @@ -193,12 +193,12 @@ impl Frame { #[derive(Clone)] pub struct Painter { - font: Arc, + fonts: Arc, } impl Painter { - pub fn new(font: Arc) -> Painter { - Painter { font } + pub fn new(fonts: Arc) -> Painter { + Painter { fonts } } pub fn paint(&self, commands: &[PaintCmd]) -> Frame { @@ -336,10 +336,12 @@ impl Painter { color, pos, text, + text_style, x_offsets, } => { + let font = &self.fonts[*text_style]; for (c, x_offset) in text.chars().zip(x_offsets.iter()) { - if let Some(glyph) = self.font.uv_rect(c) { + if let Some(glyph) = font.uv_rect(c) { let mut top_left = Vertex { pos: *pos + vec2( diff --git a/emigui/src/style.rs b/emigui/src/style.rs index b81df847..914dd9b4 100644 --- a/emigui/src/style.rs +++ b/emigui/src/style.rs @@ -232,15 +232,14 @@ fn translate_cmd(out_commands: &mut Vec, style: &Style, cmd: GuiCmd) { } GuiCmd::Text { pos, - style: text_style, + text_style, text, x_offsets, } => { - let color = match text_style { - TextStyle::Label => style.text_color(), - }; + let color = style.text_color(); out_commands.push(PaintCmd::Text { color, + text_style, pos, text, x_offsets, diff --git a/emigui/src/types.rs b/emigui/src/types.rs index 09449461..ac876ddf 100644 --- a/emigui/src/types.rs +++ b/emigui/src/types.rs @@ -1,4 +1,7 @@ -use crate::math::{Rect, Vec2}; +use crate::{ + fonts::TextStyle, + math::{Rect, Vec2}, +}; // ---------------------------------------------------------------------------- @@ -88,12 +91,6 @@ pub struct InteractInfo { pub active: bool, } -#[derive(Clone, Copy, Debug, Serialize)] -#[serde(rename_all = "snake_case")] -pub enum TextStyle { - Label, -} - #[derive(Clone, Debug, Serialize)] pub enum GuiCmd { PaintCommands(Vec), @@ -130,7 +127,7 @@ pub enum GuiCmd { /// The text should be vertically centered at the given position. Text { pos: Vec2, - style: TextStyle, + text_style: TextStyle, text: String, /// Start each character in the text, as offset from pos. x_offsets: Vec, @@ -179,6 +176,7 @@ pub enum PaintCmd { /// Top left corner of the first character. pos: Vec2, text: String, + text_style: TextStyle, /// Start each character in the text, as offset from pos. x_offsets: Vec, // TODO: font info diff --git a/emigui/src/widgets.rs b/emigui/src/widgets.rs index 60416a2c..2c9d9904 100644 --- a/emigui/src/widgets.rs +++ b/emigui/src/widgets.rs @@ -1,4 +1,5 @@ use crate::{ + fonts::TextStyle, layout::{make_id, GuiResponse, Id, Region}, math::{remap_clamp, vec2, Vec2}, types::GuiCmd, @@ -15,11 +16,20 @@ pub trait Widget { pub struct Label { text: String, + text_style: TextStyle, } impl Label { pub fn new>(text: S) -> Self { - Label { text: text.into() } + Label { + text: text.into(), + text_style: TextStyle::Body, + } + } + + pub fn text_style(mut self, text_style: TextStyle) -> Self { + self.text_style = text_style; + self } } @@ -29,8 +39,9 @@ pub fn label>(text: S) -> Label { impl Widget for Label { fn add_to(self, region: &mut Region) -> GuiResponse { - let (text, text_size) = region.font().layout_multiline(&self.text, region.width()); - region.add_text(region.cursor(), text); + let font = ®ion.fonts()[self.text_style]; + let (text, text_size) = font.layout_multiline(&self.text, region.width()); + region.add_text(region.cursor(), self.text_style, text); let (_, interact) = region.reserve_space(text_size, None); region.response(interact) } @@ -51,12 +62,14 @@ impl Button { impl Widget for Button { fn add_to(self, region: &mut Region) -> GuiResponse { let id = region.make_child_id(&self.text); - let (text, text_size) = region.font().layout_multiline(&self.text, region.width()); + let text_style = TextStyle::Button; + let font = ®ion.fonts()[text_style]; + let (text, text_size) = font.layout_multiline(&self.text, region.width()); let text_cursor = region.cursor() + region.options().button_padding; let (rect, interact) = region.reserve_space(text_size + 2.0 * region.options().button_padding, Some(id)); region.add_graphic(GuiCmd::Button { interact, rect }); - region.add_text(text_cursor, text); + region.add_text(text_cursor, text_style, text); region.response(interact) } } @@ -81,7 +94,9 @@ impl<'a> Checkbox<'a> { impl<'a> Widget for Checkbox<'a> { fn add_to(self, region: &mut Region) -> GuiResponse { let id = region.make_child_id(&self.text); - let (text, text_size) = region.font().layout_multiline(&self.text, region.width()); + let text_style = TextStyle::Button; + let font = ®ion.fonts()[text_style]; + let (text, text_size) = font.layout_multiline(&self.text, region.width()); let text_cursor = region.cursor() + region.options().button_padding + vec2(region.options().start_icon_width, 0.0); @@ -100,7 +115,7 @@ impl<'a> Widget for Checkbox<'a> { interact, rect, }); - region.add_text(text_cursor, text); + region.add_text(text_cursor, text_style, text); region.response(interact) } } @@ -129,7 +144,9 @@ pub fn radio>(checked: bool, text: S) -> RadioButton { impl Widget for RadioButton { fn add_to(self, region: &mut Region) -> GuiResponse { let id = region.make_child_id(&self.text); - let (text, text_size) = region.font().layout_multiline(&self.text, region.width()); + let text_style = TextStyle::Button; + let font = ®ion.fonts()[text_style]; + let (text, text_size) = font.layout_multiline(&self.text, region.width()); let text_cursor = region.cursor() + region.options().button_padding + vec2(region.options().start_icon_width, 0.0); @@ -145,7 +162,7 @@ impl Widget for RadioButton { interact, rect, }); - region.add_text(text_cursor, text); + region.add_text(text_cursor, text_style, text); region.response(interact) } } @@ -187,6 +204,9 @@ impl<'a> Slider<'a> { impl<'a> Widget for Slider<'a> { fn add_to(self, region: &mut Region) -> GuiResponse { + let text_style = TextStyle::Button; + let font = ®ion.fonts()[text_style]; + if let Some(text) = &self.text { let text_on_top = self.text_on_top.unwrap_or_default(); let full_text = format!("{}: {:.3}", text, self.value); @@ -196,8 +216,8 @@ impl<'a> Widget for Slider<'a> { naked.text = None; if text_on_top { - let (text, text_size) = region.font().layout_multiline(&full_text, region.width()); - region.add_text(region.cursor(), text); + let (text, text_size) = font.layout_multiline(&full_text, region.width()); + region.add_text(region.cursor(), text_style, text); region.reserve_space_inner(text_size); naked.add_to(region) } else { @@ -215,7 +235,7 @@ impl<'a> Widget for Slider<'a> { let (slider_rect, interact) = region.reserve_space( Vec2 { x: region.available_space.x, - y: region.data.font.line_spacing(), + y: font.line_spacing(), }, id, ); diff --git a/emigui_wasm/src/app.rs b/emigui_wasm/src/app.rs index 308da263..0e54ea0c 100644 --- a/emigui_wasm/src/app.rs +++ b/emigui_wasm/src/app.rs @@ -1,4 +1,4 @@ -use emigui::{math::*, types::*, widgets::*, Region}; +use emigui::{math::*, types::*, widgets::*, Region, TextStyle}; pub struct App { checked: bool, @@ -25,6 +25,7 @@ impl Default for App { impl App { pub fn show_gui(&mut self, gui: &mut Region) { + gui.add(label("Emigui").text_style(TextStyle::Heading)); gui.add(label("Emigui is an Immediate mode GUI written in Rust, compiled to WebAssembly, rendered with WebGL.")); gui.add(label(format!( diff --git a/emigui_wasm/src/lib.rs b/emigui_wasm/src/lib.rs index 4bd36b12..67a49f50 100644 --- a/emigui_wasm/src/lib.rs +++ b/emigui_wasm/src/lib.rs @@ -5,9 +5,7 @@ extern crate wasm_bindgen; extern crate emigui; -use std::sync::{Arc, Mutex}; - -use emigui::{widgets::label, Emigui, Font, RawInput, TextureAtlas}; +use emigui::{widgets::label, Emigui, RawInput}; use wasm_bindgen::prelude::*; @@ -32,20 +30,8 @@ pub struct State { impl State { fn new(canvas_id: &str) -> Result { - let mut atlas = TextureAtlas::new(128, 8); // TODO: better default? - - // Make one white pixel for use for various stuff: - let pos = atlas.allocate((1, 1)); - atlas[pos] = 255; - - let atlas = Arc::new(Mutex::new(atlas)); - - let font = Arc::new(Font::new(20, atlas.clone())); - - let texture = atlas.lock().unwrap().clone().into_texture(); - - let emigui = Emigui::new(font); - let webgl_painter = webgl::Painter::new(canvas_id, texture)?; + let emigui = Emigui::new(); + let webgl_painter = webgl::Painter::new(canvas_id, emigui.texture())?; Ok(State { app: Default::default(), emigui, diff --git a/emigui_wasm/src/webgl.rs b/emigui_wasm/src/webgl.rs index fb7a8121..c6a394d0 100644 --- a/emigui_wasm/src/webgl.rs +++ b/emigui_wasm/src/webgl.rs @@ -34,7 +34,7 @@ impl Painter { pub fn new( canvas_id: &str, - (tex_width, tex_height, pixels): (u16, u16, Vec), + (tex_width, tex_height, pixels): (u16, u16, &[u8]), ) -> Result { let document = web_sys::window().unwrap().document().unwrap(); let canvas = document.get_element_by_id(canvas_id).unwrap();