void WebkitPixelStreamer::processEvent(deflect::Event dcEvent)
{
    QMutexLocker locker(&mutex_);

    switch(dcEvent.type)
    {
    case deflect::Event::EVT_CLICK:
        processClickEvent(dcEvent);
        break;
    case deflect::Event::EVT_PRESS:
        processPressEvent(dcEvent);
        break;
    case deflect::Event::EVT_MOVE:
        processMoveEvent(dcEvent);
        break;
    case deflect::Event::EVT_WHEEL:
        processWheelEvent(dcEvent);
        break;
    case deflect::Event::EVT_RELEASE:
        processReleaseEvent(dcEvent);
        break;
    case deflect::Event::EVT_SWIPE_LEFT:
        webView_.back();
        break;
    case deflect::Event::EVT_SWIPE_RIGHT:
        webView_.forward();
        break;
    case deflect::Event::EVT_KEY_PRESS:
        processKeyPress(dcEvent);
        break;
    case deflect::Event::EVT_KEY_RELEASE:
        processKeyRelease(dcEvent);
        break;
    case deflect::Event::EVT_VIEW_SIZE_CHANGED:
        processViewSizeChange(dcEvent);
        break;
    default:
        break;
    }
}
Exemple #2
0
void GameScene::rearrange()
{
    playersByColumn.clear();

    QList<Player *> playersPlaying;
    int firstPlayer = -1;
    for (int i = 0; i < players.size(); ++i)
        if (!players[i]->getConceded()) {
            playersPlaying.append(players[i]);
            if ((firstPlayer == -1) && (players[i]->getLocal()))
                firstPlayer = playersPlaying.size() - 1;
        }
    if (firstPlayer == -1)
        firstPlayer = 0;
    const int playersCount = playersPlaying.size();
    const int columns = playersCount < settingsCache->getMinPlayersForMultiColumnLayout() ? 1 : 2;
    const int rows = ceil((qreal) playersCount / columns);
    qreal sceneHeight = 0, sceneWidth = -playerAreaSpacing;
    QList<int> columnWidth;
    int firstPlayerOfColumn = firstPlayer;
    for (int col = 0; col < columns; ++col) {
        playersByColumn.append(QList<Player *>());
        columnWidth.append(0);
        qreal thisColumnHeight = -playerAreaSpacing;
        const int rowsInColumn = rows - (playersCount % columns) * col; // only correct for max. 2 cols
        for (int j = 0; j < rowsInColumn; ++j) {
            Player *player = playersPlaying[(firstPlayerOfColumn + j) % playersCount];
            if (col == 0)
                playersByColumn[col].prepend(player);
            else
                playersByColumn[col].append(player);
            thisColumnHeight += player->boundingRect().height() + playerAreaSpacing;
            if (player->boundingRect().width() > columnWidth[col])
                columnWidth[col] = player->boundingRect().width();
        }
        if (thisColumnHeight > sceneHeight)
            sceneHeight = thisColumnHeight;
        sceneWidth += columnWidth[col] + playerAreaSpacing;

        firstPlayerOfColumn += rowsInColumn;
    }

    phasesToolbar->setHeight(sceneHeight);
    qreal phasesWidth = phasesToolbar->getWidth();
    sceneWidth += phasesWidth;

    qreal x = phasesWidth;
    for (int col = 0; col < columns; ++col) {
        qreal y = 0;
        for (int row = 0; row < playersByColumn[col].size(); ++row) {
            Player *player = playersByColumn[col][row];
            player->setPos(x, y);
            player->setMirrored(row != rows - 1);
            y += player->boundingRect().height() + playerAreaSpacing;
        }
        x += columnWidth[col] + playerAreaSpacing;
    }

    setSceneRect(sceneRect().x(), sceneRect().y(), sceneWidth, sceneHeight);
    processViewSizeChange(viewSize);
}