Another change to Coord trait stuff
This commit is contained in:
12
board-builder-impl-egui/Cargo.toml
Normal file
12
board-builder-impl-egui/Cargo.toml
Normal file
@@ -0,0 +1,12 @@
|
||||
[package]
|
||||
name = "board-builder-impl-egui"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
board-builder = { path = "../" }
|
||||
eframe = "0.18.0"
|
||||
rfd = "0.8.2"
|
||||
image = "0.24.2"
|
||||
90
board-builder-impl-egui/src/main.rs
Normal file
90
board-builder-impl-egui/src/main.rs
Normal file
@@ -0,0 +1,90 @@
|
||||
use eframe::egui;
|
||||
use egui::*;
|
||||
|
||||
use rfd::FileDialog;
|
||||
|
||||
use board_builder::Board;
|
||||
|
||||
use std::path::Path;
|
||||
|
||||
fn main() {
|
||||
let native_options = eframe::NativeOptions::default();
|
||||
eframe::run_native("Board Builder", native_options, Box::new(|_cc| Box::new(BoardBuilderApp::default())));
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
struct BoardBuilderApp {
|
||||
board: Board,
|
||||
texture: Option<TextureHandle>,
|
||||
image: Option<image::DynamicImage>,
|
||||
}
|
||||
|
||||
impl eframe::App for BoardBuilderApp {
|
||||
fn update(&mut self, ctx: &Context, _frame: &mut eframe::Frame) {
|
||||
TopBottomPanel::top("menubar").show(ctx, |ui| {
|
||||
menu::bar(ui, |ui| {
|
||||
fn choose_file() {
|
||||
FileDialog::new().pick_file();
|
||||
}
|
||||
ui.menu_button("File", |ui| {
|
||||
ui.button("New");
|
||||
if ui.button("Open...").clicked() {
|
||||
choose_file();
|
||||
}
|
||||
if ui.button("Save As...").clicked() {
|
||||
choose_file();
|
||||
}
|
||||
if ui.button("Open Image...").clicked() {
|
||||
let image_file = FileDialog::new()
|
||||
.add_filter("Image", &["png", "jpg", "jpeg", "gif", "webp", "bmp", "tiff"])
|
||||
.pick_file();
|
||||
if let Some(image_file) = image_file {
|
||||
self.load_image(ctx, &image_file);
|
||||
}
|
||||
}
|
||||
});
|
||||
ui.menu_button("Edit", |ui| {
|
||||
ui.button("Edit Nodes");
|
||||
ui.button("Edit Edges");
|
||||
ui.button("Edit Labels...");
|
||||
})
|
||||
});
|
||||
});
|
||||
CentralPanel::default().show(ctx, |ui| {
|
||||
if let Some(texture) = self.texture.as_ref() {
|
||||
let size = ui.available_size();
|
||||
ui.image(texture, size);
|
||||
let (response, painter) = ui.allocate_painter(size, Sense::click());
|
||||
let view = View(response.rect);
|
||||
self.draw_board(&painter, view);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
impl BoardBuilderApp {
|
||||
fn load_image(&mut self, ctx: &Context, image_file: &Path) -> Result<(), image::ImageError> {
|
||||
let image = image::io::Reader::open(image_file)?.decode()?;
|
||||
let egui_image = egui::ColorImage::from_rgba_unmultiplied(
|
||||
[image.width() as _, image.height() as _],
|
||||
image.to_rgba8().as_flat_samples().as_slice(),
|
||||
);
|
||||
|
||||
self.image = Some(image);
|
||||
self.texture = Some(ctx.load_texture("board-image", egui_image));
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn draw_board(&mut self, painter: &Painter, view: View) {
|
||||
for node in &self.board.nodes {
|
||||
todo!();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct View(Rect);
|
||||
|
||||
impl board_builder::CoordTransformer<Pos2> for View {
|
||||
fn origin(&self) -> Pos2 { self.0.min }
|
||||
fn extremes(&self) -> Pos2 { self.0.max }
|
||||
}
|
||||
Reference in New Issue
Block a user