diff -r b273b43b16d2 -r 8354b390f1a2 qmlfrontend/gameview.cpp --- a/qmlfrontend/gameview.cpp Wed Nov 07 15:55:32 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,87 +0,0 @@ -#include "gameview.h" - -#include -#include -#include -#include -#include - -#include "flib.h" - -extern "C" { -extern GameTick_t* flibGameTick; -extern ResizeWindow_t* flibResizeWindow; -extern updateMousePosition_t* flibUpdateMousePosition; -} - -GameView::GameView() : m_delta(0), m_renderer(nullptr), m_windowChanged(true) { - connect(this, &QQuickItem::windowChanged, this, - &GameView::handleWindowChanged); -} - -void GameView::tick(quint32 delta) { - m_delta = delta; - - if (window()) { - QTimer* timer = new QTimer(this); - connect(timer, &QTimer::timeout, window(), &QQuickWindow::update); - timer->start(100); - - // window()->update(); - } -} - -void GameView::handleWindowChanged(QQuickWindow* win) { - if (win) { - connect(win, &QQuickWindow::beforeSynchronizing, this, &GameView::sync, - Qt::DirectConnection); - connect(win, &QQuickWindow::sceneGraphInvalidated, this, &GameView::cleanup, - Qt::DirectConnection); - - win->setClearBeforeRendering(false); - - m_windowChanged = true; - } -} - -void GameView::cleanup() { - if (m_renderer) { - delete m_renderer; - m_renderer = 0; - } -} - -void GameView::sync() { - if (!m_renderer) { - m_renderer = new GameViewRenderer(); - connect(window(), &QQuickWindow::beforeRendering, m_renderer, - &GameViewRenderer::paint, Qt::DirectConnection); - } - - if (m_windowChanged) { - QSize windowSize = window()->size(); - m_renderer->setViewportSize(windowSize * window()->devicePixelRatio()); - m_centerX = windowSize.width() / 2; - m_centerY = windowSize.height() / 2; - } - - QPoint mousePos = mapFromGlobal(QCursor::pos()).toPoint(); - if (flibUpdateMousePosition(m_centerX, m_centerY, mousePos.x(), mousePos.y())) - QCursor::setPos(mapToGlobal(QPointF(m_centerX, m_centerY)).toPoint()); - - m_renderer->tick(m_delta); -} - -GameViewRenderer::~GameViewRenderer() {} - -void GameViewRenderer::setViewportSize(const QSize& size) { - flibResizeWindow(size.width(), size.height()); -} - -void GameViewRenderer::paint() { - if (m_delta == 0) return; - - flibGameTick(m_delta); - - // m_window->resetOpenGLState(); -}