From 9d8ef22f2c5645d6911f2677e877569874ccda38 Mon Sep 17 00:00:00 2001 From: tslil clingman <> Date: Thu, 5 Nov 2020 23:02:25 -0500 Subject: Bleh this is not a good hierarchy. How does software design work? --- src/gui.rs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) (limited to 'src') 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)); } _ => (), -- cgit v1.3.1