From a1ba1ec0795b0780b8a41a12bd4c0d12a6144158 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20R=C3=B6ssler?= Date: Fri, 17 Dec 2021 18:39:15 +0100 Subject: [PATCH] add grid demo --- .../src/apps/demo/demo_app_windows.rs | 1 + egui_demo_lib/src/apps/demo/grid_demo.rs | 104 ++++++++++++++++++ egui_demo_lib/src/apps/demo/mod.rs | 1 + 3 files changed, 106 insertions(+) create mode 100644 egui_demo_lib/src/apps/demo/grid_demo.rs diff --git a/egui_demo_lib/src/apps/demo/demo_app_windows.rs b/egui_demo_lib/src/apps/demo/demo_app_windows.rs index ea1957e0..decada04 100644 --- a/egui_demo_lib/src/apps/demo/demo_app_windows.rs +++ b/egui_demo_lib/src/apps/demo/demo_app_windows.rs @@ -22,6 +22,7 @@ impl Default for Demos { Box::new(super::dancing_strings::DancingStrings::default()), Box::new(super::drag_and_drop::DragAndDropDemo::default()), Box::new(super::font_book::FontBook::default()), + Box::new(super::grid_demo::GridDemo::default()), Box::new(super::MiscDemoWindow::default()), Box::new(super::multi_touch::MultiTouch::default()), Box::new(super::painting::Painting::default()), diff --git a/egui_demo_lib/src/apps/demo/grid_demo.rs b/egui_demo_lib/src/apps/demo/grid_demo.rs new file mode 100644 index 00000000..10d3acaf --- /dev/null +++ b/egui_demo_lib/src/apps/demo/grid_demo.rs @@ -0,0 +1,104 @@ +use egui::Color32; +use egui_dynamic_grid::{GridBuilder, Padding, Size}; + +/// Shows off a table with dynamic layout +#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] +#[derive(Default)] +pub struct GridDemo {} + +impl super::Demo for GridDemo { + fn name(&self) -> &'static str { + "▣ Grid Demo" + } + + fn show(&mut self, ctx: &egui::CtxRef, open: &mut bool) { + egui::Window::new(self.name()) + .open(open) + .resizable(true) + .default_width(400.0) + .show(ctx, |ui| { + use super::View as _; + self.ui(ui); + }); + } +} + +impl super::View for GridDemo { + fn ui(&mut self, ui: &mut egui::Ui) { + GridBuilder::new(ui, Padding::new(0.0, 5.0)).vertical(|builder| { + builder + .row(Size::Absolute(50.0)) + .row(Size::Remainder) + .row(Size::RelativeMinimum { + relative: 0.5, + minimum: 60.0, + }) + .build(|mut grid| { + grid.cell(|ui| { + ui.painter().rect_filled( + ui.available_rect_before_wrap(), + 0.0, + Color32::BLUE, + ); + }); + grid.horizontal(|builder| { + builder.columns(Size::Remainder, 2).build(|mut grid| { + grid.cell(|ui| { + ui.painter().rect_filled( + ui.available_rect_before_wrap(), + 0.0, + Color32::RED, + ); + }); + grid.vertical(|builder| { + builder.rows(Size::Remainder, 3).build(|mut grid| { + grid.empty(); + grid.cell(|ui| { + ui.painter().rect_filled( + ui.available_rect_before_wrap(), + 0.0, + Color32::YELLOW, + ); + }); + }); + }); + }); + }); + grid.horizontal(|builder| { + builder + .column(Size::Remainder) + .column(Size::Absolute(50.0)) + .column(Size::Remainder) + .column(Size::Absolute(70.0)) + .build(|mut grid| { + grid.empty(); + grid.vertical(|builder| { + builder + .row(Size::Remainder) + .row(Size::Absolute(50.0)) + .row(Size::Remainder) + .build(|mut grid| { + grid.empty(); + grid.cell(|ui| { + ui.painter().rect_filled( + ui.available_rect_before_wrap(), + 0.0, + Color32::GOLD, + ); + }); + }); + }); + grid.empty(); + grid.cell(|ui| { + ui.painter().rect_filled( + ui.available_rect_before_wrap(), + 0.0, + Color32::GREEN, + ); + }); + }); + }); + }); + }); + } +} diff --git a/egui_demo_lib/src/apps/demo/mod.rs b/egui_demo_lib/src/apps/demo/mod.rs index 5945c45f..6dc85c14 100644 --- a/egui_demo_lib/src/apps/demo/mod.rs +++ b/egui_demo_lib/src/apps/demo/mod.rs @@ -12,6 +12,7 @@ pub mod dancing_strings; pub mod demo_app_windows; pub mod drag_and_drop; pub mod font_book; +pub mod grid_demo; pub mod layout_test; pub mod misc_demo_window; pub mod multi_touch;