]> git.sur5r.net Git - fstl/blob - src/canvas.h
New upstream version 0.9.4
[fstl] / src / canvas.h
1 #ifndef CANVAS_H
2 #define CANVAS_H
3
4 #include <QtOpenGL>
5 #include <QSurfaceFormat>
6 #include <QOpenGLShaderProgram>
7
8 class GLMesh;
9 class Mesh;
10 class Backdrop;
11
12 class Canvas : public QOpenGLWidget, protected QOpenGLFunctions
13 {
14     Q_OBJECT
15
16 public:
17         explicit Canvas(const QSurfaceFormat& format, QWidget* parent=0);
18     ~Canvas();
19
20     void view_orthographic();
21     void view_perspective();
22     void draw_shaded();
23     void draw_wireframe();
24
25 public slots:
26     void set_status(const QString& s);
27     void clear_status();
28     void load_mesh(Mesh* m, bool is_reload);
29
30 protected:
31         void paintGL() override;
32         void initializeGL() override;
33         void resizeGL(int width, int height) override;
34
35     void mousePressEvent(QMouseEvent* event) override;
36     void mouseReleaseEvent(QMouseEvent* event) override;
37     void mouseMoveEvent(QMouseEvent* event) override;
38     void wheelEvent(QWheelEvent* event) override;
39     
40         void set_perspective(float p);
41     void set_drawMode(int mode);
42     void view_anim(float v);
43
44 private:
45     void draw_mesh();
46
47     QMatrix4x4 transform_matrix() const;
48     QMatrix4x4 view_matrix() const;
49
50     QOpenGLShaderProgram mesh_shader;
51     QOpenGLShaderProgram mesh_wireframe_shader;
52         QOpenGLShaderProgram quad_shader;
53
54     GLMesh* mesh;
55     Backdrop* backdrop;
56
57     QVector3D center;
58     float scale;
59     float zoom;
60     float tilt;
61     float yaw;
62
63     float perspective;
64     int drawMode;
65     Q_PROPERTY(float perspective MEMBER perspective WRITE set_perspective);
66     QPropertyAnimation anim;
67
68     QPoint mouse_pos;
69     QString status;
70 };
71
72 #endif // CANVAS_H