Mercurial > hg > orthanc-stone
comparison Samples/Deprecated/Qt/QStoneOpenGlWidget.h @ 1348:eac254fb6791 broker
Moved Application/Samples/* to Application/Samples/Deprecated/* (remaining) + moved Samples/* to Samples/Deprecated/*
author | Benjamin Golinvaux <bgo@osimis.io> |
---|---|
date | Tue, 07 Apr 2020 14:31:28 +0200 |
parents | Samples/Qt/QStoneOpenGlWidget.h@a911f5bb48da |
children |
comparison
equal
deleted
inserted
replaced
1347:bfd77672d825 | 1348:eac254fb6791 |
---|---|
1 #pragma once | |
2 #include "../../Framework/OpenGL/OpenGLIncludes.h" | |
3 #include <QOpenGLWidget> | |
4 #include <QOpenGLFunctions> | |
5 #include <QOpenGLContext> | |
6 | |
7 #include <boost/shared_ptr.hpp> | |
8 #include "../../Framework/OpenGL/IOpenGLContext.h" | |
9 #include "../../Framework/Scene2D/OpenGLCompositor.h" | |
10 #include "../../Framework/Viewport/ViewportBase.h" | |
11 #include "../../Applications/Generic/Scene2DInteractor.h" | |
12 | |
13 namespace OrthancStone | |
14 { | |
15 class QStoneOpenGlWidget : | |
16 public QOpenGLWidget, | |
17 public OpenGL::IOpenGLContext, | |
18 public ViewportBase | |
19 { | |
20 std::unique_ptr<OrthancStone::OpenGLCompositor> compositor_; | |
21 boost::shared_ptr<Scene2DInteractor> sceneInteractor_; | |
22 QOpenGLContext openGlContext_; | |
23 | |
24 public: | |
25 QStoneOpenGlWidget(QWidget *parent) : | |
26 QOpenGLWidget(parent), | |
27 ViewportBase("QtStoneOpenGlWidget") // TODO: we shall be able to define a name but construction time is too early ! | |
28 { | |
29 setFocusPolicy(Qt::StrongFocus); // to enable keyPressEvent | |
30 setMouseTracking(true); // to enable mouseMoveEvent event when no button is pressed | |
31 } | |
32 | |
33 void Init() | |
34 { | |
35 QSurfaceFormat requestedFormat; | |
36 requestedFormat.setVersion( 2, 0 ); | |
37 openGlContext_.setFormat( requestedFormat ); | |
38 openGlContext_.create(); | |
39 openGlContext_.makeCurrent(context()->surface()); | |
40 | |
41 compositor_.reset(new OpenGLCompositor(*this, GetScene())); | |
42 } | |
43 | |
44 protected: | |
45 | |
46 //**** QWidget overrides | |
47 void initializeGL() override; | |
48 void resizeGL(int w, int h) override; | |
49 void paintGL() override; | |
50 | |
51 void mousePressEvent(QMouseEvent* event) override; | |
52 void mouseMoveEvent(QMouseEvent* event) override; | |
53 void mouseReleaseEvent(QMouseEvent* event) override; | |
54 void keyPressEvent(QKeyEvent* event) override; | |
55 void keyReleaseEvent(QKeyEvent *event) override; | |
56 void wheelEvent(QWheelEvent* event) override; | |
57 | |
58 //**** IOpenGLContext overrides | |
59 | |
60 virtual void MakeCurrent() override; | |
61 virtual void SwapBuffer() override {} | |
62 | |
63 virtual unsigned int GetCanvasWidth() const override | |
64 { | |
65 return this->width(); | |
66 } | |
67 | |
68 virtual unsigned int GetCanvasHeight() const override | |
69 { | |
70 return this->height(); | |
71 } | |
72 | |
73 public: | |
74 | |
75 void SetInteractor(boost::shared_ptr<Scene2DInteractor> sceneInteractor) | |
76 { | |
77 sceneInteractor_ = sceneInteractor; | |
78 } | |
79 | |
80 virtual ICompositor& GetCompositor() | |
81 { | |
82 return *compositor_; | |
83 } | |
84 | |
85 protected: | |
86 void mouseEvent(QMouseEvent* qtEvent, OrthancStone::GuiAdapterHidEventType guiEventType); | |
87 bool keyEvent(QKeyEvent* qtEvent, OrthancStone::GuiAdapterHidEventType guiEventType); | |
88 | |
89 }; | |
90 } |