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 //}