⚙
[rust]icedで画像を表示する
icedの基本
Sandboxトレイト(またはApplicationトレイト)を実装したSandbox構造体が
GUIアプリケーションの本体となる。
Sandbox構造体は(main関数の中で)runメソッドを実行し開始する。
runメソッドを実行すると、newメソッドが実行され、
titleメソッド・viewメソッドが実行される。
titleメソッドでウィンドウタイトルが設定される。
viewメソッドではエレメント(ウィジェット)を作成し、見た目を決定する。
// 上記の流れは振る舞いからの予想。
viewメソッドの中で画像表示を行うウィジェットを作成するために
imageハンドラーを利用する。
// updateメソッドでウィジェットの更新ができるが、今回は更新しないので中身なしにしている。
// Message関連型で更新の種類を指定できるが、今回は更新しないのでユニット型にしている。
関数のフローイメージは以下の通り。
薄い色にしている箇所は今回利用していない。
実際のコード
Cargo.toml
[package]
name = "display_image"
version = "0.1.0"
authors = ["kiduki <kiduki>"]
edition = "2018"
[dependencies]
iced = {version = "0.1.1",features =["image"]}
main.rs
//! icedで画像を表示する。
use iced::{image, Element, Image, Length, Sandbox, Settings};
pub fn main() {
DisplayImage::run(Settings::default())
}
struct DisplayImage;
impl Sandbox for DisplayImage {
type Message = ();
fn new() -> Self {
DisplayImage
}
fn title(&self) -> String {
String::from("display_image")
}
fn update(&mut self, _message: ()) {}
fn view(&mut self) -> Element<()> {
let img = Image::new(image::Handle::from_path(format!(
"{}/resources/iced_component_relation.png",
env!("CARGO_MANIFEST_DIR")
)))
.width(Length::Fill)
.height(Length::Fill);
img.into()
}
}
Discussion