drawing: Generalized foreach_visible_button
This commit is contained in:
@ -47,22 +47,17 @@ mod c {
|
|||||||
let layout = unsafe { &mut *layout };
|
let layout = unsafe { &mut *layout };
|
||||||
let cr = unsafe { cairo::Context::from_raw_none(cr) };
|
let cr = unsafe { cairo::Context::from_raw_none(cr) };
|
||||||
|
|
||||||
let (view_offset, view) = layout.get_current_view_position();
|
layout.foreach_visible_button(|offset, button| {
|
||||||
for (row_offset, row) in &view.get_rows() {
|
let state = RefCell::borrow(&button.state).clone();
|
||||||
for (x_offset, button) in &row.buttons {
|
if state.pressed == keyboard::PressType::Pressed || state.locked {
|
||||||
let state = RefCell::borrow(&button.state).clone();
|
render_button_at_position(
|
||||||
if state.pressed == keyboard::PressType::Pressed || state.locked {
|
renderer, &cr,
|
||||||
render_button_at_position(
|
offset,
|
||||||
renderer, &cr,
|
button.as_ref(),
|
||||||
view_offset
|
state.pressed, state.locked,
|
||||||
+ row_offset.clone()
|
);
|
||||||
+ Point { x: *x_offset, y: 0.0 },
|
|
||||||
button.as_ref(),
|
|
||||||
state.pressed, state.locked,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
@ -74,19 +69,15 @@ mod c {
|
|||||||
) {
|
) {
|
||||||
let layout = unsafe { &mut *layout };
|
let layout = unsafe { &mut *layout };
|
||||||
let cr = unsafe { cairo::Context::from_raw_none(cr) };
|
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() {
|
layout.foreach_visible_button(|offset, button| {
|
||||||
for (x_offset, button) in &row.buttons {
|
render_button_at_position(
|
||||||
render_button_at_position(
|
renderer, &cr,
|
||||||
renderer, &cr,
|
offset,
|
||||||
view_offset
|
button.as_ref(),
|
||||||
+ row_offset.clone()
|
keyboard::PressType::Released, false,
|
||||||
+ Point { x: *x_offset, y: 0.0 },
|
);
|
||||||
button.as_ref(),
|
})
|
||||||
keyboard::PressType::Released, false,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -728,6 +728,20 @@ impl Layout {
|
|||||||
let (offset, layout) = self.get_current_view_position();
|
let (offset, layout) = self.get_current_view_position();
|
||||||
layout.find_button_by_position(point - offset)
|
layout.find_button_by_position(point - offset)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn foreach_visible_button<F>(&self, mut f: F)
|
||||||
|
where F: FnMut(c::Point, &Box<Button>)
|
||||||
|
{
|
||||||
|
let (view_offset, view) = self.get_current_view_position();
|
||||||
|
for (row_offset, row) in &view.get_rows() {
|
||||||
|
for (x_offset, button) in &row.buttons {
|
||||||
|
let offset = view_offset
|
||||||
|
+ row_offset.clone()
|
||||||
|
+ c::Point { x: *x_offset, y: 0.0 };
|
||||||
|
f(offset, button);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mod procedures {
|
mod procedures {
|
||||||
|
|||||||
Reference in New Issue
Block a user