0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

egui 0.29を使う

Last updated at Posted at 2024-10-22

egui

とにかく破壊的変更が多いcrateです。すでに以前の情報が使えなくなっている部分もあるのでとりあえず動かしたり日本語化したりしながら何となく問題なく使えるところまでやってみましょう。

以前とは違い正攻法でやっていますので学びなおしにもどうぞ。

※この記事は追記という形で更新してゆきます。

eframe_tamplate

まずはテンプレートプロジェクトをクローン。

git clone https://github.com/emilk/eframe_template.git
  • Cargo.tomlの [package] 内の nameauthorsを変更する。
  • 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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?