diff --git a/src/control/zoom/ZoomControl.cpp b/src/control/zoom/ZoomControl.cpp index 2382416d..7872a7d8 100644 --- a/src/control/zoom/ZoomControl.cpp +++ b/src/control/zoom/ZoomControl.cpp @@ -51,16 +51,8 @@ void ZoomControl::startZoomSequence(double centerX, double centerY) zoomSequenceStart = this->zoom; -// if (centerX == -1 || centerY == -1) -// { -// this->zoomCenterX = gtk_widget_get_allocated_width(widget) / 2; -// this->zoomCenterY = gtk_widget_get_allocated_height(widget) / 2; -// } -// else -// { - this->zoomCenterX = centerX; - this->zoomCenterY = centerY; -// } + this->zoomCenterX = centerX; + this->zoomCenterY = centerY; } /** @@ -97,20 +89,22 @@ void ZoomControl::scrollToZoomPosition(XojPageView* view) { Layout* layout = gtk_xournal_get_layout(this->view->getWidget()); - if (this->zoomCenterX == -1 || this->zoomCenterY == -1) - { - // get margins for relative scroll calculation - double marginLeft = (double) view->layout.getMarginLeft(); - double marginTop = (double) view->layout.getMarginTop(); - int visX = (int) ((zoomCenterX - marginLeft) * (this->zoom / zoomSequenceStart - 1)); - int visY = (int) ((zoomCenterY - marginTop) * (this->zoom / zoomSequenceStart - 1)); - layout->scrollAbs(zoomSequenceRectangle.x + visX, zoomSequenceRectangle.y + visY); - } - else - { + printf("ZoomPos: %lf / %lf\n", this->zoomCenterX, this->zoomCenterY); +// if (this->zoomCenterX == -1 || this->zoomCenterY == -1) +// { +// // get margins for relative scroll calculation +// double marginLeft = (double) view->layout.getMarginLeft(); +// double marginTop = (double) view->layout.getMarginTop(); +// +// int visX = (int) ((zoomCenterX - marginLeft) * (this->zoom / zoomSequenceStart - 1)); +// int visY = (int) ((zoomCenterY - marginTop) * (this->zoom / zoomSequenceStart - 1)); +// layout->scrollAbs(zoomSequenceRectangle.x + visX, zoomSequenceRectangle.y + visY); +// } +// else +// { layout->scrollAbs(zoomSequenceRectangle.x * this->zoom, zoomSequenceRectangle.y * this->zoom); - } +// } } @@ -283,42 +277,28 @@ bool ZoomControl::onScrolledwindowMainScrollEvent(GdkEventScroll* event) if (state & GDK_CONTROL_MASK) { + GtkWidget* topLevel = gtk_widget_get_toplevel(view->getWidget()); + int wx = 0; + int wy = 0; + gtk_widget_translate_coordinates(view->getWidget(), topLevel, 0, 0, &wx, &wy); + + printf("event: %lf / %lf (%lf / %lf)\n", event->x, event->y, + event->x_root, event->y_root + + ); + if (event->direction == GDK_SCROLL_UP || (event->direction == GDK_SCROLL_SMOOTH && event->delta_y > 0)) { - zoomIn(event->x, event->y); + zoomOut(event->x - wx, event->y - wy); } else if (event->direction == GDK_SCROLL_DOWN || (event->direction == GDK_SCROLL_SMOOTH && event->delta_y < 0)) { - zoomOut(event->x, event->y); + zoomIn(event->x - wx, event->y - wy); } return true; } - // Shift + Wheel scrolls the in the perpendicular direction - if (state & GDK_SHIFT_MASK) - { - if (event->direction == GDK_SCROLL_UP) - { - event->direction = GDK_SCROLL_LEFT; - } - else if (event->direction == GDK_SCROLL_LEFT) - { - event->direction = GDK_SCROLL_UP; - } - else if (event->direction == GDK_SCROLL_DOWN) - { - event->direction = GDK_SCROLL_RIGHT; - } - else if (event->direction == GDK_SCROLL_RIGHT) - { - event->direction = GDK_SCROLL_DOWN; - } - - event->state &= ~GDK_SHIFT_MASK; - state &= ~GDK_SHIFT_MASK; - } - return false; } diff --git a/src/control/zoom/ZoomControl.h b/src/control/zoom/ZoomControl.h index 8e259f04..517325a7 100644 --- a/src/control/zoom/ZoomControl.h +++ b/src/control/zoom/ZoomControl.h @@ -106,8 +106,8 @@ private: double zoomFitValue; // Current zoom center - gdouble zoomCenterX; - gdouble zoomCenterY; + double zoomCenterX; + double zoomCenterY; /** * Zoom at zoom sequence start diff --git a/src/control/zoom/ZoomGesture.cpp b/src/control/zoom/ZoomGesture.cpp index e1a6dc03..439a287e 100644 --- a/src/control/zoom/ZoomGesture.cpp +++ b/src/control/zoom/ZoomGesture.cpp @@ -2,7 +2,8 @@ #include "ZoomControl.h" ZoomGesture::ZoomGesture(GtkWidget* parent, ZoomControl* zoomControl) - : zoomControl(zoomControl) + : zoomControl(zoomControl), + gestureActive(false) { XOJ_INIT_TYPE(ZoomGesture); @@ -42,10 +43,19 @@ ZoomGesture::~ZoomGesture() XOJ_RELEASE_TYPE(ZoomGesture); } +bool ZoomGesture::isGestureActive() +{ + XOJ_CHECK_TYPE(ZoomGesture); + + return gestureActive; +} + void ZoomGesture::zoomBegin() { XOJ_CHECK_TYPE(ZoomGesture); + gestureActive = true; + double x = 0; double y = 0; // get center of bounding box @@ -65,5 +75,7 @@ void ZoomGesture::zoomEnd() { XOJ_CHECK_TYPE(ZoomGesture); + gestureActive = false; + zoomControl->endZoomSequence(); } diff --git a/src/control/zoom/ZoomGesture.h b/src/control/zoom/ZoomGesture.h index 7afa02e5..132b9d99 100644 --- a/src/control/zoom/ZoomGesture.h +++ b/src/control/zoom/ZoomGesture.h @@ -23,6 +23,9 @@ public: ZoomGesture(GtkWidget* parent, ZoomControl* zoomControl); virtual ~ZoomGesture(); +public: + bool isGestureActive(); + private: void zoomBegin(); void zoomChanged(double zoom); @@ -33,4 +36,6 @@ private: ZoomControl* zoomControl; GtkGesture* gesture; + + bool gestureActive; }; diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 83678c2d..62a3b7d6 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -158,8 +158,14 @@ Layout* MainWindow::getLayout() { XOJ_CHECK_TYPE(MainWindow); - Layout* layout = gtk_xournal_get_layout(GTK_WIDGET(this->xournal->getWidget())); - return layout; + return gtk_xournal_get_layout(GTK_WIDGET(this->xournal->getWidget())); +} + +bool MainWindow::isGestureActive() +{ + XOJ_CHECK_TYPE(MainWindow); + + return zoomGesture->isGestureActive(); } bool cancellable_cancel(GCancellable* cancel) diff --git a/src/gui/MainWindow.h b/src/gui/MainWindow.h index 8384c6e1..1c589d25 100644 --- a/src/gui/MainWindow.h +++ b/src/gui/MainWindow.h @@ -87,6 +87,8 @@ public: Layout* getLayout(); + bool isGestureActive(); + private: void createToolbarAndMenu(); diff --git a/src/gui/inputdevices/InputSequence.cpp b/src/gui/inputdevices/InputSequence.cpp index b66ac671..827a570f 100644 --- a/src/gui/inputdevices/InputSequence.cpp +++ b/src/gui/inputdevices/InputSequence.cpp @@ -1,6 +1,7 @@ #include "InputSequence.h" #include "NewGtkInputDevice.h" +#include "control/Control.h" #include "control/settings/ButtonConfig.h" #include "control/settings/Settings.h" #include "control/tools/EditSelection.h" @@ -210,11 +211,10 @@ bool InputSequence::actionMoved() inputHandler->getView()->penActionDetected(); } - printf("actionMoved()*************\n"); -// if (xournal->view->zoom_gesture_active) -// { -// return false; -// } + if (xournal->view->getControl()->getWindow()->isGestureActive()) + { + return false; + } if (h->getToolType() == TOOL_HAND) { @@ -418,12 +418,11 @@ void InputSequence::actionEnd() Cursor* cursor = xournal->view->getCursor(); ToolHandler* h = inputHandler->getToolHandler(); - printf("actionEnd()*************\n"); -// if (xournal->view->zoom_gesture_active) -// { -// stopInput(); -// return; -// } + if (xournal->view->getControl()->getWindow()->isGestureActive()) + { + stopInput(); + return; + } cursor->setMouseDown(false);