Index: libs/widgets/common/previewwidget.cpp
===================================================================
--- libs/widgets/common/previewwidget.cpp	(revision 662341)
+++ libs/widgets/common/previewwidget.cpp	(working copy)
@@ -59,6 +59,7 @@
     {
         midButtonX = 0;
         midButtonY = 0;
+        wheelZoom  = false;     // used the mouse wheel to zoom in/out
         autoZoom   = false;
         fullScreen = false;
         zoom       = 1.0;
@@ -74,6 +75,7 @@
 
     bool            autoZoom;
     bool            fullScreen;
+    bool            wheelZoom;
 
     const int       tileSize;
     int             midButtonX;
@@ -203,7 +205,43 @@
 {
     if (d->autoZoom)
         return;
+    
+    if (d->wheelZoom) 
+    {
+        // Difference in pixels to the boundary of the visible region
+        double dx = d->midButtonX - contentsX();
+        double dy = d->midButtonY - contentsY();
 
+        // To limit precision of zoom value and reduce error with check of max/min zoom. 
+        double old_zoom = d->zoom;
+        d->zoom       = floor(zoom * 10000.0) / 10000.0;
+        double zoom_ratio = d->zoom/old_zoom;   
+
+        d->zoomWidth  = (int)(previewWidth()  * d->zoom);
+        d->zoomHeight = (int)(previewHeight() * d->zoom);
+
+        updateContentsSize();
+
+        viewport()->setUpdatesEnabled(false);
+
+        // compute position of the mouse-coordinates in zoomed version
+        double new_x = d->midButtonX * zoom_ratio;
+        double new_y = d->midButtonY * zoom_ratio;
+        
+        // new center such that the position under the mouse-pointer is kept fixed
+        double cpx = new_x - dx + visibleWidth() / 2.0; 
+        double cpy = new_y - dy + visibleHeight() / 2.0;
+        center((int)((cpx)), (int)((cpy)));
+
+        viewport()->setUpdatesEnabled(true);
+        viewport()->update();
+
+        emit signalZoomFactorChanged(d->zoom);
+        
+        return;
+    }
+
+
     // Zoom using center of canvas and given zoom factor.
 
     double cpx = contentsX() + visibleWidth()  / 2.0; 
@@ -498,10 +536,15 @@
     }
     else if (e->state() & Qt::ControlButton)
     {
+        // Save coordinates to center zoom around mouse position
+        d->midButtonX = e->x();
+        d->midButtonY = e->y();
+        d->wheelZoom  = true;
         if (e->delta() < 0 && !minZoom())
             slotDecreaseZoom();
         else if (e->delta() > 0 && !maxZoom())
             slotIncreaseZoom();
+        d->wheelZoom  = false;
         return;
     }
 
