Version: (using KDE KDE 3.3.0) Installed from: Compiled From Sources Really the short description says it all, but what I am suggesting is to use the middle mouse button to scroll the image in the image viewer. This behavious has already proved to be very powerful in applications like Sodipodi, InkScape and The GIMP.
CVS commit by pahlibar: * use middle mouse button to scroll image CCMAIL: 87539-done@bugs.kde.org M +74 -32 canvas.cpp 1.19 --- kdeextragear-3/digikam/utilities/imageeditor/canvas.cpp #1.18:1.19 @@ -75,4 +75,7 @@ public: bool lbActive; bool rbActive; + bool midButtonPressed; + int midButtonX; + int midButtonY; QTimer *paintTimer; @@ -104,4 +107,7 @@ Canvas::Canvas(QWidget *parent) d->lbActive = false; d->rbActive = false; + d->midButtonPressed = false; + d->midButtonX = 0; + d->midButtonY = 0; d->qpix = 0; @@ -423,4 +429,8 @@ void Canvas::contentsMousePressEvent(QMo return; + d->midButtonPressed = false; + + if (e->button() == Qt::LeftButton) + { if (d->ltActive || d->rtActive || d->lbActive || d->rbActive) { @@ -430,5 +440,5 @@ void Canvas::contentsMousePressEvent(QMo return; - // Set diagonally oppposite corner as anchor + // Set diagonally opposite corner as anchor QRect r(d->rubber->normalize()); @@ -452,10 +462,21 @@ void Canvas::contentsMousePressEvent(QMo viewport()->setMouseTracking(false); - //viewport()->update(); - //d->pressedMoved = false; d->pressedMoving = true; return; } + } + else if (e->button() == Qt::MidButton) + { + if (visibleWidth() < d->im->width() || + visibleHeight() < d->im->height()) + { + viewport()->setCursor(Qt::SizeAllCursor); + d->midButtonPressed = true; + d->midButtonX = e->x(); + d->midButtonY = e->y(); + } + return; + } if (d->rubber) { @@ -475,8 +496,19 @@ void Canvas::contentsMousePressEvent(QMo void Canvas::contentsMouseMoveEvent(QMouseEvent *e) { - if (!e || !d->rubber) + if (!e) return; - if (!viewport()->hasMouseTracking()) { + if (e->state() == Qt::MidButton) + { + if (d->midButtonPressed) + { + scrollBy(d->midButtonX - e->x(), + d->midButtonY - e->y()); + } + } + else if (!viewport()->hasMouseTracking()) + { + if (!d->rubber) + return; if (e->state() != Qt::LeftButton && @@ -503,4 +535,7 @@ void Canvas::contentsMouseMoveEvent(QMou else { + if (!d->rubber) + return; + QRect r(d->rubber->normalize()); @@ -541,4 +576,6 @@ void Canvas::contentsMouseReleaseEvent(Q return; + d->midButtonPressed = false; + if (d->pressedMoving) { d->pressedMoving = false; @@ -559,6 +596,11 @@ void Canvas::contentsMouseReleaseEvent(Q } - if (e->button() == Qt::RightButton) { + if (e->button() != Qt::LeftButton) + { viewport()->unsetCursor(); + } + + if (e->button() == Qt::RightButton) + { emit signalRightButtonClicked(); }