void QtKeypadBridge::keyPressEvent(QKeyEvent *event) { Qt::Key key = static_cast<Qt::Key>(event->key()); switch(key) { case Qt::Key_Down: keypad.touchpad_x = TOUCHPAD_X_MAX / 2; keypad.touchpad_y = 0; break; case Qt::Key_Up: keypad.touchpad_x = TOUCHPAD_X_MAX / 2; keypad.touchpad_y = TOUCHPAD_Y_MAX; break; case Qt::Key_Left: keypad.touchpad_y = TOUCHPAD_Y_MAX / 2; keypad.touchpad_x = 0; break; case Qt::Key_Right: keypad.touchpad_y = TOUCHPAD_Y_MAX / 2; keypad.touchpad_x = TOUCHPAD_X_MAX; break; default: keyToKeypad(event); return; } keypad.touchpad_contact = keypad.touchpad_down = true; notifyTouchpadStateChanged(); keypad.kpc.gpio_int_active |= 0x800; keypad_int_check(); }
void QtKeypadBridge::keyPressEvent(QKeyEvent *event) { Qt::Key key = static_cast<Qt::Key>(event->key()); switch(key) { case Qt::Key_Down: keypad.touchpad_x = TOUCHPAD_X_MAX / 2; keypad.touchpad_y = 0; break; case Qt::Key_Up: keypad.touchpad_x = TOUCHPAD_X_MAX / 2; keypad.touchpad_y = TOUCHPAD_Y_MAX; break; case Qt::Key_Left: keypad.touchpad_y = TOUCHPAD_Y_MAX / 2; keypad.touchpad_x = 0; break; case Qt::Key_Right: keypad.touchpad_y = TOUCHPAD_Y_MAX / 2; keypad.touchpad_x = TOUCHPAD_X_MAX; break; case Qt::Key_Return: key = Qt::Key_Enter; default: 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) { if(key == keymap[row][col].key && keymap[row][col].alt == (bool(event->modifiers() & Qt::AltModifier) || bool(event->modifiers() & Qt::MetaModifier))) { if(row == 0 && col == 9) keypad_on_pressed(); keypad.key_map[row] |= 1 << col; notifyKeypadStateChanged(row, col, true); keypad_int_check(); return; } } } return; } keypad.touchpad_contact = keypad.touchpad_down = true; notifyTouchpadStateChanged(); keypad.kpc.gpio_int_active |= 0x800; keypad_int_check(); }
void QtKeypadBridge::keyReleaseEvent(QKeyEvent *event) { Qt::Key key = static_cast<Qt::Key>(event->key()); switch(key) { case Qt::Key_Down: if(touchpad_x == TOUCHPAD_X_MAX / 2 && touchpad_y == 0) touchpad_contact = touchpad_down = false; break; case Qt::Key_Up: if(touchpad_x == TOUCHPAD_X_MAX / 2 && touchpad_y == TOUCHPAD_Y_MAX) touchpad_contact = touchpad_down = false; break; case Qt::Key_Left: if(touchpad_y == TOUCHPAD_Y_MAX / 2 && touchpad_x == 0) touchpad_contact = touchpad_down = false; break; case Qt::Key_Right: if(touchpad_y == TOUCHPAD_Y_MAX / 2 && touchpad_x == TOUCHPAD_X_MAX) touchpad_contact = touchpad_down = false; break; case Qt::Key_Return: key = Qt::Key_Enter; default: 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) { if(key == keymap[row][col].key && keymap[row][col].alt == (bool(event->modifiers() & Qt::AltModifier) || bool(event->modifiers() & Qt::MetaModifier))) { key_map[row] &= ~(1 << col); notifyKeypadStateChanged(row, col, false); keypad_int_check(); return; } } } return; } notifyTouchpadStateChanged(); kpc.gpio_int_active |= 0x800; keypad_int_check(); }
void QMLBridge::touchpadStateChanged(qreal x, qreal y, bool contact, bool down) { keypad.touchpad_down = down; keypad.touchpad_contact = contact; if(contact || down) { int new_x = x * TOUCHPAD_X_MAX, new_y = TOUCHPAD_Y_MAX - (y * TOUCHPAD_Y_MAX); if(new_x < 0) new_x = 0; if(new_x > TOUCHPAD_X_MAX) new_x = TOUCHPAD_X_MAX; if(new_y < 0) new_y = 0; if(new_y > TOUCHPAD_Y_MAX) new_y = TOUCHPAD_Y_MAX; int vel_x = new_x - keypad.touchpad_x; int vel_y = new_y - keypad.touchpad_y; /* The OS's cursor uses this, but it's a bit too quick */ vel_x /= 4; vel_y /= 4; keypad.touchpad_rel_x += vel_x; keypad.touchpad_rel_y += vel_y; keypad.touchpad_x = new_x; keypad.touchpad_y = new_y; } keypad.kpc.gpio_int_active |= 0x800; keypad_int_check(); notifyTouchpadStateChanged(); }
void QtKeypadBridge::keyReleaseEvent(QKeyEvent *event) { Qt::Key key = static_cast<Qt::Key>(event->key()); switch(key) { case Qt::Key_Down: if(keypad.touchpad_x == TOUCHPAD_X_MAX / 2 && keypad.touchpad_y == 0) keypad.touchpad_contact = keypad.touchpad_down = false; break; case Qt::Key_Up: if(keypad.touchpad_x == TOUCHPAD_X_MAX / 2 && keypad.touchpad_y == TOUCHPAD_Y_MAX) keypad.touchpad_contact = keypad.touchpad_down = false; break; case Qt::Key_Left: if(keypad.touchpad_y == TOUCHPAD_Y_MAX / 2 && keypad.touchpad_x == 0) keypad.touchpad_contact = keypad.touchpad_down = false; break; case Qt::Key_Right: if(keypad.touchpad_y == TOUCHPAD_Y_MAX / 2 && keypad.touchpad_x == TOUCHPAD_X_MAX) keypad.touchpad_contact = keypad.touchpad_down = false; break; default: keyToKeypad(event); return; } notifyTouchpadStateChanged(); keypad.kpc.gpio_int_active |= 0x800; keypad_int_check(); }
void QMLBridge::touchpadStateChanged(qreal x, qreal y, bool contact, bool down) { ::touchpad_set_state(x, y, contact, down); notifyTouchpadStateChanged(); }