61 lines
1.6 KiB
C++
61 lines
1.6 KiB
C++
#pragma once
|
|
|
|
#include <QOpenGLFunctions>
|
|
#include <QOpenGLFunctions_3_3_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_3_Core *g_fun = nullptr;
|
|
};
|
|
|
|
}
|