egui
とにかく破壊的変更が多いcrateです。すでに以前の情報が使えなくなっている部分もあるのでとりあえず動かしたり日本語化したりしながら何となく問題なく使えるところまでやってみましょう。
以前とは違い正攻法でやっていますので学びなおしにもどうぞ。
※この記事は追記という形で更新してゆきます。
eframe_tamplate
まずはテンプレートプロジェクトをクローン。
git clone https://github.com/emilk/eframe_template.git
- Cargo.tomlの [package] 内の name、authorsを変更する。
- src/app.rs の eframe_template を 適当なものに変更する(例: myapp、packageのnameと同じにする)
-
cargo run --release
ですぐ動作する。
日本語を使えるようにする。
フォントファイル(ttf)を用意し、以下のようなコードでデフォルトのフォントに指定することで表示・入力が可能になる。
include_bytes! は src/ からの相対パスになるので適当なパスを指定する。
let mut fonts = egui::FontDefinitions::default();
fonts.font_data.insert("myrica".to_owned(), egui::FontData::from_static(include_bytes!("myrica.ttf")));
fonts.families.entry(egui::FontFamily::Proportional).or_default().insert(0, "myrica".to_owned());
fonts.families.entry(egui::FontFamily::Monospace).or_default().insert(0, "myrica".to_owned());
cc.egui_ctx.set_fonts(fonts);
eframe_templateのもともとのコードに対してこのように修正。
これで日本語の表示・入力が可能になる。
impl TemplateApp {
pub fn new(cc: &eframe::CreationContext<'_>) -> Self {
//日本語対応
let mut fonts = egui::FontDefinitions::default();
fonts.font_data.insert("myrica".to_owned(), egui::FontData::from_static(include_bytes!("myrica.ttf")));
fonts.families.entry(egui::FontFamily::Proportional).or_default().insert(0, "myrica".to_owned());
fonts.families.entry(egui::FontFamily::Monospace).or_default().insert(0, "myrica".to_owned());
cc.egui_ctx.set_fonts(fonts);
// ここまで
if let Some(storage) = cc.storage {
return eframe::get_value(storage, eframe::APP_KEY).unwrap_or_default();
}
Default::default()
}
}
text_edit_singlelineの日本語入力がおかしい
エンターキーまわりの処理の関係で日本語変換の確定動作のエンターでフォーカスを移す処理が入ってしまうためエンターキーを押すたびに入力が中断されてしまう。
ui.text_edit_singleline(&mut self.label);
eframe_templateのapp.rsでこのように書いてある部分がシングルラインの入力ボックス、これを以下のように書き直すと変換確定のエンターでフォーカスを失うことは無くなる。
逆にエンターでテキストエディットの入力確定動作が出来なくなるので利用目的をよく考えながら注意して都合の良い方を使う。
ちなみにマルチラインの場合、同じようにこの変更をすると改行が出来なくなる。
とてもまともに使えないのでマルチラインで日本語入力が必要なら現在のeguiは候補にしない方が良いかも。
ui.add(egui::TextEdit::singleline(&mut self.label).return_key(None));
ここまで 2024.10.23