Mercurial > hg > easyhg
comparison src/panner.cpp @ 389:496f2042155a item_appearance_adjustments
Jump to position when panner is clicked on
author | Chris Cannam |
---|---|
date | Tue, 24 May 2011 16:54:24 +0100 |
parents | b9c153e00e84 |
children | 533519ebc0cb |
comparison
equal
deleted
inserted
replaced
388:6718bbc073b4 | 389:496f2042155a |
---|---|
30 public: | 30 public: |
31 friend class Panner; | 31 friend class Panner; |
32 }; | 32 }; |
33 | 33 |
34 Panner::Panner() : | 34 Panner::Panner() : |
35 m_clicked(false) | 35 m_clicked(false), |
36 m_moved(false) | |
36 { | 37 { |
37 setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); | 38 setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); |
38 setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); | 39 setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); |
39 setOptimizationFlags(QGraphicsView::DontSavePainterState | | 40 setOptimizationFlags(QGraphicsView::DontSavePainterState | |
40 QGraphicsView::IndirectPainting); | 41 QGraphicsView::IndirectPainting); |
207 if (e->button() != Qt::LeftButton) { | 208 if (e->button() != Qt::LeftButton) { |
208 QGraphicsView::mouseDoubleClickEvent(e); | 209 QGraphicsView::mouseDoubleClickEvent(e); |
209 return; | 210 return; |
210 } | 211 } |
211 m_clicked = true; | 212 m_clicked = true; |
213 m_moved = false; | |
212 m_clickedRect = m_pannedRect; | 214 m_clickedRect = m_pannedRect; |
213 m_clickedPoint = e->pos(); | 215 m_clickedPoint = e->pos(); |
214 } | 216 } |
215 | 217 |
216 void | 218 void |
229 { | 231 { |
230 if (!m_clicked) return; | 232 if (!m_clicked) return; |
231 QPointF cp = mapToScene(m_clickedPoint); | 233 QPointF cp = mapToScene(m_clickedPoint); |
232 QPointF mp = mapToScene(e->pos()); | 234 QPointF mp = mapToScene(e->pos()); |
233 QPointF delta = mp - cp; | 235 QPointF delta = mp - cp; |
236 if (!m_moved) { | |
237 if ((m_clickedPoint - e->pos()).manhattanLength() > 2) { | |
238 m_moved = true; | |
239 } else { | |
240 return; | |
241 } | |
242 } | |
234 QRectF nr = m_clickedRect; | 243 QRectF nr = m_clickedRect; |
235 nr.translate(delta); | 244 nr.translate(delta); |
236 m_pannedRect = nr; | 245 m_pannedRect = nr; |
237 emit pannedRectChanged(m_pannedRect); | 246 emit pannedRectChanged(m_pannedRect); |
238 viewport()->update(); | 247 viewport()->update(); |
245 QGraphicsView::mouseDoubleClickEvent(e); | 254 QGraphicsView::mouseDoubleClickEvent(e); |
246 return; | 255 return; |
247 } | 256 } |
248 | 257 |
249 if (m_clicked) { | 258 if (m_clicked) { |
250 mouseMoveEvent(e); | 259 if (m_moved) { |
260 mouseMoveEvent(e); | |
261 } else { | |
262 moveTo(e->pos()); | |
263 } | |
251 } | 264 } |
252 | 265 |
253 m_clicked = false; | 266 m_clicked = false; |
254 viewport()->update(); | 267 viewport()->update(); |
255 } | 268 } |
274 void | 287 void |
275 Panner::moveTo(QPoint p) | 288 Panner::moveTo(QPoint p) |
276 { | 289 { |
277 QPointF sp = mapToScene(p); | 290 QPointF sp = mapToScene(p); |
278 QRectF nr = m_pannedRect; | 291 QRectF nr = m_pannedRect; |
279 double d = sp.x() - nr.center().x(); | 292 double dx = sp.x() - nr.center().x(); |
280 nr.translate(d, 0); | 293 double dy = sp.y() - nr.center().y(); |
294 nr.translate(dx, dy); | |
281 slotSetPannedRect(nr); | 295 slotSetPannedRect(nr); |
282 emit pannedRectChanged(m_pannedRect); | 296 emit pannedRectChanged(m_pannedRect); |
283 viewport()->update(); | 297 viewport()->update(); |
284 } | 298 } |
285 | 299 |