Mercurial > hg > orthanc-stone
annotate Deprecated/Samples/Qt/QStoneOpenGlWidget.cpp @ 1458:828a9b4ee1b7
added missing copyright
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 11 Jun 2020 21:23:02 +0200 |
parents | 65e1e4b08302 |
children | 182bf3106ee2 |
rev | line source |
---|---|
1458
828a9b4ee1b7
added missing copyright
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1402
diff
changeset
|
1 /** |
828a9b4ee1b7
added missing copyright
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1402
diff
changeset
|
2 * Stone of Orthanc |
828a9b4ee1b7
added missing copyright
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1402
diff
changeset
|
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics |
828a9b4ee1b7
added missing copyright
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1402
diff
changeset
|
4 * Department, University Hospital of Liege, Belgium |
828a9b4ee1b7
added missing copyright
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1402
diff
changeset
|
5 * Copyright (C) 2017-2020 Osimis S.A., Belgium |
828a9b4ee1b7
added missing copyright
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1402
diff
changeset
|
6 * |
828a9b4ee1b7
added missing copyright
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1402
diff
changeset
|
7 * This program is free software: you can redistribute it and/or |
828a9b4ee1b7
added missing copyright
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1402
diff
changeset
|
8 * modify it under the terms of the GNU Affero General Public License |
828a9b4ee1b7
added missing copyright
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1402
diff
changeset
|
9 * as published by the Free Software Foundation, either version 3 of |
828a9b4ee1b7
added missing copyright
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1402
diff
changeset
|
10 * the License, or (at your option) any later version. |
828a9b4ee1b7
added missing copyright
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1402
diff
changeset
|
11 * |
828a9b4ee1b7
added missing copyright
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1402
diff
changeset
|
12 * This program is distributed in the hope that it will be useful, but |
828a9b4ee1b7
added missing copyright
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1402
diff
changeset
|
13 * WITHOUT ANY WARRANTY; without even the implied warranty of |
828a9b4ee1b7
added missing copyright
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1402
diff
changeset
|
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
828a9b4ee1b7
added missing copyright
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1402
diff
changeset
|
15 * Affero General Public License for more details. |
828a9b4ee1b7
added missing copyright
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1402
diff
changeset
|
16 * |
828a9b4ee1b7
added missing copyright
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1402
diff
changeset
|
17 * You should have received a copy of the GNU Affero General Public License |
828a9b4ee1b7
added missing copyright
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1402
diff
changeset
|
18 * along with this program. If not, see <http://www.gnu.org/licenses/>. |
828a9b4ee1b7
added missing copyright
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1402
diff
changeset
|
19 **/ |
828a9b4ee1b7
added missing copyright
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1402
diff
changeset
|
20 |
828a9b4ee1b7
added missing copyright
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1402
diff
changeset
|
21 |
849 | 22 #include "../../Framework/OpenGL/OpenGLIncludes.h" |
23 #include "QStoneOpenGlWidget.h" | |
24 | |
879 | 25 #include <QMouseEvent> |
26 | |
27 using namespace OrthancStone; | |
28 | |
849 | 29 void QStoneOpenGlWidget::initializeGL() |
30 { | |
863
23701fbf228e
first rendering of a 2DScene in Qt widget
Alain Mazy <alain@mazy.be>
parents:
849
diff
changeset
|
31 glewInit(); |
23701fbf228e
first rendering of a 2DScene in Qt widget
Alain Mazy <alain@mazy.be>
parents:
849
diff
changeset
|
32 } |
23701fbf228e
first rendering of a 2DScene in Qt widget
Alain Mazy <alain@mazy.be>
parents:
849
diff
changeset
|
33 |
23701fbf228e
first rendering of a 2DScene in Qt widget
Alain Mazy <alain@mazy.be>
parents:
849
diff
changeset
|
34 void QStoneOpenGlWidget::MakeCurrent() |
23701fbf228e
first rendering of a 2DScene in Qt widget
Alain Mazy <alain@mazy.be>
parents:
849
diff
changeset
|
35 { |
23701fbf228e
first rendering of a 2DScene in Qt widget
Alain Mazy <alain@mazy.be>
parents:
849
diff
changeset
|
36 this->makeCurrent(); |
849 | 37 } |
38 | |
39 void QStoneOpenGlWidget::resizeGL(int w, int h) | |
40 { | |
41 | |
42 } | |
43 | |
44 void QStoneOpenGlWidget::paintGL() | |
45 { | |
46 if (compositor_) | |
47 { | |
48 compositor_->Refresh(); | |
49 } | |
50 doneCurrent(); | |
51 } | |
52 | |
879 | 53 void ConvertFromPlatform( |
881 | 54 OrthancStone::GuiAdapterMouseEvent& guiEvent, |
55 PointerEvent& pointerEvent, | |
56 const QMouseEvent& qtEvent, | |
897 | 57 const IViewport& viewport) |
879 | 58 { |
881 | 59 guiEvent.targetX = qtEvent.x(); |
60 guiEvent.targetY = qtEvent.y(); | |
897 | 61 pointerEvent.AddPosition(viewport.GetPixelCenterCoordinates(guiEvent.targetX, guiEvent.targetY)); |
879 | 62 |
63 switch (qtEvent.button()) | |
64 { | |
881 | 65 case Qt::LeftButton: guiEvent.button = OrthancStone::GUIADAPTER_MOUSEBUTTON_LEFT; break; |
66 case Qt::MiddleButton: guiEvent.button = OrthancStone::GUIADAPTER_MOUSEBUTTON_MIDDLE; break; | |
67 case Qt::RightButton: guiEvent.button = OrthancStone::GUIADAPTER_MOUSEBUTTON_RIGHT; break; | |
879 | 68 default: |
881 | 69 guiEvent.button = OrthancStone::GUIADAPTER_MOUSEBUTTON_LEFT; |
879 | 70 } |
71 | |
72 if (qtEvent.modifiers().testFlag(Qt::ShiftModifier)) | |
73 { | |
881 | 74 guiEvent.shiftKey = true; |
879 | 75 } |
76 if (qtEvent.modifiers().testFlag(Qt::ControlModifier)) | |
77 { | |
881 | 78 guiEvent.ctrlKey = true; |
879 | 79 } |
80 if (qtEvent.modifiers().testFlag(Qt::AltModifier)) | |
81 { | |
881 | 82 guiEvent.altKey = true; |
879 | 83 } |
84 } | |
85 | |
881 | 86 void QStoneOpenGlWidget::mouseEvent(QMouseEvent* qtEvent, OrthancStone::GuiAdapterHidEventType guiEventType) |
87 { | |
88 OrthancStone::GuiAdapterMouseEvent guiEvent; | |
89 PointerEvent pointerEvent; | |
916
a911f5bb48da
MultiPlatform Basic Scene sample (so far: SDL + Qt)
Alain Mazy <alain@mazy.be>
parents:
897
diff
changeset
|
90 ConvertFromPlatform(guiEvent, pointerEvent, *qtEvent, *this); |
881 | 91 guiEvent.type = guiEventType; |
879 | 92 |
881 | 93 if (sceneInteractor_.get() != NULL && compositor_.get() != NULL) |
94 { | |
95 sceneInteractor_->OnMouseEvent(guiEvent, pointerEvent); | |
96 } | |
97 | |
98 // force redraw of the OpenGL widget | |
99 update(); | |
100 } | |
879 | 101 |
102 void QStoneOpenGlWidget::mousePressEvent(QMouseEvent* qtEvent) | |
103 { | |
881 | 104 mouseEvent(qtEvent, GUIADAPTER_EVENT_MOUSEDOWN); |
879 | 105 } |
106 | |
881 | 107 void QStoneOpenGlWidget::mouseMoveEvent(QMouseEvent* qtEvent) |
108 { | |
883 | 109 mouseEvent(qtEvent, GUIADAPTER_EVENT_MOUSEMOVE); |
881 | 110 } |
111 | |
112 void QStoneOpenGlWidget::mouseReleaseEvent(QMouseEvent* qtEvent) | |
113 { | |
114 mouseEvent(qtEvent, GUIADAPTER_EVENT_MOUSEUP); | |
115 } | |
883 | 116 |
117 void ConvertFromPlatform( | |
118 OrthancStone::GuiAdapterKeyboardEvent& guiEvent, | |
119 const QKeyEvent& qtEvent) | |
120 { | |
121 if (qtEvent.text().length() > 0) | |
122 { | |
123 guiEvent.sym[0] = qtEvent.text()[0].cell(); | |
124 } | |
125 else | |
126 { | |
127 guiEvent.sym[0] = 0; | |
128 } | |
129 guiEvent.sym[1] = 0; | |
130 | |
131 if (qtEvent.modifiers().testFlag(Qt::ShiftModifier)) | |
132 { | |
133 guiEvent.shiftKey = true; | |
134 } | |
135 if (qtEvent.modifiers().testFlag(Qt::ControlModifier)) | |
136 { | |
137 guiEvent.ctrlKey = true; | |
138 } | |
139 if (qtEvent.modifiers().testFlag(Qt::AltModifier)) | |
140 { | |
141 guiEvent.altKey = true; | |
142 } | |
143 | |
144 } | |
145 | |
146 | |
147 bool QStoneOpenGlWidget::keyEvent(QKeyEvent* qtEvent, OrthancStone::GuiAdapterHidEventType guiEventType) | |
148 { | |
149 bool handled = false; | |
150 OrthancStone::GuiAdapterKeyboardEvent guiEvent; | |
151 ConvertFromPlatform(guiEvent, *qtEvent); | |
152 guiEvent.type = guiEventType; | |
153 | |
154 if (sceneInteractor_.get() != NULL && compositor_.get() != NULL) | |
155 { | |
156 handled = sceneInteractor_->OnKeyboardEvent(guiEvent); | |
157 | |
158 if (handled) | |
159 { | |
160 // force redraw of the OpenGL widget | |
161 update(); | |
162 } | |
163 } | |
164 return handled; | |
165 } | |
166 | |
167 void QStoneOpenGlWidget::keyPressEvent(QKeyEvent *qtEvent) | |
168 { | |
169 bool handled = keyEvent(qtEvent, GUIADAPTER_EVENT_KEYDOWN); | |
170 if (!handled) | |
171 { | |
172 QOpenGLWidget::keyPressEvent(qtEvent); | |
173 } | |
174 } | |
175 | |
176 void QStoneOpenGlWidget::keyReleaseEvent(QKeyEvent *qtEvent) | |
177 { | |
178 bool handled = keyEvent(qtEvent, GUIADAPTER_EVENT_KEYUP); | |
179 if (!handled) | |
180 { | |
181 QOpenGLWidget::keyPressEvent(qtEvent); | |
182 } | |
183 } | |
184 | |
185 void QStoneOpenGlWidget::wheelEvent(QWheelEvent *qtEvent) | |
186 { | |
187 OrthancStone::GuiAdapterWheelEvent guiEvent; | |
188 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); | |
884 | 189 |
190 // force redraw of the OpenGL widget | |
191 update(); | |
883 | 192 } |