Mercurial > hg > orthanc-stone
comparison Samples/Deprecated/Qt/QStoneOpenGlWidget.cpp @ 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.cpp@a911f5bb48da |
children |
comparison
equal
deleted
inserted
replaced
1347:bfd77672d825 | 1348:eac254fb6791 |
---|---|
1 #include "../../Framework/OpenGL/OpenGLIncludes.h" | |
2 #include "QStoneOpenGlWidget.h" | |
3 | |
4 #include <QMouseEvent> | |
5 | |
6 using namespace OrthancStone; | |
7 | |
8 void QStoneOpenGlWidget::initializeGL() | |
9 { | |
10 glewInit(); | |
11 } | |
12 | |
13 void QStoneOpenGlWidget::MakeCurrent() | |
14 { | |
15 this->makeCurrent(); | |
16 } | |
17 | |
18 void QStoneOpenGlWidget::resizeGL(int w, int h) | |
19 { | |
20 | |
21 } | |
22 | |
23 void QStoneOpenGlWidget::paintGL() | |
24 { | |
25 if (compositor_) | |
26 { | |
27 compositor_->Refresh(); | |
28 } | |
29 doneCurrent(); | |
30 } | |
31 | |
32 void ConvertFromPlatform( | |
33 OrthancStone::GuiAdapterMouseEvent& guiEvent, | |
34 PointerEvent& pointerEvent, | |
35 const QMouseEvent& qtEvent, | |
36 const IViewport& viewport) | |
37 { | |
38 guiEvent.targetX = qtEvent.x(); | |
39 guiEvent.targetY = qtEvent.y(); | |
40 pointerEvent.AddPosition(viewport.GetPixelCenterCoordinates(guiEvent.targetX, guiEvent.targetY)); | |
41 | |
42 switch (qtEvent.button()) | |
43 { | |
44 case Qt::LeftButton: guiEvent.button = OrthancStone::GUIADAPTER_MOUSEBUTTON_LEFT; break; | |
45 case Qt::MiddleButton: guiEvent.button = OrthancStone::GUIADAPTER_MOUSEBUTTON_MIDDLE; break; | |
46 case Qt::RightButton: guiEvent.button = OrthancStone::GUIADAPTER_MOUSEBUTTON_RIGHT; break; | |
47 default: | |
48 guiEvent.button = OrthancStone::GUIADAPTER_MOUSEBUTTON_LEFT; | |
49 } | |
50 | |
51 if (qtEvent.modifiers().testFlag(Qt::ShiftModifier)) | |
52 { | |
53 guiEvent.shiftKey = true; | |
54 } | |
55 if (qtEvent.modifiers().testFlag(Qt::ControlModifier)) | |
56 { | |
57 guiEvent.ctrlKey = true; | |
58 } | |
59 if (qtEvent.modifiers().testFlag(Qt::AltModifier)) | |
60 { | |
61 guiEvent.altKey = true; | |
62 } | |
63 } | |
64 | |
65 void QStoneOpenGlWidget::mouseEvent(QMouseEvent* qtEvent, OrthancStone::GuiAdapterHidEventType guiEventType) | |
66 { | |
67 OrthancStone::GuiAdapterMouseEvent guiEvent; | |
68 PointerEvent pointerEvent; | |
69 ConvertFromPlatform(guiEvent, pointerEvent, *qtEvent, *this); | |
70 guiEvent.type = guiEventType; | |
71 | |
72 if (sceneInteractor_.get() != NULL && compositor_.get() != NULL) | |
73 { | |
74 sceneInteractor_->OnMouseEvent(guiEvent, pointerEvent); | |
75 } | |
76 | |
77 // force redraw of the OpenGL widget | |
78 update(); | |
79 } | |
80 | |
81 void QStoneOpenGlWidget::mousePressEvent(QMouseEvent* qtEvent) | |
82 { | |
83 mouseEvent(qtEvent, GUIADAPTER_EVENT_MOUSEDOWN); | |
84 } | |
85 | |
86 void QStoneOpenGlWidget::mouseMoveEvent(QMouseEvent* qtEvent) | |
87 { | |
88 mouseEvent(qtEvent, GUIADAPTER_EVENT_MOUSEMOVE); | |
89 } | |
90 | |
91 void QStoneOpenGlWidget::mouseReleaseEvent(QMouseEvent* qtEvent) | |
92 { | |
93 mouseEvent(qtEvent, GUIADAPTER_EVENT_MOUSEUP); | |
94 } | |
95 | |
96 void ConvertFromPlatform( | |
97 OrthancStone::GuiAdapterKeyboardEvent& guiEvent, | |
98 const QKeyEvent& qtEvent) | |
99 { | |
100 if (qtEvent.text().length() > 0) | |
101 { | |
102 guiEvent.sym[0] = qtEvent.text()[0].cell(); | |
103 } | |
104 else | |
105 { | |
106 guiEvent.sym[0] = 0; | |
107 } | |
108 guiEvent.sym[1] = 0; | |
109 | |
110 if (qtEvent.modifiers().testFlag(Qt::ShiftModifier)) | |
111 { | |
112 guiEvent.shiftKey = true; | |
113 } | |
114 if (qtEvent.modifiers().testFlag(Qt::ControlModifier)) | |
115 { | |
116 guiEvent.ctrlKey = true; | |
117 } | |
118 if (qtEvent.modifiers().testFlag(Qt::AltModifier)) | |
119 { | |
120 guiEvent.altKey = true; | |
121 } | |
122 | |
123 } | |
124 | |
125 | |
126 bool QStoneOpenGlWidget::keyEvent(QKeyEvent* qtEvent, OrthancStone::GuiAdapterHidEventType guiEventType) | |
127 { | |
128 bool handled = false; | |
129 OrthancStone::GuiAdapterKeyboardEvent guiEvent; | |
130 ConvertFromPlatform(guiEvent, *qtEvent); | |
131 guiEvent.type = guiEventType; | |
132 | |
133 if (sceneInteractor_.get() != NULL && compositor_.get() != NULL) | |
134 { | |
135 handled = sceneInteractor_->OnKeyboardEvent(guiEvent); | |
136 | |
137 if (handled) | |
138 { | |
139 // force redraw of the OpenGL widget | |
140 update(); | |
141 } | |
142 } | |
143 return handled; | |
144 } | |
145 | |
146 void QStoneOpenGlWidget::keyPressEvent(QKeyEvent *qtEvent) | |
147 { | |
148 bool handled = keyEvent(qtEvent, GUIADAPTER_EVENT_KEYDOWN); | |
149 if (!handled) | |
150 { | |
151 QOpenGLWidget::keyPressEvent(qtEvent); | |
152 } | |
153 } | |
154 | |
155 void QStoneOpenGlWidget::keyReleaseEvent(QKeyEvent *qtEvent) | |
156 { | |
157 bool handled = keyEvent(qtEvent, GUIADAPTER_EVENT_KEYUP); | |
158 if (!handled) | |
159 { | |
160 QOpenGLWidget::keyPressEvent(qtEvent); | |
161 } | |
162 } | |
163 | |
164 void QStoneOpenGlWidget::wheelEvent(QWheelEvent *qtEvent) | |
165 { | |
166 OrthancStone::GuiAdapterWheelEvent guiEvent; | |
167 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); | |
168 | |
169 // force redraw of the OpenGL widget | |
170 update(); | |
171 } |