comparison Deprecated/Samples/Qt/QStoneOpenGlWidget.cpp @ 1402:65e1e4b08302

moved deprecated samples into Deprecated
author Alain Mazy <alain@mazy.be>
date Wed, 29 Apr 2020 20:50:53 +0200
parents Samples/Deprecated/Qt/QStoneOpenGlWidget.cpp@eac254fb6791
children 828a9b4ee1b7
comparison
equal deleted inserted replaced
1401:f6a2d46d2b76 1402:65e1e4b08302
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 }