Another change to Coord trait stuff

This commit is contained in:
2022-05-09 15:47:00 -05:00
parent 401560d35e
commit e97598b69f
7 changed files with 1745 additions and 75 deletions

View 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"

View 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 }
}