# HG changeset patch # User Chris Cannam # Date 1291117306 0 # Node ID 16ceeee30e2ae80a40e51a3ef883dc1e830a0c94 # Parent 2550aaa0924059871b04b6cda3683ac8d37a5365 * Ensure panned rect stays current when size changes; update panner cache when scene changes diff -r 2550aaa09240 -r 16ceeee30e2a changesetitem.cpp --- a/changesetitem.cpp Tue Nov 30 11:17:30 2010 +0000 +++ b/changesetitem.cpp Tue Nov 30 11:41:46 2010 +0000 @@ -24,6 +24,7 @@ #include #include +#include ChangesetItem::ChangesetItem(Changeset *cs) : m_changeset(cs), m_detail(0), @@ -74,10 +75,12 @@ ChangesetItem::mousePressEvent(QGraphicsSceneMouseEvent *e) { DEBUG << "ChangesetItem::mousePressEvent" << endl; - if (m_detail) { - hideDetail(); - } else { - showDetail(); + if (e->button() == Qt::LeftButton) { + if (m_detail) { + hideDetail(); + } else { + showDetail(); + } } } diff -r 2550aaa09240 -r 16ceeee30e2a panned.cpp --- a/panned.cpp Tue Nov 30 11:17:30 2010 +0000 +++ b/panned.cpp Tue Nov 30 11:41:46 2010 +0000 @@ -39,12 +39,13 @@ QSizeF sz(farpt.x()-nearpt.x(), farpt.y()-nearpt.y()); QRectF pr(nearpt, sz); + QGraphicsView::resizeEvent(ev); + if (pr != m_pannedRect) { + DEBUG << "Panned: setting panned rect to " << pr << endl; m_pannedRect = pr; emit pannedRectChanged(pr); } - - QGraphicsView::resizeEvent(ev); } void diff -r 2550aaa09240 -r 16ceeee30e2a panner.cpp --- a/panner.cpp Tue Nov 30 11:17:30 2010 +0000 +++ b/panner.cpp Tue Nov 30 11:41:46 2010 +0000 @@ -66,6 +66,8 @@ Panner::setScene(QGraphicsScene *s) { if (scene()) { + disconnect(scene(), SIGNAL(sceneChanged(const QList &)), + this, SLOT(slotSceneChanged(const QList &))); disconnect(scene(), SIGNAL(sceneRectChanged(const QRectF &)), this, SLOT(slotSceneRectChanged(const QRectF &))); } @@ -76,6 +78,8 @@ fit(r); } m_cache = QPixmap(); + connect(scene(), SIGNAL(sceneChanged(const QList &)), + this, SLOT(slotSceneChanged(const QList &))); connect(scene(), SIGNAL(sceneRectChanged(const QRectF &)), this, SLOT(slotSceneRectChanged(const QRectF &))); } @@ -120,6 +124,14 @@ } void +Panner::slotSceneChanged(const QList &) +{ + if (!scene()) return; // spurious + m_cache = QPixmap(); + viewport()->update(); +} + +void Panner::paintEvent(QPaintEvent *e) { QPaintEvent *e2 = new QPaintEvent(e->region().boundingRect()); diff -r 2550aaa09240 -r 16ceeee30e2a panner.h --- a/panner.h Tue Nov 30 11:17:30 2010 +0000 +++ b/panner.h Tue Nov 30 11:41:46 2010 +0000 @@ -45,6 +45,7 @@ protected slots: void slotSceneRectChanged(const QRectF &); + void slotSceneChanged(const QList &); protected: QRectF m_pannedRect;