実際のところ
フォントの追加
$ cd projecthome $ mkdir assets $ cd assets
で、ここに
Google Fonts
からNotoSansJpをいれます。
zip形式なので
$ unzip Noto_Sans_JP.zip
toml
[package] name = "guiproject" version = "0.1.0" edition = "2021" [dependencies] eframe = "0.24.0" [build] include = ["assets/*"]
スクリプト
use eframe::egui; fn main() -> Result<(), eframe::Error> { let options = eframe::NativeOptions { viewport: egui::ViewportBuilder::default() .with_inner_size([200.0, 200.0]), ..Default::default() }; eframe::run_native( "ひらがなカウンター", options, Box::new(|cc| { let mut fonts = egui::FontDefinitions::default(); fonts.font_data.insert( "notosans".to_owned(), egui::FontData::from_static(include_bytes!("../assets/static/NotoSansJP-Regular.ttf")), ); fonts.families .get_mut(&egui::FontFamily::Proportional) .unwrap() .insert(0, "notosans".to_owned()); cc.egui_ctx.set_fonts(fonts); Box::new(CharCounterApp::default()) }), ) } struct CharCounterApp { current_char_index: usize, chars: Vec<char>, } impl Default for CharCounterApp { fn default() -> Self { Self { current_char_index: 0, chars: vec![ 'あ', 'い', 'う', 'え', 'お', 'か', 'き', 'く', 'け', 'こ', 'さ', 'し', 'す', 'せ', 'そ', 'た', 'ち', 'つ', 'て', 'と', 'な', 'に', 'ぬ', 'ね', 'の', 'は', 'ひ', 'ふ', 'へ', 'ほ', 'ま', 'み', 'む', 'め', 'も', 'や', 'ゆ', 'よ', 'ら', 'り', 'る', 'れ', 'ろ', 'わ', 'を', 'ん' ], } } } impl eframe::App for CharCounterApp { fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { egui::CentralPanel::default().show(ctx, |ui| { ui.vertical_centered(|ui| { ui.add_space(50.0); // 現在の文字を大きく表示 ui.heading(self.chars[self.current_char_index].to_string()); // 何文字目かを表示 ui.label(format!("{} / {}", self.current_char_index + 1, self.chars.len())); ui.add_space(20.0); if ui.button("次へ").clicked() { // 最後の文字を超えたら最初に戻る self.current_char_index = if self.current_char_index >= self.chars.len() - 1 { 0 } else { self.current_char_index + 1 }; } }); }); } }
実行結果