qmlfrontend/gameview.cpp
branchqmlfrontend
changeset 12890 9c259fb4d405
parent 12883 adb1fccc706a
equal deleted inserted replaced
12884:66171ce586cc 12890:9c259fb4d405
     1 #include "gameview.h"
     1 #include "gameview.h"
     2 
     2 
       
     3 #include <QCursor>
       
     4 #include <QTimer>
     3 #include <QtGui/QOpenGLContext>
     5 #include <QtGui/QOpenGLContext>
     4 #include <QtGui/QOpenGLShaderProgram>
     6 #include <QtGui/QOpenGLShaderProgram>
     5 #include <QtQuick/qquickwindow.h>
     7 #include <QtQuick/qquickwindow.h>
     6 
     8 
     7 #include "flib.h"
     9 #include "flib.h"
     8 
    10 
     9 extern "C" {
    11 extern "C" {
    10 extern GameTick_t* flibGameTick;
    12 extern GameTick_t* flibGameTick;
    11 extern ResizeWindow_t* flibResizeWindow;
    13 extern ResizeWindow_t* flibResizeWindow;
       
    14 extern updateMousePosition_t* flibUpdateMousePosition;
    12 }
    15 }
    13 
    16 
    14 GameView::GameView()
    17 GameView::GameView()
    15     : m_delta(0)
    18     : m_delta(0)
    16     , m_renderer(0)
    19     , m_renderer(0)
    20 }
    23 }
    21 
    24 
    22 void GameView::tick(quint32 delta)
    25 void GameView::tick(quint32 delta)
    23 {
    26 {
    24     m_delta = delta;
    27     m_delta = delta;
    25     if (window())
    28 
    26         window()->update();
    29     if (window()) {
       
    30         QTimer* timer = new QTimer(this);
       
    31         connect(timer, &QTimer::timeout, window(), &QQuickWindow::update);
       
    32         timer->start(100);
       
    33 
       
    34         //window()->update();
       
    35     }
    27 }
    36 }
    28 
    37 
    29 void GameView::handleWindowChanged(QQuickWindow* win)
    38 void GameView::handleWindowChanged(QQuickWindow* win)
    30 {
    39 {
    31     if (win) {
    40     if (win) {
    51     if (!m_renderer) {
    60     if (!m_renderer) {
    52         m_renderer = new GameViewRenderer();
    61         m_renderer = new GameViewRenderer();
    53         connect(window(), &QQuickWindow::beforeRendering, m_renderer, &GameViewRenderer::paint, Qt::DirectConnection);
    62         connect(window(), &QQuickWindow::beforeRendering, m_renderer, &GameViewRenderer::paint, Qt::DirectConnection);
    54     }
    63     }
    55 
    64 
    56     if (m_windowChanged)
    65     if (m_windowChanged) {
    57         m_renderer->setViewportSize(window()->size() * window()->devicePixelRatio());
    66         QSize windowSize = window()->size();
       
    67         m_renderer->setViewportSize(windowSize * window()->devicePixelRatio());
       
    68         m_centerX = windowSize.width() / 2;
       
    69         m_centerY = windowSize.height() / 2;
       
    70     }
       
    71 
       
    72     QPoint mousePos = mapFromGlobal(QCursor::pos()).toPoint();
       
    73     if (flibUpdateMousePosition(m_centerX, m_centerY, mousePos.x(), mousePos.y()))
       
    74         QCursor::setPos(mapToGlobal(QPointF(m_centerX, m_centerY)).toPoint());
    58 
    75 
    59     m_renderer->tick(m_delta);
    76     m_renderer->tick(m_delta);
    60 }
    77 }
    61 
    78 
    62 GameViewRenderer::~GameViewRenderer()
    79 GameViewRenderer::~GameViewRenderer()