本文へスキップ

ビュー

View::render は、無効化したあと、またはオペレーティングシステムが再描画を求めたときに UI を組み立てます。行が描画をまたいで同一のままになるよう、id を使います。

#ビューの仕組み

render からは impl IntoElement を返します。ウィンドウは invalidate またはプラットフォームのイベントまで休止します。

#条件付きコンテンツ

if self.expanded {
    text("Expanded content")
} else {
    text("Collapsed")
}

分岐を省略すると、そのノードはドロップされます。

#リスト

div().children(self.items.iter().map(|item| {
    text(item.name.as_str()).id(item.id)
}))

状態を持つ行には、安定した id を付けます。長いコレクションには VirtualList または Table を使います。

#ウィンドウのライフサイクル

それぞれの open_window は独立したビューを所有します。1 つのウィンドウを閉じても、ほかのビューはドロップされません。Dock アイコンは、has_visible_windows が false のときに新しいウィンドウを開いて扱います。

#現在のウィンドウ

fn render(&mut self, cx: &mut ViewContext<'_, Self>) -> impl IntoElement {
    let close = cx.listener("close", |_this, cx: &mut EventContext| {
        let _ = cx.close_window();
    });
    button().on_click(close).child("Close")
}

#テスト

quickgui check
quickgui test

examples/base_ui_components.rs は UI ギャラリーです。アプリ内インスペクターには、inspector クレート機能を有効にします。