aboutsummaryrefslogtreecommitdiff
path: root/src/gui.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui.rs')
-rw-r--r--src/gui.rs25
1 files changed, 24 insertions, 1 deletions
diff --git a/src/gui.rs b/src/gui.rs
index f7c7cac..3e60913 100644
--- a/src/gui.rs
+++ b/src/gui.rs
@@ -52,6 +52,7 @@ struct BoardRenderer {
white_colour: Color,
stone_size: f32,
game_size: i32,
+ frame_pad: i32,
}
impl BoardRenderer {
@@ -68,6 +69,7 @@ impl BoardRenderer {
stone_size: 0.8,
// I'm not sure where this should go
game_size: 5,
+ frame_pad: 5,
}
}
@@ -235,10 +237,30 @@ impl GUIBoard {
return g;
}
+ fn to_square(&self, x: i32, y: i32) -> (i32, i32) {
+ // Irritatingly we have to basically inline the exact same
+ // BoardRendererDetails code here as elsewhere, because
+ // *.draw2 wants to own the closure and i can't find a way to
+ // juggle this properly
+
+ let mut details = BoardRendererDetails::default();
+ details.set(
+ &self.button,
+ self.renderer.frame_pad,
+ self.renderer.game_size,
+ );
+
+ let x = x - details.xorg;
+ let y = y - details.yorg;
+
+ (x / details.square_size, y / details.square_size)
+ }
+
fn render(&self) -> impl FnMut(&mut Button) {
let renderer = self.renderer.clone();
let game_size = self.size;
+ // test code
let stack = vec![
Piece {
player: Player::Black,
@@ -284,7 +306,7 @@ impl GUIBoard {
let mut details = BoardRendererDetails::default();
move |button: &mut Button| {
- details.set(button, 5, game_size);
+ details.set(button, renderer.frame_pad, game_size);
renderer.render_board(&details);
// Test code for now
@@ -385,6 +407,7 @@ impl GUI {
GUIMessage::BoardClick => {
let x = event_x();
let y = event_y();
+ let (x, y) = self.board.to_square(x, y);
self.log.insert(&format!("Board click ({},{})\n", x, y));
}
_ => (),