Add ViewportWidget
This commit is contained in:
parent
73eceb601e
commit
0359c92ae9
|
@ -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,
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue