qmlfrontend/gameview.cpp
branchqmlfrontend
changeset 12890 9c259fb4d405
parent 12883 adb1fccc706a
--- a/qmlfrontend/gameview.cpp	Sun Jan 07 09:48:26 2018 +0100
+++ b/qmlfrontend/gameview.cpp	Wed Jan 10 23:49:47 2018 +0100
@@ -1,5 +1,7 @@
 #include "gameview.h"
 
+#include <QCursor>
+#include <QTimer>
 #include <QtGui/QOpenGLContext>
 #include <QtGui/QOpenGLShaderProgram>
 #include <QtQuick/qquickwindow.h>
@@ -9,6 +11,7 @@
 extern "C" {
 extern GameTick_t* flibGameTick;
 extern ResizeWindow_t* flibResizeWindow;
+extern updateMousePosition_t* flibUpdateMousePosition;
 }
 
 GameView::GameView()
@@ -22,8 +25,14 @@
 void GameView::tick(quint32 delta)
 {
     m_delta = delta;
-    if (window())
-        window()->update();
+
+    if (window()) {
+        QTimer* timer = new QTimer(this);
+        connect(timer, &QTimer::timeout, window(), &QQuickWindow::update);
+        timer->start(100);
+
+        //window()->update();
+    }
 }
 
 void GameView::handleWindowChanged(QQuickWindow* win)
@@ -53,8 +62,16 @@
         connect(window(), &QQuickWindow::beforeRendering, m_renderer, &GameViewRenderer::paint, Qt::DirectConnection);
     }
 
-    if (m_windowChanged)
-        m_renderer->setViewportSize(window()->size() * window()->devicePixelRatio());
+    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);
 }