+
+void MainWindow::setZoomLevel(int level)
+{
+ if(!vnc_view)
+ return;
+
+ //TODO: use getZoomFactor() instead
+ int old_width = vnc_view->width();
+ QPoint center = vnc_view->visibleRegion().boundingRect().center();
+
+ vnc_view->setZoomLevel(level);
+
+ int new_width = vnc_view->width();
+
+ //scroll to center, if zoom level actually changed
+ if(new_width != old_width) {
+ center = center * (double(new_width)/old_width);
+ scroll_area->ensureVisible(center.x(), center.y(),
+ vnc_view->visibleRegion().boundingRect().width()/2,
+ vnc_view->visibleRegion().boundingRect().height()/2);
+ vnc_view->update();
+
+ scroll_area->showMessage(tr("Zoom: %1\%").arg(qRound(100*vnc_view->getZoomFactor())));
+ }
+}