Mercurial > hg > orthanc-stone
annotate Samples/Qt/QStoneOpenGlWidget.cpp @ 881:a8cd3755db21 am-dev
wip
author | Alain Mazy <alain@mazy.be> |
---|---|
date | Tue, 09 Jul 2019 11:41:16 +0200 |
parents | 12b591d5d63c |
children | 30268a0cafca |
rev | line source |
---|---|
849 | 1 #include "../../Framework/OpenGL/OpenGLIncludes.h" |
2 #include "QStoneOpenGlWidget.h" | |
3 | |
879 | 4 #include <QMouseEvent> |
5 | |
6 using namespace OrthancStone; | |
7 | |
849 | 8 void QStoneOpenGlWidget::initializeGL() |
9 { | |
863
23701fbf228e
first rendering of a 2DScene in Qt widget
Alain Mazy <alain@mazy.be>
parents:
849
diff
changeset
|
10 glewInit(); |
23701fbf228e
first rendering of a 2DScene in Qt widget
Alain Mazy <alain@mazy.be>
parents:
849
diff
changeset
|
11 } |
23701fbf228e
first rendering of a 2DScene in Qt widget
Alain Mazy <alain@mazy.be>
parents:
849
diff
changeset
|
12 |
23701fbf228e
first rendering of a 2DScene in Qt widget
Alain Mazy <alain@mazy.be>
parents:
849
diff
changeset
|
13 void QStoneOpenGlWidget::MakeCurrent() |
23701fbf228e
first rendering of a 2DScene in Qt widget
Alain Mazy <alain@mazy.be>
parents:
849
diff
changeset
|
14 { |
23701fbf228e
first rendering of a 2DScene in Qt widget
Alain Mazy <alain@mazy.be>
parents:
849
diff
changeset
|
15 this->makeCurrent(); |
849 | 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 | |
879 | 32 void ConvertFromPlatform( |
881 | 33 OrthancStone::GuiAdapterMouseEvent& guiEvent, |
34 PointerEvent& pointerEvent, | |
35 const QMouseEvent& qtEvent, | |
36 const OrthancStone::OpenGLCompositor& compositor) | |
879 | 37 { |
881 | 38 guiEvent.targetX = qtEvent.x(); |
39 guiEvent.targetY = qtEvent.y(); | |
40 pointerEvent.AddPosition(compositor.GetPixelCenterCoordinates(guiEvent.targetX, guiEvent.targetY)); | |
879 | 41 |
42 switch (qtEvent.button()) | |
43 { | |
881 | 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; | |
879 | 47 default: |
881 | 48 guiEvent.button = OrthancStone::GUIADAPTER_MOUSEBUTTON_LEFT; |
879 | 49 } |
50 | |
51 if (qtEvent.modifiers().testFlag(Qt::ShiftModifier)) | |
52 { | |
881 | 53 guiEvent.shiftKey = true; |
879 | 54 } |
55 if (qtEvent.modifiers().testFlag(Qt::ControlModifier)) | |
56 { | |
881 | 57 guiEvent.ctrlKey = true; |
879 | 58 } |
59 if (qtEvent.modifiers().testFlag(Qt::AltModifier)) | |
60 { | |
881 | 61 guiEvent.altKey = true; |
879 | 62 } |
63 | |
64 } | |
65 | |
881 | 66 void QStoneOpenGlWidget::mouseEvent(QMouseEvent* qtEvent, OrthancStone::GuiAdapterHidEventType guiEventType) |
67 { | |
68 OrthancStone::GuiAdapterMouseEvent guiEvent; | |
69 PointerEvent pointerEvent; | |
70 ConvertFromPlatform(guiEvent, pointerEvent, *qtEvent, *compositor_); | |
71 guiEvent.type = guiEventType; | |
879 | 72 |
881 | 73 if (sceneInteractor_.get() != NULL && compositor_.get() != NULL) |
74 { | |
75 sceneInteractor_->OnMouseEvent(guiEvent, pointerEvent); | |
76 } | |
77 | |
78 // force redraw of the OpenGL widget | |
79 update(); | |
80 } | |
879 | 81 |
82 void QStoneOpenGlWidget::mousePressEvent(QMouseEvent* qtEvent) | |
83 { | |
881 | 84 mouseEvent(qtEvent, GUIADAPTER_EVENT_MOUSEDOWN); |
879 | 85 } |
86 | |
881 | 87 void QStoneOpenGlWidget::mouseMoveEvent(QMouseEvent* qtEvent) |
88 { | |
89 mouseEvent(qtEvent, GUIADAPTER_EVENT_MOUSEDOWN); | |
90 } | |
91 | |
92 void QStoneOpenGlWidget::mouseReleaseEvent(QMouseEvent* qtEvent) | |
93 { | |
94 mouseEvent(qtEvent, GUIADAPTER_EVENT_MOUSEUP); | |
95 } |