plugins/score-plugin-gfx/Gfx/Graph/Window.hpp
1 #pragma once
2 
3 #include <Gfx/Graph/RenderState.hpp>
4 
5 #include <QTabletEvent>
6 #include <QWindow>
7 
8 #include <verdigris>
9 namespace score::gfx
10 {
11 struct ScreenNode;
12 
18 class Window : public QWindow
19 {
20  friend ScreenNode;
21  W_OBJECT(Window)
22 
23 public:
24  explicit Window(GraphicsApi graphicsApi);
25  ~Window();
26 
27  GraphicsApi api() const noexcept { return m_api; }
28 
29  void init();
30 
31  void resizeSwapChain();
32  void releaseSwapChain();
33  void render();
34 
35  void exposeEvent(QExposeEvent*) override;
36  void mouseDoubleClickEvent(QMouseEvent* ev) override;
37 
38  bool event(QEvent* e) override;
39 
40  std::function<void()> onWindowReady;
41  std::function<void()> onUpdate;
42  std::function<void(QRhiCommandBuffer&)> onRender;
43  std::function<void()> onResize;
44 
45  void tabletMove(QTabletEvent* ev) W_SIGNAL(tabletMove, ev);
46 
47  void mouseMove(QPointF screen, QPointF win) W_SIGNAL(mouseMove, screen, win);
48 
49  void key(int key, const QString& t) W_SIGNAL(key, key, t);
50 
51 private:
52  std::shared_ptr<RenderState> state;
53  GraphicsApi m_api{};
54  QRhiSwapChain* m_swapChain{};
55 
56  bool m_closed = false;
57  bool m_canRender = false;
58  bool m_running = false;
59  bool m_notExposed = false;
60  bool m_newlyExposed = false;
61  bool m_hasSwapChain = false;
62 };
63 }
64 
65 W_REGISTER_ARGTYPE(QTabletEvent*)
A platform window in which the content is going to be rendered.
Definition: plugins/score-plugin-gfx/Gfx/Graph/Window.hpp:19
Graphics rendering pipeline for ossia score.
Definition: PreviewWidget.hpp:12
GraphicsApi
Available graphics APIs to use.
Definition: RenderState.hpp:17
This node is used for rendering to a score::gfx::Window.
Definition: ScreenNode.hpp:12