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; } }
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); }