2017-07-19 23:20:32 +02:00
|
|
|
#pragma once
|
2013-08-09 06:57:18 +02:00
|
|
|
|
2020-11-14 21:47:55 +01:00
|
|
|
enum class lcDragState
|
|
|
|
{
|
|
|
|
None,
|
|
|
|
Piece,
|
|
|
|
Color
|
|
|
|
};
|
|
|
|
|
2020-02-15 20:36:06 +01:00
|
|
|
enum class lcCursor
|
2013-08-09 06:57:18 +02:00
|
|
|
{
|
2020-02-15 20:36:06 +01:00
|
|
|
Default,
|
|
|
|
Brick,
|
|
|
|
Light,
|
|
|
|
Spotlight,
|
|
|
|
Camera,
|
|
|
|
Select,
|
|
|
|
SelectAdd,
|
|
|
|
SelectRemove,
|
|
|
|
Move,
|
|
|
|
Rotate,
|
|
|
|
RotateX,
|
|
|
|
RotateY,
|
|
|
|
Delete,
|
|
|
|
Paint,
|
|
|
|
ColorPicker,
|
|
|
|
Zoom,
|
|
|
|
ZoomRegion,
|
|
|
|
Pan,
|
|
|
|
Roll,
|
|
|
|
RotateView,
|
|
|
|
Count
|
2013-08-09 06:57:18 +02:00
|
|
|
};
|
|
|
|
|
2020-12-05 01:52:57 +01:00
|
|
|
enum class lcTrackButton
|
|
|
|
{
|
|
|
|
None,
|
|
|
|
Left,
|
|
|
|
Middle,
|
|
|
|
Right
|
|
|
|
};
|
|
|
|
|
2013-08-09 06:57:18 +02:00
|
|
|
class lcGLWidget
|
|
|
|
{
|
|
|
|
public:
|
2020-12-04 20:40:53 +01:00
|
|
|
lcGLWidget();
|
|
|
|
virtual ~lcGLWidget();
|
2013-08-09 06:57:18 +02:00
|
|
|
|
2020-12-04 20:40:53 +01:00
|
|
|
lcGLWidget(const lcGLWidget&) = delete;
|
|
|
|
lcGLWidget& operator=(const lcGLWidget&) = delete;
|
2014-04-20 21:09:46 +02:00
|
|
|
|
2020-12-04 21:49:01 +01:00
|
|
|
lcCamera* GetCamera() const
|
|
|
|
{
|
|
|
|
return mCamera;
|
|
|
|
}
|
|
|
|
|
2020-12-05 01:52:57 +01:00
|
|
|
bool IsTracking() const
|
|
|
|
{
|
|
|
|
return mTrackButton != lcTrackButton::None;
|
|
|
|
}
|
|
|
|
|
2020-12-05 17:45:29 +01:00
|
|
|
int GetMouseX() const
|
|
|
|
{
|
|
|
|
return mMouseX;
|
|
|
|
}
|
|
|
|
|
|
|
|
int GetMouseY() const
|
|
|
|
{
|
|
|
|
return mMouseY;
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetMousePosition(int MouseX, int MouseY);
|
|
|
|
void SetMouseModifiers(Qt::KeyboardModifiers MouseModifiers);
|
2020-12-04 20:40:53 +01:00
|
|
|
void SetContext(lcContext* Context);
|
2013-08-09 06:57:18 +02:00
|
|
|
void MakeCurrent();
|
|
|
|
void Redraw();
|
2020-02-15 20:36:06 +01:00
|
|
|
void SetCursor(lcCursor Cursor);
|
2020-12-04 21:49:01 +01:00
|
|
|
|
|
|
|
lcVector3 ProjectPoint(const lcVector3& Point) const;
|
|
|
|
lcVector3 UnprojectPoint(const lcVector3& Point) const;
|
|
|
|
void UnprojectPoints(lcVector3* Points, int NumPoints) const;
|
|
|
|
lcMatrix44 GetProjectionMatrix() const;
|
|
|
|
|
2020-11-26 21:07:41 +01:00
|
|
|
void DrawBackground() const;
|
2020-12-04 21:49:01 +01:00
|
|
|
void DrawAxes() const;
|
2013-08-09 06:57:18 +02:00
|
|
|
|
|
|
|
virtual void OnDraw() { }
|
|
|
|
virtual void OnInitialUpdate() { }
|
|
|
|
virtual void OnUpdateCursor() { }
|
|
|
|
virtual void OnLeftButtonDown() { }
|
|
|
|
virtual void OnLeftButtonUp() { }
|
|
|
|
virtual void OnLeftButtonDoubleClick() { }
|
|
|
|
virtual void OnMiddleButtonDown() { }
|
|
|
|
virtual void OnMiddleButtonUp() { }
|
|
|
|
virtual void OnRightButtonDown() { }
|
|
|
|
virtual void OnRightButtonUp() { }
|
2015-09-06 21:52:17 +02:00
|
|
|
virtual void OnBackButtonDown() { }
|
|
|
|
virtual void OnBackButtonUp() { }
|
|
|
|
virtual void OnForwardButtonDown() { }
|
|
|
|
virtual void OnForwardButtonUp() { }
|
2013-08-09 06:57:18 +02:00
|
|
|
virtual void OnMouseMove() { }
|
2016-02-17 00:11:52 +01:00
|
|
|
virtual void OnMouseWheel(float Direction) { Q_UNUSED(Direction); }
|
2020-12-04 20:40:53 +01:00
|
|
|
virtual void BeginDrag(lcDragState DragState) { Q_UNUSED(DragState); }
|
|
|
|
virtual void EndDrag(bool Accept) { Q_UNUSED(Accept); }
|
2013-08-09 06:57:18 +02:00
|
|
|
|
2020-12-04 20:40:53 +01:00
|
|
|
int mWidth = 1;
|
|
|
|
int mHeight = 1;
|
|
|
|
QGLWidget* mWidget = nullptr;
|
|
|
|
lcContext* mContext = nullptr;
|
2020-12-04 21:49:01 +01:00
|
|
|
|
|
|
|
protected:
|
2020-12-05 17:45:29 +01:00
|
|
|
int mMouseX = 0;
|
|
|
|
int mMouseY = 0;
|
2020-12-05 20:02:10 +01:00
|
|
|
int mMouseDownX = 0;
|
|
|
|
int mMouseDownY = 0;
|
2020-12-05 17:45:29 +01:00
|
|
|
Qt::KeyboardModifiers mMouseModifiers = Qt::NoModifier;
|
|
|
|
|
|
|
|
lcTrackButton mTrackButton = lcTrackButton::None;
|
|
|
|
lcCursor mCursor = lcCursor::Default;
|
|
|
|
|
2020-12-05 20:02:10 +01:00
|
|
|
std::unique_ptr<lcScene> mScene;
|
|
|
|
|
2020-12-04 21:49:01 +01:00
|
|
|
lcCamera* mCamera = nullptr;
|
2020-12-04 20:40:53 +01:00
|
|
|
bool mDeleteContext = true;
|
2013-08-09 06:57:18 +02:00
|
|
|
};
|