RustでeguiでHello Worldウィンドウを表示する

 eguiはGUIの外部ライブラリ クレートです。

 epiはequiのGUIのウィンドウのインターフェースを提供する外部ライブラリ クレートです。

 eframeはeguiのフレームワークの外部ライブラリ クレートです。



 eguiはLinuxの場合だけ次のコマンドを実行する必要が有ります。

――――――――――――――――――――

sudo apt-get install libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev libspeechd-dev libxkbcommon-dev libssl-dev

――――――――――――――――――――

 libxcbはLinuxのGUIのX Window SystemのC言語のライブラリのようです。

 libspeechdは音声合成のC言語のライブラリのようです。

 libxkbはLinuxのキーボードのC言語のライブラリのようです。

 libsslはSSLのC言語のライブラリのようです。


Cargo.toml

――――――――――――――――――――

[package]

name = "epub_maker"

version = "0.1.0"

edition = "2021"


[dependencies]

eframe = "0.16"

――――――――――――――――――――


main.rs

――――――――――――――――――――

use eframe::epi::App;

use eframe::egui::CtxRef;

use eframe::epi::Frame;

use eframe::epi::Storage;

use eframe::egui::Vec2;

use eframe::egui::FontDefinitions;

use eframe::egui::FontData;

use eframe::egui::FontFamily;

use eframe::egui::CentralPanel;

use eframe::NativeOptions;


struct AppImpl {}


impl App for AppImpl {


  //ウィンドウのタイトルなどに利用されます。

  fn name(&self) -> &str {

    return "タイトル";

  }


  //描画の前に1回だけ起動されます。

  fn setup(&mut self, ctx: &CtxRef, _frame: &Frame, _storage: Option<&dyn Storage>) {


    //日本語のフォントを設定

    //.ttfか.otf

    let mut font_definitions = FontDefinitions::default();

    font_definitions.font_data.insert(

      "ja".to_owned(),

      FontData::from_static(include_bytes!("/usr/share/fonts/truetype/takao-gothic/TakaoPGothic.ttf"))

    );

    font_definitions.fonts_for_family.get_mut(&FontFamily::Proportional).unwrap().insert(0, "ja".to_owned());

    font_definitions.fonts_for_family.get_mut(&FontFamily::Monospace).unwrap().insert(0, "ja".to_owned());

    ctx.set_fonts(font_definitions);


    //ウィンドウのサイズを設定

    _frame.set_window_size(Vec2::new(800.0, 500.0));

  }


  //描画のたびに起動されます。

  fn update(&mut self, ctx: &CtxRef, _frame: &Frame) {


    //拡大

    ctx.set_pixels_per_point(1.5);


    CentralPanel::default().show(ctx, |ui| {


      ui.label("こんにちは");


    });

  }

}


fn main() {

  eframe::run_native(Box::new(AppImpl{}), NativeOptions::default());

}

――――――――――――――――――――

 コピペする場合は、2文字の全角空白を4文字の半角空白に、/usr/share/fonts/truetype/takao-gothic/TakaoPGothic.ttfを適切な日本語のフォントのファイルのパスに、置換してください。


 eguiは、日本語のフォントのファイルを指定しないと、日本語が文字化けします。


 struct AppImpl {}

 impl App for AppImpl {

 はJava風に書くと、

 class AppImpl implements App {

 に成ります。


 Rustではimplでstructで定義した構造体にメソッドを実装させる事ができるようです。


 Rustではimplで実装する処理の最初の引数は必ず&selfという自身のインスタンスの参照に成るようです。

  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る