#pragma once #include #include #include #include #include #include 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 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; }; }