@@ -3,17 +3,16 @@ use std::{collections::HashMap, fs, path::Path};
3
3
mod meta;
4
4
mod physical_layout;
5
5
pub use self :: meta:: Meta ;
6
- pub use physical_layout:: PhysicalLayout ;
6
+ pub ( crate ) use physical_layout:: { PhysicalLayout , PhysicalLayoutKey } ;
7
7
8
- use crate :: { Key , KeyMap , Rect , Rgb } ;
9
- use physical_layout:: { PhysicalKeyEnum , PhysicalLayoutEntry } ;
8
+ use crate :: KeyMap ;
10
9
11
10
pub struct Layout {
12
11
pub meta : Meta ,
13
12
pub default : KeyMap ,
14
13
pub keymap : HashMap < String , u16 > ,
15
14
pub scancode_names : HashMap < u16 , String > ,
16
- physical : PhysicalLayout ,
15
+ pub ( crate ) physical : Vec < PhysicalLayoutKey > ,
17
16
pub ( crate ) layout : HashMap < String , ( u8 , u8 ) > ,
18
17
pub ( crate ) leds : HashMap < String , Vec < u8 > > ,
19
18
}
@@ -79,7 +78,9 @@ impl Layout {
79
78
let ( keymap, scancode_names) = parse_keymap_json ( keymap_json) ;
80
79
let layout = serde_json:: from_str ( layout_json) . unwrap ( ) ;
81
80
let leds = serde_json:: from_str ( leds_json) . unwrap ( ) ;
82
- let physical = serde_json:: from_str ( physical_json) . unwrap ( ) ;
81
+ let physical = serde_json:: from_str :: < PhysicalLayout > ( physical_json)
82
+ . unwrap ( )
83
+ . keys ( ) ;
83
84
Self {
84
85
meta,
85
86
default,
@@ -132,63 +133,6 @@ impl Layout {
132
133
} ,
133
134
)
134
135
}
135
-
136
- pub ( crate ) fn keys ( & self ) -> Vec < Key > {
137
- let mut keys = Vec :: new ( ) ;
138
-
139
- let mut row_i = 0 ;
140
- let mut col_i = 0 ;
141
- let mut physical = Rect :: new ( 0.0 , 0.0 , 1.0 , 1.0 ) ;
142
- let mut background_color = Rgb :: new ( 0xcc , 0xcc , 0xcc ) ;
143
-
144
- for entry in & self . physical . 0 {
145
- if let PhysicalLayoutEntry :: Row ( row) = entry {
146
- for i in & row. 0 {
147
- match i {
148
- PhysicalKeyEnum :: Meta ( meta) => {
149
- debug ! ( "Key metadata {:?}" , meta) ;
150
- physical. x += meta. x ;
151
- physical. y -= meta. y ;
152
- physical. w = meta. w . unwrap_or ( physical. w ) ;
153
- physical. h = meta. h . unwrap_or ( physical. h ) ;
154
- background_color = meta
155
- . c
156
- . as_ref ( )
157
- . map ( |c| {
158
- let err = format ! ( "Failed to parse color {}" , c) ;
159
- Rgb :: parse ( & c[ 1 ..] ) . expect ( & err)
160
- } )
161
- . unwrap_or ( background_color) ;
162
- }
163
- PhysicalKeyEnum :: Name ( name) => {
164
- keys. push ( Key :: new (
165
- self ,
166
- ( row_i as u8 , col_i as u8 ) ,
167
- physical,
168
- name. clone ( ) ,
169
- background_color,
170
- ) ) ;
171
-
172
- physical. x += physical. w ;
173
-
174
- physical. w = 1.0 ;
175
- physical. h = 1.0 ;
176
-
177
- col_i += 1 ;
178
- }
179
- }
180
- }
181
-
182
- physical. x = 0.0 ;
183
- physical. y -= 1.0 ;
184
-
185
- col_i = 0 ;
186
- row_i += 1 ;
187
- }
188
- }
189
-
190
- keys
191
- }
192
136
}
193
137
194
138
fn parse_keymap_json ( keymap_json : & str ) -> ( HashMap < String , u16 > , HashMap < u16 , String > ) {
0 commit comments