| #pragma once |
| |
| #include <QOpenGLFunctions> |
| #include <QOpenGLFunctions_3_2_Core> |
| #include <QObject> |
| #include <QPoint> |
| #include <imgui.h> |
| #include <memory> |
| |
| class QMouseEvent; |
| class QWheelEvent; |
| class QKeyEvent; |
| |
| namespace QtImGui { |
| |
| class WindowWrapper { |
| public: |
| virtual ~WindowWrapper() {} |
| virtual void installEventFilter(QObject *object) = 0; |
| virtual QSize size() const = 0; |
| virtual qreal devicePixelRatio() const = 0; |
| virtual bool isActive() const = 0; |
| virtual QPoint mapFromGlobal(const QPoint &p) const = 0; |
| }; |
| |
| class ImGuiRenderer : public QObject, QOpenGLFunctions { |
| Q_OBJECT |
| public: |
| void initialize(WindowWrapper *window); |
| void newFrame(); |
| |
| bool eventFilter(QObject *watched, QEvent *event); |
| |
| static ImGuiRenderer *instance(); |
| |
| private: |
| ImGuiRenderer() {} |
| |
| void onMousePressedChange(QMouseEvent *event); |
| void onWheel(QWheelEvent *event); |
| void onKeyPressRelease(QKeyEvent *event); |
| |
| void renderDrawList(ImDrawData *draw_data); |
| bool createFontsTexture(); |
| bool createDeviceObjects(); |
| |
| std::unique_ptr<WindowWrapper> m_window; |
| double g_Time = 0.0f; |
| bool g_MousePressed[3] = { false, false, false }; |
| float g_MouseWheel; |
| float g_MouseWheelH; |
| GLuint g_FontTexture = 0; |
| int g_ShaderHandle = 0, g_VertHandle = 0, g_FragHandle = 0; |
| int g_AttribLocationTex = 0, g_AttribLocationProjMtx = 0; |
| int g_AttribLocationPosition = 0, g_AttribLocationUV = 0, g_AttribLocationColor = 0; |
| unsigned int g_VboHandle = 0, g_VaoHandle = 0, g_ElementsHandle = 0; |
| QOpenGLFunctions_3_2_Core *g_fun = nullptr; |
| }; |
| |
| } |