Board is in a scrollable window

This commit is contained in:
2026-03-10 19:42:44 -05:00
parent f868120a5b
commit 59d66fe395
2 changed files with 24 additions and 20 deletions

2
Cargo.lock generated
View File

@@ -756,7 +756,7 @@ checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868"
[[package]] [[package]]
name = "gamenite" name = "gamenite"
version = "0.1.0" version = "0.1.1"
dependencies = [ dependencies = [
"image", "image",
"serde", "serde",

View File

@@ -102,25 +102,28 @@ impl eframe::App for BoardBuilderApp {
}); });
}); });
CentralPanel::default().show(ctx, |ui| { CentralPanel::default().show(ctx, |ui| {
if let Some(texture) = self.texture.as_ref() { ScrollArea::both().show(ui, |ui| {
let size = ui.available_size(); if let Some(texture) = self.texture.as_ref() {
let (response, painter) = ui.allocate_painter(size, Sense::click()); let raw_image = self.image.as_ref().expect("Texture without an image");
let image = widgets::Image::new(texture, size); let size = Vec2::new(raw_image.width() as f32, raw_image.height() as f32);
image.paint_at(ui, response.rect); let (response, painter) = ui.allocate_painter(size, Sense::click());
let view = View(response.rect); let image = widgets::Image::new(texture, size);
self.draw_board(&painter, view); image.paint_at(ui, response.rect);
if let Some(pos) = response.interact_pointer_pos() { let view = View(response.rect);
let btn = if response.clicked() { self.draw_board(&painter, view);
PointerButton::Primary if let Some(pos) = response.interact_pointer_pos() {
} else if response.secondary_clicked() { let btn = if response.clicked() {
PointerButton::Secondary PointerButton::Primary
} else { } else if response.secondary_clicked() {
PointerButton::Middle PointerButton::Secondary
}; } else {
let (x, y) = view.xform(pos); PointerButton::Middle
self.dispatch_click(btn, x, y); };
} let (x, y) = view.xform(pos);
} self.dispatch_click(btn, x, y);
}
}
})
}); });
self.create_node_dialog.ui(ctx); self.create_node_dialog.ui(ctx);
@@ -140,6 +143,7 @@ impl BoardBuilderApp {
BoardBuilderApp::default() BoardBuilderApp::default()
} }
fn load_image_file(&mut self, ctx: &Context, image_file: &Path) -> Result<(), image::ImageError> { fn load_image_file(&mut self, ctx: &Context, image_file: &Path) -> Result<(), image::ImageError> {
let image = image::io::Reader::open(image_file)?.decode()?; let image = image::io::Reader::open(image_file)?.decode()?;
self.load_image(ctx, image); self.load_image(ctx, image);