|
9 | 9 | #include "config.h" |
10 | 10 | #include "keypad.h" |
11 | 11 | #include "lib/maapi.h" |
| 12 | +#include "common/device.h" |
12 | 13 |
|
13 | 14 | constexpr char cutIcon[] = {'\346', '\0'}; |
14 | 15 | constexpr char copyIcon[] = {'\251', '\0'}; |
@@ -98,7 +99,7 @@ Key::Key(const RawKey &k) : |
98 | 99 | _altLabel(k._shifted) { |
99 | 100 | _labelLength = _label.length(); |
100 | 101 | _pressed = false; |
101 | | - _special = k._normal[0] > 128 || _labelLength > 1; |
| 102 | + _special = (uint8_t )k._normal[0] > 128 || _labelLength > 1; |
102 | 103 | _number = k._normal[0] >= '0' && k._normal[0] <= '9'; |
103 | 104 | } |
104 | 105 |
|
@@ -274,11 +275,16 @@ void Keypad::clicked(int x, int y, bool pressed) { |
274 | 275 | layout(_posX, _posY, _width, _height); |
275 | 276 | break; |
276 | 277 | } else { |
| 278 | + bool useShift = _shiftActive ^ _capsLockActive; |
| 279 | + String label = useShift ? key->_altLabel : key->_label; |
| 280 | + fprintf(stderr, "pressed %s\n", label.c_str()); |
| 281 | + |
277 | 282 | if (_shiftActive && !key->_special) { |
278 | 283 | _shiftActive = false; |
279 | 284 | } |
280 | 285 | // TODO: Output the key's character/command |
281 | 286 | } |
| 287 | + break; |
282 | 288 | } |
283 | 289 | } |
284 | 290 | } |
@@ -314,25 +320,41 @@ void Keypad::draw() { |
314 | 320 | // |
315 | 321 | // KeypadInput |
316 | 322 | // |
317 | | -KeypadInput::KeypadInput(bool floatTop, bool toolbar) : |
318 | | - FormInput(0, 0, 0, 100), |
| 323 | +KeypadInput::KeypadInput(bool floatTop, bool toolbar, int charWidth, int charHeight) : |
| 324 | + FormInput(0, 0, 0, charHeight * 2), |
319 | 325 | _floatTop(floatTop), |
320 | | - _toolbar(toolbar) { |
| 326 | + _toolbar(toolbar), |
| 327 | + _keypad(nullptr) { |
| 328 | + if (!toolbar) { |
| 329 | + _keypad = new Keypad(charWidth, charHeight); |
| 330 | + _height = Keypad::outerHeight(charHeight); |
| 331 | + } |
| 332 | +} |
| 333 | + |
| 334 | +KeypadInput::~KeypadInput() { |
| 335 | + delete _keypad; |
321 | 336 | } |
322 | 337 |
|
323 | 338 | void KeypadInput::clicked(int x, int y, bool pressed) { |
324 | | - fprintf(stderr, "clicked %d %d %d\n", x, y, pressed); |
| 339 | + if (_keypad) { |
| 340 | + _keypad->clicked(x, y, pressed); |
| 341 | + } |
325 | 342 | } |
326 | 343 |
|
327 | 344 | void KeypadInput::draw(int x, int y, int w, int h, int chw) { |
328 | | - maSetColor(0xff3344); |
329 | | - maFillRect(_x, _y, _width, _height); |
330 | | - maSetColor(0x007744); |
331 | | - maDrawText(_x + 10, _y + 10, "keypad !", 8); |
| 345 | + if (_keypad) { |
| 346 | + _keypad->draw(); |
| 347 | + } else { |
| 348 | + maSetColor(modernDarkTheme._bg); |
| 349 | + maFillRect(x, y, _width, _height); |
| 350 | + } |
332 | 351 | } |
333 | 352 |
|
334 | 353 | void KeypadInput::layout(int x, int y, int w, int h) { |
335 | 354 | _x = x; |
336 | | - _y = _floatTop ? 0 : h; |
| 355 | + _y = _floatTop ? 0 : h; |
337 | 356 | _width = w; |
| 357 | + if (_keypad) { |
| 358 | + _keypad->layout(_x, _y, _width, _height); |
| 359 | + } |
338 | 360 | } |
0 commit comments