From 416bc6163effe9679e5b2efa7032d4c7b0efff91 Mon Sep 17 00:00:00 2001 From: Dorota Czaplejewicz Date: Sun, 2 Feb 2020 18:29:29 +0000 Subject: [PATCH] drawing: Generalized foreach_visible_button --- src/drawing.rs | 47 +++++++++++++++++++---------------------------- src/layout.rs | 14 ++++++++++++++ 2 files changed, 33 insertions(+), 28 deletions(-) diff --git a/src/drawing.rs b/src/drawing.rs index 33fcdc07..894bc600 100644 --- a/src/drawing.rs +++ b/src/drawing.rs @@ -47,22 +47,17 @@ mod c { let layout = unsafe { &mut *layout }; let cr = unsafe { cairo::Context::from_raw_none(cr) }; - let (view_offset, view) = layout.get_current_view_position(); - for (row_offset, row) in &view.get_rows() { - for (x_offset, button) in &row.buttons { - let state = RefCell::borrow(&button.state).clone(); - if state.pressed == keyboard::PressType::Pressed || state.locked { - render_button_at_position( - renderer, &cr, - view_offset - + row_offset.clone() - + Point { x: *x_offset, y: 0.0 }, - button.as_ref(), - state.pressed, state.locked, - ); - } + layout.foreach_visible_button(|offset, button| { + let state = RefCell::borrow(&button.state).clone(); + if state.pressed == keyboard::PressType::Pressed || state.locked { + render_button_at_position( + renderer, &cr, + offset, + button.as_ref(), + state.pressed, state.locked, + ); } - } + }) } #[no_mangle] @@ -74,19 +69,15 @@ mod c { ) { let layout = unsafe { &mut *layout }; let cr = unsafe { cairo::Context::from_raw_none(cr) }; - let (view_offset, view) = layout.get_current_view_position(); - for (row_offset, row) in &view.get_rows() { - for (x_offset, button) in &row.buttons { - render_button_at_position( - renderer, &cr, - view_offset - + row_offset.clone() - + Point { x: *x_offset, y: 0.0 }, - button.as_ref(), - keyboard::PressType::Released, false, - ); - } - } + + layout.foreach_visible_button(|offset, button| { + render_button_at_position( + renderer, &cr, + offset, + button.as_ref(), + keyboard::PressType::Released, false, + ); + }) } } diff --git a/src/layout.rs b/src/layout.rs index 8fb2f4b8..d7687f18 100644 --- a/src/layout.rs +++ b/src/layout.rs @@ -728,6 +728,20 @@ impl Layout { let (offset, layout) = self.get_current_view_position(); layout.find_button_by_position(point - offset) } + + pub fn foreach_visible_button(&self, mut f: F) + where F: FnMut(c::Point, &Box