|
|
|
|
@ -49,6 +49,7 @@ XournalView::XournalView(GtkWidget* parent, Control* control) |
|
|
|
|
this->margin = 75; |
|
|
|
|
this->currentPage = 0; |
|
|
|
|
this->lastSelectedPage = -1; |
|
|
|
|
this->lastPenAction = 0; |
|
|
|
|
|
|
|
|
|
control->getZoomControl()->addZoomListener(this); |
|
|
|
|
|
|
|
|
|
@ -360,11 +361,20 @@ bool XournalView::onKeyReleaseEvent(GdkEventKey* event) |
|
|
|
|
|
|
|
|
|
void XournalView::onRealized(GtkWidget* widget, XournalView* view) |
|
|
|
|
{ |
|
|
|
|
XOJ_CHECK_TYPE_OBJ(view, XournalView); |
|
|
|
|
|
|
|
|
|
view->setEventCompression(view->getControl()->getSettings()->isEventCompression()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void XournalView::zoom_gesture_begin_cb(GtkGesture* gesture, GdkEventSequence* sequence, XournalView* view) |
|
|
|
|
{ |
|
|
|
|
XOJ_CHECK_TYPE_OBJ(view, XournalView); |
|
|
|
|
|
|
|
|
|
if (view->shouldIgnoreTouchEvents()) |
|
|
|
|
{ |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Layout* layout = gtk_xournal_get_layout(view->widget); |
|
|
|
|
// Save visible rectangle at beginning of gesture
|
|
|
|
|
view->visRect_gesture_begin = layout->getVisibleRect(); |
|
|
|
|
@ -379,6 +389,8 @@ void XournalView::zoom_gesture_begin_cb(GtkGesture* gesture, GdkEventSequence* s |
|
|
|
|
|
|
|
|
|
void XournalView::zoom_gesture_end_cb(GtkGesture* gesture, GdkEventSequence* sequence, XournalView* view) |
|
|
|
|
{ |
|
|
|
|
XOJ_CHECK_TYPE_OBJ(view, XournalView); |
|
|
|
|
|
|
|
|
|
ZoomControl* zoom = view->control->getZoomControl(); |
|
|
|
|
zoom->zoom_center_x = -1; |
|
|
|
|
zoom->zoom_center_y = -1; |
|
|
|
|
@ -387,6 +399,13 @@ void XournalView::zoom_gesture_end_cb(GtkGesture* gesture, GdkEventSequence* seq |
|
|
|
|
|
|
|
|
|
void XournalView::zoom_gesture_scale_changed_cb(GtkGestureZoom* gesture, gdouble scale, XournalView* view) |
|
|
|
|
{ |
|
|
|
|
XOJ_CHECK_TYPE_OBJ(view, XournalView); |
|
|
|
|
|
|
|
|
|
if (view->shouldIgnoreTouchEvents()) |
|
|
|
|
{ |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
view->setZoom(scale * view->zoom_gesture_begin); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -557,14 +576,45 @@ Rectangle* XournalView::getVisibleRect(size_t page) |
|
|
|
|
|
|
|
|
|
Rectangle* XournalView::getVisibleRect(XojPageView* redrawable) |
|
|
|
|
{ |
|
|
|
|
XOJ_CHECK_TYPE(XournalView); |
|
|
|
|
|
|
|
|
|
return gtk_xournal_get_visible_area(this->widget, redrawable); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
GtkContainer* XournalView::getParent() |
|
|
|
|
{ |
|
|
|
|
XOJ_CHECK_TYPE(XournalView); |
|
|
|
|
|
|
|
|
|
return this->parent; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* A pen action was detected now, therefore ignore touch events |
|
|
|
|
* for a short time |
|
|
|
|
*/ |
|
|
|
|
void XournalView::penActionDetected() |
|
|
|
|
{ |
|
|
|
|
XOJ_CHECK_TYPE(XournalView); |
|
|
|
|
|
|
|
|
|
this->lastPenAction = g_get_monotonic_time() / 1000; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* If the pen was active a short time before, ignore touch events |
|
|
|
|
*/ |
|
|
|
|
bool XournalView::shouldIgnoreTouchEvents() |
|
|
|
|
{ |
|
|
|
|
XOJ_CHECK_TYPE(XournalView); |
|
|
|
|
|
|
|
|
|
if ((g_get_monotonic_time() / 1000 - this->lastPenAction) < 1000) |
|
|
|
|
{ |
|
|
|
|
// printf("Ignore touch, pen was active\n");
|
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
GtkWidget* XournalView::getWidget() |
|
|
|
|
{ |
|
|
|
|
XOJ_CHECK_TYPE(XournalView); |
|
|
|
|
|