Sceneview
 All Classes Functions Variables Enumerations Enumerator Groups Pages
viewport.hpp
1 // Copyright [2015] Albert Huang
2 
3 #ifndef SCENEVIEW_VIEWPORT_HPP__
4 #define SCENEVIEW_VIEWPORT_HPP__
5 
6 #include <vector>
7 
8 #include <QOpenGLWidget>
9 
10 #include <sceneview/resource_manager.hpp>
11 #include <sceneview/scene.hpp>
12 
13 namespace sv {
14 
15 class DrawContext;
16 class DrawGroup;
17 class CameraNode;
18 class InputHandler;
19 class Renderer;
20 
27 class Viewport : public QOpenGLWidget {
28  Q_OBJECT
29 
30  public:
31  explicit Viewport(const ResourceManager::Ptr& resources,
32  const Scene::Ptr& scene,
33  QWidget* parent = nullptr);
34 
35  Viewport(const Viewport&) = delete;
36 
37  Viewport& operator=(const Viewport&) = delete;
38 
39  ~Viewport();
40 
41  void AddRenderer(Renderer* renderer);
42 
43  void AddInputHandler(InputHandler* handler);
44 
51  void SetCamera(CameraNode* camera_node);
52 
53  CameraNode* GetCamera() { return camera_; }
54 
55  void ActivateInputHandler(InputHandler* handler);
56 
57  Scene::Ptr GetScene() { return scene_; }
58 
59  ResourceManager::Ptr GetResources() { return resources_; }
60 
61  std::vector<Renderer*> GetRenderers() { return renderers_; }
62 
63  std::vector<InputHandler*> GetInputHandlers() { return input_handlers_; }
64 
65  void SetBackgroundColor(const QColor& color);
66 
67  void SetDrawGroups(const std::vector<DrawGroup*>& groups);
68 
69  InputHandler* GetActiveInputHandler() { return input_handler_; }
70 
71  public slots:
72  void ScheduleRedraw();
73 
74  signals:
75  void RendererAdded(Renderer* renderer);
76 
77  void InputHandlerAdded(InputHandler* handler);
78 
79  void InputHandlerActivated(InputHandler* handler);
80 
81  void CameraChanged(CameraNode* camera_node);
82 
83  void GLInitialized();
84 
85  void GLShuttingDown();
86 
87  protected:
88  void initializeGL() override;
89 
90  void resizeGL(int width, int height) override;
91 
92  void paintGL() override;
93 
94  void mousePressEvent(QMouseEvent *event) override;
95 
96  void mouseMoveEvent(QMouseEvent *event) override;
97 
98  void mouseReleaseEvent(QMouseEvent* event) override;
99 
100  void mouseDoubleClickEvent(QMouseEvent* event) override;
101 
102  void wheelEvent(QWheelEvent* event) override;
103 
104  void keyPressEvent(QKeyEvent* event) override;
105 
106  void keyReleaseEvent(QKeyEvent* event) override;
107 
108  private slots:
109  void Render();
110 
111  private:
112  ResourceManager::Ptr resources_;
113 
114  Scene::Ptr scene_;
115 
116  CameraNode* camera_;
117 
118  InputHandler* input_handler_;
119 
120  std::unique_ptr<DrawContext> draw_;
121 
122  std::vector<Renderer*> renderers_;
123 
124  std::vector<InputHandler*> input_handlers_;
125 
126  bool redraw_scheduled_;
127 
128  QOpenGLContext* gl_context_;
129 };
130 
131 } // namespace sv
132 
133 #endif // SCENEVIEW_VIEWPORT_HPP__
void SetCamera(CameraNode *camera_node)
Attach the specified camera to this viewport.
Camera.
Definition: camera_node.hpp:25
Subclass this to add content in the scene and draw things.
Definition: renderer.hpp:73
Receive and handle mouse/keyboard input events.
Definition: input_handler.hpp:26
Widget that draws a scene and manages Renderer and InputHandler objects.
Definition: viewport.hpp:27