Пример #1
0
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();
}
Пример #2
0
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();
}
Пример #3
0
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();
}
Пример #4
0
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();
}
Пример #5
0
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();
}
Пример #6
0
void QMLBridge::touchpadStateChanged(qreal x, qreal y, bool contact, bool down)
{
    ::touchpad_set_state(x, y, contact, down);

    notifyTouchpadStateChanged();
}