Add ViewportWidget

This commit is contained in:
mars 2022-05-15 14:25:17 -06:00
parent 73eceb601e
commit 0359c92ae9
2 changed files with 40 additions and 3 deletions

View File

@ -68,6 +68,9 @@ impl Application {
let render_state = render::RenderState::new(device.clone(), queue.clone(), config.format);
let image = egui::ColorImage::example();
let viewport_texture = egui_ctx.load_texture("example_viewport", image);
Self {
window,
device,
@ -78,7 +81,7 @@ impl Application {
egui_state,
egui_ctx,
egui_rp,
ui: ui::UserInterface::new(),
ui: ui::UserInterface::new(viewport_texture),
render_state,
}
}

View File

@ -4,16 +4,18 @@ pub struct UserInterface {
quit: bool,
show_about: bool,
log_contents: String,
viewport: ViewportWidget,
}
impl UserInterface {
pub fn new() -> Self {
pub fn new(viewport_texture: egui::TextureHandle) -> Self {
Self {
developer_mode: true,
show_profiler: false,
quit: false,
show_about: false,
log_contents: "Hello logging!\n".to_string(),
viewport: ViewportWidget::new(viewport_texture),
}
}
@ -117,6 +119,38 @@ impl UserInterface {
});
});
egui::CentralPanel::default().show(ctx, |ui| {});
egui::CentralPanel::default().show(ctx, |ui| {
ui.add(&mut self.viewport);
ui.heading("Viewport");
});
}
}
pub struct ViewportWidget {
texture: egui::TextureHandle,
}
impl ViewportWidget {
pub fn new(texture: egui::TextureHandle) -> Self {
Self { texture }
}
}
impl egui::Widget for &mut ViewportWidget {
fn ui(self, ui: &mut egui::Ui) -> egui::Response {
ui.style_mut().spacing.window_margin = egui::style::Margin::same(0.0);
let rect = ui.max_rect();
let id = egui::Id::new("viewport_widget");
let sense = egui::Sense::click_and_drag();
let response = ui.interact(rect, id, sense);
use egui::{pos2, Mesh, Rect, Color32, Shape};
let mut mesh = Mesh::with_texture(self.texture.id());
let uv = Rect::from_min_max(pos2(0.0, 0.0), pos2(1.0, 1.0));
let tint = Color32::WHITE;
mesh.add_rect_with_uv(rect, uv, tint);
ui.painter().add(Shape::mesh(mesh));
response
}
}