#ifndef CEDITORGLWIDGET_H #define CEDITORGLWIDGET_H #include #include #include #include #include #include #include #include #include #include class CBasicViewport : public QOpenGLWidget { Q_OBJECT protected: // Render CCamera mCamera; CTimer mFrameTimer; double mLastDrawTime; // Cursor settings QCursor mCursorState; bool mCursorVisible; // Input QPoint mLastMousePos; bool mMouseMoved; CTimer mMoveTimer; int mButtonsPressed; // int container for EMouseInputs flags int mKeysPressed; // int container for EKeyInputs flags public: explicit CBasicViewport(QWidget *pParent = 0); ~CBasicViewport(); void initializeGL(); void paintGL(); void resizeGL(int w, int h); void mousePressEvent(QMouseEvent *pEvent); void mouseReleaseEvent(QMouseEvent *pEvent); void mouseMoveEvent(QMouseEvent *pEvent); void wheelEvent(QWheelEvent *pEvent); void keyPressEvent(QKeyEvent *pEvent); void keyReleaseEvent(QKeyEvent *pEvent); void focusOutEvent(QFocusEvent *pEvent); void contextMenuEvent(QContextMenuEvent *pEvent); void SetCursorState(const QCursor& Cursor); void SetCursorVisible(bool visible); bool IsCursorVisible(); bool IsMouseInputActive(); bool IsKeyboardInputActive(); CRenderer* Renderer(); CCamera& Camera(); CRay CastRay(); CVector2f MouseDeviceCoordinates(); double LastRenderDuration(); public slots: void ProcessInput(); void Render(); protected slots: virtual void CheckUserInput() {} virtual void Paint() {} virtual void ContextMenu(QContextMenuEvent* /*pEvent*/) {} virtual void OnResize() {} virtual void OnMouseClick(QMouseEvent* /*pEvent*/) {} virtual void OnMouseRelease(QMouseEvent* /*pEvent*/) {} private: void ProcessInput(double DeltaTime); void DrawAxes(); }; #endif