83 lines
2.5 KiB
Rust
83 lines
2.5 KiB
Rust
use egui::{Pos2, Rect, Scene, Vec2};
|
|
|
|
use super::widget_gallery;
|
|
|
|
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
|
|
pub struct SceneDemo {
|
|
widget_gallery: widget_gallery::WidgetGallery,
|
|
scene_rect: Rect,
|
|
}
|
|
|
|
impl Default for SceneDemo {
|
|
fn default() -> Self {
|
|
Self {
|
|
widget_gallery: widget_gallery::WidgetGallery::default().with_date_button(false), // disable date button so that we don't fail the snapshot test
|
|
scene_rect: Rect::ZERO, // `egui::Scene` will initialize this to something valid
|
|
}
|
|
}
|
|
}
|
|
|
|
impl crate::Demo for SceneDemo {
|
|
fn name(&self) -> &'static str {
|
|
"🔍 Scene"
|
|
}
|
|
|
|
fn show(&mut self, ctx: &egui::Context, open: &mut bool) {
|
|
use crate::View as _;
|
|
let window = egui::Window::new("Scene")
|
|
.default_width(300.0)
|
|
.default_height(300.0)
|
|
.scroll(false)
|
|
.open(open);
|
|
window.show(ctx, |ui| self.ui(ui));
|
|
}
|
|
}
|
|
|
|
impl crate::View for SceneDemo {
|
|
fn ui(&mut self, ui: &mut egui::Ui) {
|
|
ui.label(
|
|
"You can pan by scrolling, and zoom using cmd-scroll. \
|
|
Double click on the background to reset view.",
|
|
);
|
|
ui.vertical_centered(|ui| {
|
|
ui.add(crate::egui_github_link_file!());
|
|
});
|
|
ui.separator();
|
|
|
|
ui.label(format!("Scene rect: {:#?}", &mut self.scene_rect));
|
|
|
|
ui.separator();
|
|
|
|
egui::Frame::group(ui.style())
|
|
.inner_margin(0.0)
|
|
.show(ui, |ui| {
|
|
let scene = Scene::new()
|
|
.max_inner_size([350.0, 1000.0])
|
|
.zoom_range(0.1..=2.0);
|
|
|
|
let mut reset_view = false;
|
|
let mut inner_rect = Rect::NAN;
|
|
let response = scene
|
|
.show(ui, &mut self.scene_rect, |ui| {
|
|
reset_view = ui.button("Reset view").clicked();
|
|
|
|
ui.add_space(16.0);
|
|
|
|
self.widget_gallery.ui(ui);
|
|
|
|
ui.put(
|
|
Rect::from_min_size(Pos2::new(0.0, -64.0), Vec2::new(200.0, 16.0)),
|
|
egui::Label::new("You can put a widget anywhere").selectable(false),
|
|
);
|
|
|
|
inner_rect = ui.min_rect();
|
|
})
|
|
.response;
|
|
|
|
if reset_view || response.double_clicked() {
|
|
self.scene_rect = inner_rect;
|
|
}
|
|
});
|
|
}
|
|
}
|