locks: Draw based on current view
This commit is contained in:
@ -3,6 +3,7 @@
|
|||||||
use cairo;
|
use cairo;
|
||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
|
|
||||||
|
use ::action::Action;
|
||||||
use ::keyboard;
|
use ::keyboard;
|
||||||
use ::layout::{ Button, Layout };
|
use ::layout::{ Button, Layout };
|
||||||
use ::layout::c::{ EekGtkKeyboard, Point };
|
use ::layout::c::{ EekGtkKeyboard, Point };
|
||||||
@ -37,6 +38,7 @@ mod c {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Draws all buttons that are not in the base state
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern "C"
|
pub extern "C"
|
||||||
fn squeek_layout_draw_all_changed(
|
fn squeek_layout_draw_all_changed(
|
||||||
@ -51,12 +53,19 @@ mod c {
|
|||||||
for (row_offset, row) in &view.get_rows() {
|
for (row_offset, row) in &view.get_rows() {
|
||||||
for (x_offset, button) in &row.buttons {
|
for (x_offset, button) in &row.buttons {
|
||||||
let state = RefCell::borrow(&button.state).clone();
|
let state = RefCell::borrow(&button.state).clone();
|
||||||
if state.pressed == keyboard::PressType::Pressed || state.locked {
|
let locked = match state.action {
|
||||||
|
Action::SetView(name) => name == layout.current_view,
|
||||||
|
Action::LockView { lock, unlock: _ } => {
|
||||||
|
lock == layout.current_view
|
||||||
|
},
|
||||||
|
_ => false,
|
||||||
|
};
|
||||||
|
if state.pressed == keyboard::PressType::Pressed || locked {
|
||||||
render_button_at_position(
|
render_button_at_position(
|
||||||
renderer, &cr,
|
renderer, &cr,
|
||||||
row_offset + Point { x: *x_offset, y: 0.0 },
|
row_offset + Point { x: *x_offset, y: 0.0 },
|
||||||
button.as_ref(),
|
button.as_ref(),
|
||||||
state.pressed, state.locked,
|
state.pressed, locked,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user