pc_keyboard/layouts/
de105.rs1use crate::{DecodedKey, HandleControl, KeyCode, KeyboardLayout, Modifiers};
4
5pub struct De105Key;
11
12impl KeyboardLayout for De105Key {
13 fn map_keycode(
14 &self,
15 keycode: KeyCode,
16 modifiers: &Modifiers,
17 handle_ctrl: HandleControl,
18 ) -> DecodedKey {
19 let map_to_unicode = handle_ctrl == HandleControl::MapLettersToUnicode;
20 match keycode {
21 KeyCode::Escape => DecodedKey::Unicode(0x1B.into()),
22 KeyCode::Oem8 => {
23 if modifiers.is_shifted() {
24 DecodedKey::Unicode('°')
25 } else {
26 DecodedKey::Unicode('^')
27 }
28 }
29 KeyCode::Key1 => {
30 if modifiers.is_shifted() {
31 DecodedKey::Unicode('!')
32 } else {
33 DecodedKey::Unicode('1')
34 }
35 }
36 KeyCode::Key2 => {
37 if modifiers.is_shifted() {
38 DecodedKey::Unicode('"')
39 } else {
40 DecodedKey::Unicode('2')
41 }
42 }
43 KeyCode::Key3 => {
44 if modifiers.is_shifted() {
45 DecodedKey::Unicode('§')
46 } else {
47 DecodedKey::Unicode('3')
48 }
49 }
50 KeyCode::Key4 => {
51 if modifiers.is_shifted() {
52 DecodedKey::Unicode('$')
53 } else {
54 DecodedKey::Unicode('4')
55 }
56 }
57 KeyCode::Key5 => {
58 if modifiers.is_shifted() {
59 DecodedKey::Unicode('%')
60 } else {
61 DecodedKey::Unicode('5')
62 }
63 }
64 KeyCode::Key6 => {
65 if modifiers.is_shifted() {
66 DecodedKey::Unicode('&')
67 } else {
68 DecodedKey::Unicode('6')
69 }
70 }
71 KeyCode::Key7 => {
72 if modifiers.is_shifted() {
73 DecodedKey::Unicode('/')
74 } else {
75 DecodedKey::Unicode('7')
76 }
77 }
78 KeyCode::Key8 => {
79 if modifiers.is_shifted() {
80 DecodedKey::Unicode('(')
81 } else {
82 DecodedKey::Unicode('8')
83 }
84 }
85 KeyCode::Key9 => {
86 if modifiers.is_shifted() {
87 DecodedKey::Unicode(')')
88 } else {
89 DecodedKey::Unicode('9')
90 }
91 }
92 KeyCode::Key0 => {
93 if modifiers.is_shifted() {
94 DecodedKey::Unicode('=')
95 } else {
96 DecodedKey::Unicode('0')
97 }
98 }
99 KeyCode::OemMinus => {
100 if modifiers.is_shifted() {
101 DecodedKey::Unicode('?')
102 } else {
103 DecodedKey::Unicode('ß')
104 }
105 }
106 KeyCode::OemPlus => {
107 if modifiers.is_shifted() {
108 DecodedKey::Unicode('`')
109 } else {
110 DecodedKey::Unicode('´')
111 }
112 }
113 KeyCode::Backspace => DecodedKey::Unicode(0x08.into()),
114 KeyCode::Tab => DecodedKey::Unicode(0x09.into()),
115 KeyCode::Q => {
116 if map_to_unicode && modifiers.is_ctrl() {
117 DecodedKey::Unicode('\u{0011}')
118 } else if modifiers.is_altgr() {
119 DecodedKey::Unicode('@')
120 } else if modifiers.is_caps() {
121 DecodedKey::Unicode('Q')
122 } else {
123 DecodedKey::Unicode('q')
124 }
125 }
126 KeyCode::E => {
127 if map_to_unicode && modifiers.is_ctrl() {
128 DecodedKey::Unicode('\u{0005}')
129 } else if modifiers.is_altgr() {
130 DecodedKey::Unicode('€')
131 } else if modifiers.is_caps() {
132 DecodedKey::Unicode('E')
133 } else {
134 DecodedKey::Unicode('e')
135 }
136 }
137 KeyCode::Y => {
138 if map_to_unicode && modifiers.is_ctrl() {
139 DecodedKey::Unicode('\u{0014}')
140 } else if modifiers.is_caps() {
141 DecodedKey::Unicode('Z')
142 } else {
143 DecodedKey::Unicode('z')
144 }
145 }
146 KeyCode::Oem4 => {
147 if modifiers.is_caps() {
148 DecodedKey::Unicode('Ü')
149 } else {
150 DecodedKey::Unicode('ü')
151 }
152 }
153 KeyCode::Oem6 => {
154 if modifiers.is_altgr() {
155 DecodedKey::Unicode('~')
156 } else if modifiers.is_caps() {
157 DecodedKey::Unicode('*')
158 } else {
159 DecodedKey::Unicode('+')
160 }
161 }
162 KeyCode::Return => DecodedKey::Unicode(10.into()),
163 KeyCode::Oem7 => {
164 if modifiers.is_shifted() {
165 DecodedKey::Unicode('\'')
166 } else {
167 DecodedKey::Unicode('#')
168 }
169 }
170 KeyCode::Oem1 => {
171 if modifiers.is_shifted() {
172 DecodedKey::Unicode('Ö')
173 } else {
174 DecodedKey::Unicode('ö')
175 }
176 }
177 KeyCode::Oem3 => {
178 if modifiers.is_shifted() {
179 DecodedKey::Unicode('Ä')
180 } else {
181 DecodedKey::Unicode('ä')
182 }
183 }
184 KeyCode::Z => {
185 if map_to_unicode && modifiers.is_ctrl() {
186 DecodedKey::Unicode('\u{001A}')
187 } else if modifiers.is_caps() {
188 DecodedKey::Unicode('Y')
189 } else {
190 DecodedKey::Unicode('y')
191 }
192 }
193 KeyCode::OemComma => {
194 if modifiers.is_shifted() {
195 DecodedKey::Unicode(';')
196 } else {
197 DecodedKey::Unicode(',')
198 }
199 }
200 KeyCode::OemPeriod => {
201 if modifiers.is_shifted() {
202 DecodedKey::Unicode(':')
203 } else {
204 DecodedKey::Unicode('.')
205 }
206 }
207 KeyCode::Oem2 => {
208 if modifiers.is_shifted() {
209 DecodedKey::Unicode('_')
210 } else {
211 DecodedKey::Unicode('-')
212 }
213 }
214 KeyCode::Oem5 => {
215 if modifiers.is_shifted() {
216 DecodedKey::Unicode('>')
217 } else if modifiers.is_altgr() {
218 DecodedKey::Unicode('|')
219 } else {
220 DecodedKey::Unicode('<')
221 }
222 }
223 e => {
224 let us = super::Us104Key;
225 us.map_keycode(e, modifiers, handle_ctrl)
226 }
227 }
228 }
229}