void KeypadWidget::changeKeyState(KeyCode keycode, bool press, bool toggleHold) { if (Key *key = m_keys[keycode.row()][keycode.col()]) { bool wasSelected = key->isSelected(); key->setPressed(press); if (toggleHold) { key->toggleHeld(); } bool selected = key->isSelected(); if (selected != wasSelected) { update(m_transform.mapRect(key->keyGeometry())); keypad_key_event(keycode.row(), keycode.col(), selected); } } }
void QtKeypadBridge::keyEvent(QKeyEvent *event, bool press) { Qt::Key key = static_cast<Qt::Key>(event->key()); auto& keymap = keymap_tp; for(unsigned int row = 0; row < sizeof(keymap)/sizeof(*keymap); ++row) { for(unsigned int col = 0; col < sizeof(*keymap)/sizeof(**keymap); ++col) { for(unsigned int index = 0; index < sizeof((**keymap).key)/sizeof(*(**keymap).key); ++index) { if(key == keymap[row][col].key[index] && keymap[row][col].alt == (bool(event->modifiers() & Qt::AltModifier) || bool(event->modifiers() & Qt::MetaModifier))) { keypad_key_event(row, col, press); notifyKeypadStateChanged(row, col, press); return; } } } } keypad.gpio_enable |= 0x800; keypad_intrpt_check(); }