diff --git a/src/control/zoom/ZoomControl.cpp b/src/control/zoom/ZoomControl.cpp index 34142a11..15e82f8f 100644 --- a/src/control/zoom/ZoomControl.cpp +++ b/src/control/zoom/ZoomControl.cpp @@ -40,20 +40,16 @@ void ZoomControl::startZoomSequence(double centerX, double centerY) { XOJ_CHECK_TYPE(ZoomControl); - GtkWidget* widget = view->getWidget(); - Layout* layout = gtk_xournal_get_layout(widget); - // Save visible rectangle at beginning of zoom - zoomSequenceRectangle = layout->getVisibleRect(); - - this->zoomCenterX = centerX - zoomSequenceRectangle.x; - this->zoomCenterY = centerY - zoomSequenceRectangle.y; - + zoomSequenceRectangle = getVisibleRect(); // Scale to 100% zoom zoomSequenceRectangle.x /= this->zoom; zoomSequenceRectangle.y /= this->zoom; zoomSequenceStart = this->zoom; + + this->zoomCenterX = centerX; + this->zoomCenterY = centerY; } /** @@ -83,6 +79,16 @@ void ZoomControl::endZoomSequence() zoomCenterY = -1; } +/** + * Get visible rect on xournal view, for Zoom Gesture + */ +Rectangle ZoomControl::getVisibleRect() +{ + GtkWidget* widget = view->getWidget(); + Layout* layout = gtk_xournal_get_layout(widget); + return layout->getVisibleRect(); +} + /** * Zoom to correct position on zooming */ diff --git a/src/control/zoom/ZoomControl.h b/src/control/zoom/ZoomControl.h index 517325a7..f782d9ac 100644 --- a/src/control/zoom/ZoomControl.h +++ b/src/control/zoom/ZoomControl.h @@ -83,6 +83,11 @@ public: */ void scrollToZoomPosition(XojPageView* view); + /** + * Get visible rect on xournal view, for Zoom Gesture + */ + Rectangle getVisibleRect(); + protected: void fireZoomChanged(); void fireZoomRangeValueChanged(); diff --git a/src/control/zoom/ZoomGesture.cpp b/src/control/zoom/ZoomGesture.cpp index 439a287e..35999cc5 100644 --- a/src/control/zoom/ZoomGesture.cpp +++ b/src/control/zoom/ZoomGesture.cpp @@ -61,7 +61,9 @@ void ZoomGesture::zoomBegin() // get center of bounding box gtk_gesture_get_bounding_box_center(GTK_GESTURE(gesture), &x, &y); - zoomControl->startZoomSequence(x, y); + Rectangle zoomSequenceRectangle = zoomControl->getVisibleRect(); + + zoomControl->startZoomSequence(x - zoomSequenceRectangle.x, y - zoomSequenceRectangle.y); } void ZoomGesture::zoomChanged(double zoom)