Mercurial > hg > orthanc-stone
comparison Applications/Qt/QCairoWidget.cpp @ 276:5de5699ad570 am-2
first display in QCairoWidget; no mouse interaction yet
author | am@osimis.io |
---|---|
date | Mon, 27 Aug 2018 12:21:52 +0200 |
parents | |
children | a38465cc909f |
comparison
equal
deleted
inserted
replaced
275:58e23e0dd86a | 276:5de5699ad570 |
---|---|
1 #include "QCairoWidget.h" | |
2 | |
3 #include <QPainter> | |
4 #include <QPaintEvent> | |
5 | |
6 #include <stdexcept> | |
7 | |
8 QCairoWidget::QCairoWidget(QWidget *parent) : | |
9 QWidget(parent), | |
10 context_(NULL), | |
11 isMouseOver_(false), | |
12 mouseOverX_(0), | |
13 mouseOverY_(0) | |
14 { | |
15 setMouseTracking(true); | |
16 updateNeeded_ = true; | |
17 } | |
18 | |
19 | |
20 | |
21 QCairoWidget::~QCairoWidget() | |
22 { | |
23 } | |
24 | |
25 | |
26 void QCairoWidget::paintEvent(QPaintEvent* event) | |
27 { | |
28 QPainter painter(this); | |
29 | |
30 if (image_.get() != NULL && context_ != NULL) | |
31 { | |
32 OrthancStone::BasicNativeApplicationContext::GlobalMutexLocker locker(*context_); | |
33 OrthancStone::IViewport& vp = context_->GetCentralViewport(); | |
34 Orthanc::ImageAccessor a = surface_.GetAccessor(); | |
35 vp.Render(a); | |
36 //image_->fill(0); | |
37 painter.drawImage(0, 0, *image_); | |
38 } | |
39 else | |
40 { | |
41 painter.fillRect(rect(), Qt::red); | |
42 } | |
43 } | |
44 | |
45 | |
46 //static void GetPixelCenter(double& x, | |
47 // double& y, | |
48 // const QMouseEvent* event) | |
49 //{ | |
50 // x = static_cast<double>(event->x()) + 0.5; | |
51 // y = static_cast<double>(event->y()) + 0.5; | |
52 //} | |
53 | |
54 | |
55 //void QCairoWidget::mousePressEvent(QMouseEvent* event) | |
56 //{ | |
57 // if (mouseTracker_.get() == NULL) | |
58 // { | |
59 // OrthancStone::MouseButton button; | |
60 | |
61 // switch (event->button()) | |
62 // { | |
63 // case Qt::LeftButton: | |
64 // button = OrthancStone::MouseButton_Left; | |
65 // break; | |
66 | |
67 // case Qt::RightButton: | |
68 // button = OrthancStone::MouseButton_Right; | |
69 // break; | |
70 | |
71 // case Qt::MiddleButton: | |
72 // button = OrthancStone::MouseButton_Middle; | |
73 // break; | |
74 | |
75 // default: | |
76 // return; // Unsupported button | |
77 // } | |
78 | |
79 // double x, y; | |
80 // GetPixelCenter(x, y, event); | |
81 ////TODO mouseTracker_.reset(viewport_.CreateMouseTracker(*scene_, button, x, y)); | |
82 // repaint(); | |
83 // } | |
84 //} | |
85 | |
86 | |
87 //void QCairoWidget::mouseReleaseEvent(QMouseEvent* event) | |
88 //{ | |
89 // if (mouseTracker_.get() != NULL) | |
90 // { | |
91 // mouseTracker_->MouseUp(); | |
92 // mouseTracker_.reset(NULL); | |
93 // repaint(); | |
94 // } | |
95 //} | |
96 | |
97 | |
98 //void QCairoWidget::mouseMoveEvent(QMouseEvent* event) | |
99 //{ | |
100 // if (mouseTracker_.get() == NULL) | |
101 // { | |
102 // if (rect().contains(event->pos())) | |
103 // { | |
104 // // Mouse over widget | |
105 // isMouseOver_ = true; | |
106 // mouseOverX_ = event->x(); | |
107 // mouseOverY_ = event->y(); | |
108 // } | |
109 // else | |
110 // { | |
111 // // Mouse out of widget | |
112 // isMouseOver_ = false; | |
113 // } | |
114 // } | |
115 // else | |
116 // { | |
117 // double x, y; | |
118 // GetPixelCenter(x, y, event); | |
119 // mouseTracker_->MouseMove(x, y); | |
120 // isMouseOver_ = false; | |
121 // } | |
122 | |
123 //// if (isMouseOver_) | |
124 //// { | |
125 //// UpdateMouseCoordinates(event->x(), event->y()); | |
126 //// } | |
127 | |
128 // repaint(); | |
129 //} | |
130 | |
131 | |
132 //void QCairoWidget::wheelEvent(QWheelEvent * event) | |
133 //{ | |
134 // if (mouseTracker_.get() == NULL) | |
135 // { | |
136 //#if 0 | |
137 // double x = static_cast<double>(event->x()) + 0.5; | |
138 // double y = static_cast<double>(event->y()) + 0.5; | |
139 // mouseTracker_.reset(viewport_.CreateMouseTracker(*scene_, MouseButton_Middle, x, y)); | |
140 | |
141 // switch (event->orientation()) | |
142 // { | |
143 // case Qt::Horizontal: | |
144 // x += event->delta(); | |
145 // break; | |
146 | |
147 // case Qt::Vertical: | |
148 // y += event->delta(); | |
149 // break; | |
150 | |
151 // default: | |
152 // break; | |
153 // } | |
154 | |
155 // mouseTracker_->MouseMove(x, y); | |
156 // mouseTracker_->MouseUp(); | |
157 // mouseTracker_.reset(NULL); | |
158 | |
159 // repaint(); | |
160 //#else | |
161 // if (event->orientation() == Qt::Vertical) | |
162 // { | |
163 // unsigned int slice = scene_->GetCurrentSlice(); | |
164 | |
165 // if (event->delta() < 0) | |
166 // { | |
167 // if (slice > 0) | |
168 // { | |
169 // scene_->SetCurrentSlice(slice - 1); | |
170 // emit SliceChanged(slice - 1); | |
171 // } | |
172 // } | |
173 // else | |
174 // { | |
175 // if (slice + 1 < scene_->GetSlicesCount()) | |
176 // { | |
177 // scene_->SetCurrentSlice(slice + 1); | |
178 // emit SliceChanged(slice + 1); | |
179 // } | |
180 // } | |
181 | |
182 // repaint(); | |
183 // } | |
184 //#endif | |
185 // } | |
186 | |
187 // UpdateMouseCoordinates(event->x(), event->y()); | |
188 //} | |
189 | |
190 | |
191 | |
192 void QCairoWidget::resizeEvent(QResizeEvent* event) | |
193 { | |
194 grabGesture(Qt::PanGesture); | |
195 QWidget::resizeEvent(event); | |
196 | |
197 if (event) | |
198 { | |
199 surface_.SetSize(event->size().width(), event->size().height()); | |
200 | |
201 image_.reset(new QImage(reinterpret_cast<uchar*>(surface_.GetBuffer()), | |
202 event->size().width(), | |
203 event->size().height(), | |
204 surface_.GetPitch(), | |
205 QImage::Format_RGB32)); | |
206 | |
207 context_->GetCentralViewport().SetSize(event->size().width(), event->size().height()); | |
208 | |
209 } | |
210 } | |
211 | |
212 //void QCairoWidget::UpdateMouseCoordinates(int x, | |
213 // int y) | |
214 //{ | |
215 // if (scene_ != NULL) | |
216 // { | |
217 // double cx = static_cast<double>(x) + 0.5; | |
218 // double cy = static_cast<double>(y) + 0.5; | |
219 | |
220 // std::string coordinates; | |
221 // viewport_.FormatCoordinates(coordinates, *scene_, cx, cy); | |
222 | |
223 // emit PositionChanged(QString(coordinates.c_str())); | |
224 // } | |
225 //} | |
226 | |
227 | |
228 //void QCairoWidget::SetDefaultView() | |
229 //{ | |
230 // viewport_.SetDefaultView(); | |
231 // repaint(); | |
232 //} | |
233 | |
234 | |
235 //void QCairoWidget::Refresh() | |
236 //{ | |
237 // if (scene_ != NULL && | |
238 // updateNeeded_) | |
239 // { | |
240 // updateNeeded_ = false; | |
241 // emit ContentChanged(); | |
242 // repaint(); | |
243 // } | |
244 //} | |
245 | |
246 | |
247 //void QCairoWidget::SetSlice(int index) | |
248 //{ | |
249 // if (scene_ != NULL && | |
250 // index >= 0 && | |
251 // index < static_cast<int>(scene_->GetSlicesCount())) | |
252 // { | |
253 // scene_->SetCurrentSlice(index); | |
254 // emit SliceChanged(index); | |
255 // repaint(); | |
256 // } | |
257 //} |