fonts.rs (4300B)
1 use egui::{FontData, FontDefinitions, FontTweak}; 2 use std::collections::BTreeMap; 3 use std::sync::Arc; 4 use tracing::debug; 5 6 use notedeck::fonts::NamedFontFamily; 7 8 // Use gossip's approach to font loading. This includes japanese fonts 9 // for rending stuff from japanese users. 10 pub fn setup_fonts(ctx: &egui::Context) { 11 let mut font_data: BTreeMap<String, Arc<FontData>> = BTreeMap::new(); 12 let mut families = BTreeMap::new(); 13 14 font_data.insert( 15 "Onest".to_owned(), 16 Arc::new(FontData::from_static(include_bytes!( 17 "../../../assets/fonts/onest/OnestRegular1602-hint.ttf" 18 ))), 19 ); 20 21 font_data.insert( 22 "OnestMedium".to_owned(), 23 Arc::new(FontData::from_static(include_bytes!( 24 "../../../assets/fonts/onest/OnestMedium1602-hint.ttf" 25 ))), 26 ); 27 28 font_data.insert( 29 "DejaVuSans".to_owned(), 30 Arc::new(FontData::from_static(include_bytes!( 31 "../../../assets/fonts/DejaVuSansSansEmoji.ttf" 32 ))), 33 ); 34 35 font_data.insert( 36 "OnestBold".to_owned(), 37 Arc::new(FontData::from_static(include_bytes!( 38 "../../../assets/fonts/onest/OnestBold1602-hint.ttf" 39 ))), 40 ); 41 42 /* 43 font_data.insert( 44 "DejaVuSansBold".to_owned(), 45 FontData::from_static(include_bytes!( 46 "../assets/fonts/DejaVuSans-Bold-SansEmoji.ttf" 47 )), 48 ); 49 50 font_data.insert( 51 "DejaVuSans".to_owned(), 52 FontData::from_static(include_bytes!("../assets/fonts/DejaVuSansSansEmoji.ttf")), 53 ); 54 font_data.insert( 55 "DejaVuSansBold".to_owned(), 56 FontData::from_static(include_bytes!( 57 "../assets/fonts/DejaVuSans-Bold-SansEmoji.ttf" 58 )), 59 ); 60 */ 61 62 font_data.insert( 63 "Inconsolata".to_owned(), 64 Arc::new( 65 FontData::from_static(include_bytes!( 66 "../../../assets/fonts/Inconsolata-Regular.ttf" 67 )) 68 .tweak(FontTweak { 69 scale: 1.22, // This font is smaller than DejaVuSans 70 y_offset_factor: -0.18, // and too low 71 y_offset: 0.0, 72 baseline_offset_factor: 0.0, 73 }), 74 ), 75 ); 76 77 font_data.insert( 78 "NotoSansCJK".to_owned(), 79 Arc::new(FontData::from_static(include_bytes!( 80 "../../../assets/fonts/NotoSansCJK-Regular.ttc" 81 ))), 82 ); 83 84 font_data.insert( 85 "NotoSansThai".to_owned(), 86 Arc::new(FontData::from_static(include_bytes!( 87 "../../../assets/fonts/NotoSansThai-Regular.ttf" 88 ))), 89 ); 90 91 // Some good looking emojis. Use as first priority: 92 font_data.insert( 93 "NotoEmoji".to_owned(), 94 Arc::new( 95 FontData::from_static(include_bytes!( 96 "../../../assets/fonts/NotoEmoji-Regular.ttf" 97 )) 98 .tweak(FontTweak { 99 scale: 1.1, // make them a touch larger 100 y_offset_factor: 0.0, 101 y_offset: 0.0, 102 baseline_offset_factor: 0.0, 103 }), 104 ), 105 ); 106 107 let base_fonts = vec![ 108 "DejaVuSans".to_owned(), 109 "NotoEmoji".to_owned(), 110 "NotoSansCJK".to_owned(), 111 "NotoSansThai".to_owned(), 112 ]; 113 114 let mut proportional = vec!["Onest".to_owned()]; 115 proportional.extend(base_fonts.clone()); 116 117 let mut medium = vec!["OnestMedium".to_owned()]; 118 medium.extend(base_fonts.clone()); 119 120 let mut mono = vec!["Inconsolata".to_owned()]; 121 mono.extend(base_fonts.clone()); 122 123 let mut bold = vec!["OnestBold".to_owned()]; 124 bold.extend(base_fonts.clone()); 125 126 let emoji = vec!["NotoEmoji".to_owned()]; 127 128 families.insert(egui::FontFamily::Proportional, proportional); 129 families.insert(egui::FontFamily::Monospace, mono); 130 families.insert( 131 egui::FontFamily::Name(NamedFontFamily::Medium.as_str().into()), 132 medium, 133 ); 134 families.insert( 135 egui::FontFamily::Name(NamedFontFamily::Bold.as_str().into()), 136 bold, 137 ); 138 families.insert( 139 egui::FontFamily::Name(NamedFontFamily::Emoji.as_str().into()), 140 emoji, 141 ); 142 143 debug!("fonts: {:?}", families); 144 145 let defs = FontDefinitions { 146 font_data, 147 families, 148 }; 149 150 ctx.set_fonts(defs); 151 }