Bug 87539 - Use middle mouse button to scroll image
Summary: Use middle mouse button to scroll image
Status: RESOLVED FIXED
Alias: None
Product: digikam
Classification: Applications
Component: Usability-Mouse (show other bugs)
Version: unspecified
Platform: Compiled Sources Linux
: NOR wishlist
Target Milestone: ---
Assignee: Digikam Developers
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2004-08-19 20:58 UTC by Dan Leinir Turthra Jensen
Modified: 2022-01-13 07:26 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In: 7.5.0


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Dan Leinir Turthra Jensen 2004-08-19 20:58:13 UTC
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.
Comment 1 Renchi Raju 2004-08-19 23:52:55 UTC
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();
     }