notedeck

One damus client to rule them all
git clone git://jb55.com/notedeck
Log | Files | Refs | README | LICENSE

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 }