8 |
8 |
9 class Canvas : public PartRenderer |
9 class Canvas : public PartRenderer |
10 { |
10 { |
11 Q_OBJECT |
11 Q_OBJECT |
12 public: |
12 public: |
13 struct MouseClickInfo; |
|
14 struct MouseMoveInfo; |
|
15 using OverpaintCallback = std::function<void(Canvas*, QPainter*)>; |
13 using OverpaintCallback = std::function<void(Canvas*, QPainter*)>; |
16 Canvas( |
14 Canvas( |
17 Model* model, |
15 Model* model, |
18 DocumentManager* documents, |
16 DocumentManager* documents, |
19 const ldraw::ColorTable& colorTable, |
17 const ldraw::ColorTable& colorTable, |
33 void initializeGL() override; |
31 void initializeGL() override; |
34 void paintGL() override; |
32 void paintGL() override; |
35 signals: |
33 signals: |
36 void newStatusText(const QString& newStatusText); |
34 void newStatusText(const QString& newStatusText); |
37 void selectionChanged(const QSet<ldraw::id_t>& newSelection); |
35 void selectionChanged(const QSet<ldraw::id_t>& newSelection); |
38 void mouseClick(const MouseClickInfo& info); |
36 void mouseClick(Canvas* canvas); |
39 void mouseMove(const MouseMoveInfo& info); |
37 void mouseMove(Canvas* canvas); |
40 private: |
38 private: |
41 void updateGridMatrix(); |
39 void updateGridMatrix(); |
42 glm::vec3 cameraVector() const; |
40 glm::vec3 cameraVector() const; |
43 bool isGridPerpendicularToScreen(float threshold) const; |
41 bool isGridPerpendicularToScreen(float threshold) const; |
44 std::optional<GridProgram> gridProgram; |
42 std::optional<GridProgram> gridProgram; |
48 geom::Plane gridPlane; |
46 geom::Plane gridPlane; |
49 int totalMouseMove = 0; |
47 int totalMouseMove = 0; |
50 QSet<ldraw::id_t> selection; |
48 QSet<ldraw::id_t> selection; |
51 OverpaintCallback overpaintCallback = nullptr; |
49 OverpaintCallback overpaintCallback = nullptr; |
52 }; |
50 }; |
53 |
|
54 struct Canvas::MouseClickInfo |
|
55 { |
|
56 std::optional<glm::vec3> worldPosition; |
|
57 Canvas* invoker; |
|
58 }; |
|
59 |
|
60 struct Canvas::MouseMoveInfo |
|
61 { |
|
62 std::optional<glm::vec3> worldPosition; |
|
63 Canvas* invoker; |
|
64 }; |
|