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 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 {
|
Self {
|
||||||
window,
|
window,
|
||||||
device,
|
device,
|
||||||
|
@ -78,7 +81,7 @@ impl Application {
|
||||||
egui_state,
|
egui_state,
|
||||||
egui_ctx,
|
egui_ctx,
|
||||||
egui_rp,
|
egui_rp,
|
||||||
ui: ui::UserInterface::new(),
|
ui: ui::UserInterface::new(viewport_texture),
|
||||||
render_state,
|
render_state,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,16 +4,18 @@ pub struct UserInterface {
|
||||||
quit: bool,
|
quit: bool,
|
||||||
show_about: bool,
|
show_about: bool,
|
||||||
log_contents: String,
|
log_contents: String,
|
||||||
|
viewport: ViewportWidget,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl UserInterface {
|
impl UserInterface {
|
||||||
pub fn new() -> Self {
|
pub fn new(viewport_texture: egui::TextureHandle) -> Self {
|
||||||
Self {
|
Self {
|
||||||
developer_mode: true,
|
developer_mode: true,
|
||||||
show_profiler: false,
|
show_profiler: false,
|
||||||
quit: false,
|
quit: false,
|
||||||
show_about: false,
|
show_about: false,
|
||||||
log_contents: "Hello logging!\n".to_string(),
|
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