Skip to content

Commit d311970

Browse files
committed
chore: Move some logic from DaemonBoard::new() to Key::new()
1 parent ab1cab3 commit d311970

File tree

3 files changed

+52
-56
lines changed

3 files changed

+52
-56
lines changed

backend/src/board.rs

Lines changed: 8 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -76,54 +76,17 @@ impl DaemonBoard {
7676
has_matrix,
7777
}));
7878

79-
let mut keys = Vec::new();
80-
for i in &self_.0.layout.physical {
81-
let key = Key::new(
82-
&self_,
83-
i.logical,
84-
i.physical,
85-
i.physical_name.clone(),
86-
i.background_color,
87-
);
88-
89-
for layer in 0..self_.0.layout.meta.num_layers {
90-
debug!(" Layer {}", layer);
91-
let scancode = match self_.0.daemon.keymap_get(
92-
board,
93-
layer,
94-
key.electrical.0,
95-
key.electrical.1,
96-
) {
97-
Ok(value) => value,
98-
Err(err) => {
99-
error!("Failed to read scancode: {:?}", err);
100-
0
101-
}
102-
};
103-
debug!(" Scancode: {:04X}", scancode);
104-
105-
let scancode_name = match self_.0.layout.scancode_names.get(&scancode) {
106-
Some(some) => some.to_string(),
107-
None => String::new(),
108-
};
109-
debug!(" Scancode Name: {}", scancode_name);
110-
111-
key.scancodes.borrow_mut().push((scancode, scancode_name));
112-
}
113-
114-
if self_.layout().meta.has_mode && key.leds.len() > 0 {
115-
match self_.0.daemon.color(self_.0.board, key.leds[0]) {
116-
Ok(color) => key.led_color.set(Some(color)),
117-
Err(err) => error!("error getting key color: {}", err),
118-
}
119-
}
120-
121-
keys.push(key);
122-
}
79+
let keys = self_
80+
.0
81+
.layout
82+
.physical
83+
.iter()
84+
.map(|i| Key::new(&self_, i))
85+
.collect();
12386
self_.0.keys.set(keys).unwrap();
12487

12588
let layers = (0..num_layers)
126-
.map(|layer| Layer::new(layer, &self_))
89+
.map(|layer| Layer::new(&self_, layer))
12790
.collect();
12891
self_.0.layers.set(layers).unwrap();
12992

backend/src/key.rs

Lines changed: 43 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use std::{
33
char,
44
};
55

6-
use crate::{DaemonBoard, DaemonBoardWeak, Hs, Rect, Rgb};
6+
use crate::{DaemonBoard, DaemonBoardWeak, Hs, PhysicalLayoutKey, Rect, Rgb};
77

88
#[derive(Debug)]
99
pub struct Key {
@@ -34,13 +34,12 @@ pub struct Key {
3434
}
3535

3636
impl Key {
37-
pub(crate) fn new(
38-
board: &DaemonBoard,
39-
logical: (u8, u8),
40-
physical: Rect,
41-
physical_name: String,
42-
background_color: Rgb,
43-
) -> Self {
37+
pub(crate) fn new(board: &DaemonBoard, physical_key: &PhysicalLayoutKey) -> Self {
38+
let logical = physical_key.logical;
39+
let physical = physical_key.physical;
40+
let physical_name = physical_key.physical_name.clone();
41+
let background_color = physical_key.background_color;
42+
4443
debug!("Key {}, {} = {:?}", physical.x, physical.y, physical_name);
4544

4645
debug!(" Logical: {:?}", logical);
@@ -75,6 +74,40 @@ impl Key {
7574
led_name.push_str(&led.to_string());
7675
}
7776

77+
let mut scancodes = Vec::new();
78+
for layer in 0..board.layout().meta.num_layers {
79+
debug!(" Layer {}", layer);
80+
let scancode =
81+
match board
82+
.0
83+
.daemon
84+
.keymap_get(board.0.board, layer, electrical.0, electrical.1)
85+
{
86+
Ok(value) => value,
87+
Err(err) => {
88+
error!("Failed to read scancode: {:?}", err);
89+
0
90+
}
91+
};
92+
debug!(" Scancode: {:04X}", scancode);
93+
94+
let scancode_name = match board.layout().scancode_names.get(&scancode) {
95+
Some(some) => some.to_string(),
96+
None => String::new(),
97+
};
98+
debug!(" Scancode Name: {}", scancode_name);
99+
100+
scancodes.push((scancode, scancode_name));
101+
}
102+
103+
let mut led_color = None;
104+
if board.layout().meta.has_mode && leds.len() > 0 {
105+
match board.0.daemon.color(board.0.board, leds[0]) {
106+
Ok(color) => led_color = Some(color),
107+
Err(err) => error!("error getting key color: {}", err),
108+
}
109+
}
110+
78111
Self {
79112
board: board.downgrade(),
80113
logical,
@@ -85,9 +118,9 @@ impl Key {
85118
electrical_name: format!("{}, {}", electrical.0, electrical.1),
86119
leds,
87120
led_name,
88-
led_color: Cell::new(None),
121+
led_color: Cell::new(led_color),
89122
pressed: Cell::new(false),
90-
scancodes: RefCell::new(Vec::new()),
123+
scancodes: RefCell::new(scancodes),
91124
background_color,
92125
}
93126
}

backend/src/layer.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ pub struct Layer {
1313
}
1414

1515
impl Layer {
16-
pub(crate) fn new(layer: u8, board: &DaemonBoard) -> Self {
16+
pub(crate) fn new(board: &DaemonBoard, layer: u8) -> Self {
1717
let index = if board.layout().meta.has_per_layer {
1818
0xf0 + layer
1919
} else {

0 commit comments

Comments
 (0)