Merge pull request #438 from andreasb242/scroll-touch-disable

Try to disable scrolling if pen is active
presentation
andreasb242 7 years ago committed by GitHub
commit ca2bbfbcae
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 53
      src/gui/Layout.cpp
  2. 14
      src/gui/Layout.h
  3. 12
      src/gui/MainWindow.cpp

@ -7,20 +7,38 @@
#include "widgets/XournalWidget.h"
Layout::Layout(XournalView* _view,
Layout::Layout(XournalView* view,
GtkAdjustment* adjHorizontal,
GtkAdjustment* adjVertical)
: view(_view),
: view(view),
adjHorizontal(adjHorizontal),
adjVertical(adjVertical),
lastScrollHorizontal(-1),
lastScrollVertical(-1),
lastWidgetWidth(0),
layoutWidth(0),
layoutHeight(0)
{
XOJ_INIT_TYPE(Layout);
g_signal_connect(adjHorizontal, "value-changed", G_CALLBACK(adjustmentValueChanged), this);
g_signal_connect(adjVertical, "value-changed", G_CALLBACK(adjustmentValueChanged), this);
g_signal_connect(adjHorizontal, "value-changed", G_CALLBACK(
+[](GtkAdjustment* adjustment, Layout* layout)
{
XOJ_CHECK_TYPE_OBJ(layout, Layout);
layout->checkScroll(adjustment, layout->lastScrollHorizontal);
layout->updateCurrentPage();
}), this);
g_signal_connect(adjVertical, "value-changed", G_CALLBACK(
+[](GtkAdjustment* adjustment, Layout* layout)
{
XOJ_CHECK_TYPE_OBJ(layout, Layout);
layout->checkScroll(adjustment, layout->lastScrollVertical);
layout->updateCurrentPage();
}), this);
lastScrollHorizontal = gtk_adjustment_get_value(adjHorizontal);
lastScrollVertical = gtk_adjustment_get_value(adjVertical);
}
Layout::~Layout()
@ -28,11 +46,26 @@ Layout::~Layout()
XOJ_RELEASE_TYPE(Layout);
}
void Layout::checkScroll(GtkAdjustment* adjustment, double& lastScroll)
{
XOJ_CHECK_TYPE(Layout);
if (!view->shouldIgnoreTouchEvents())
{
lastScroll = gtk_adjustment_get_value(adjustment);
return;
}
gtk_adjustment_set_value(adjustment, lastScroll);
}
/**
* Check which page should be selected
*/
void Layout::updateCurrentPage()
{
XOJ_CHECK_TYPE(Layout);
Rectangle visRect = getVisibleRect();
Control* control = this->view->getControl();
@ -116,14 +149,10 @@ void Layout::updateCurrentPage()
}
}
void Layout::adjustmentValueChanged(GtkAdjustment* adjustment,
Layout* layout)
{
layout->updateCurrentPage();
}
Rectangle Layout::getVisibleRect()
{
XOJ_CHECK_TYPE(Layout);
return Rectangle(gtk_adjustment_get_value(adjHorizontal),
gtk_adjustment_get_value(adjVertical),
gtk_adjustment_get_page_size(adjHorizontal),
@ -135,6 +164,8 @@ Rectangle Layout::getVisibleRect()
*/
double Layout::getLayoutHeight()
{
XOJ_CHECK_TYPE(Layout);
return layoutHeight;
}
@ -143,6 +174,8 @@ double Layout::getLayoutHeight()
*/
double Layout::getLayoutWidth()
{
XOJ_CHECK_TYPE(Layout);
return layoutWidth;
}

@ -84,18 +84,11 @@ public:
*/
void updateCurrentPage();
public:
/**
* Callback for a changed value of one of the adjustments of
* the scrolled window. It updates the current XojPageView
* via Layout::updateCurrentPage()
*/
static void adjustmentValueChanged(GtkAdjustment* adjustment,
Layout* layout);
private:
void checkScroll(GtkAdjustment* adjustment, double& lastScroll);
void setLayoutSize(int width, int height);
private:
XOJ_TYPE_ATTRIB;
XournalView* view;
@ -103,6 +96,9 @@ private:
GtkAdjustment* adjHorizontal;
GtkAdjustment* adjVertical;
double lastScrollHorizontal;
double lastScrollVertical;
/**
* The last width of the widget
*/

@ -29,8 +29,8 @@ using std::cout;
using std::endl;
namespace bf = boost::filesystem;
MainWindow::MainWindow(GladeSearchpath* gladeSearchPath, Control* control) :
GladeGui(gladeSearchPath, "main.glade", "mainWindow")
MainWindow::MainWindow(GladeSearchpath* gladeSearchPath, Control* control)
: GladeGui(gladeSearchPath, "main.glade", "mainWindow")
{
XOJ_INIT_TYPE(MainWindow);
@ -61,13 +61,13 @@ MainWindow::MainWindow(GladeSearchpath* gladeSearchPath, Control* control) :
setSidebarVisible(control->getSettings()->isSidebarVisible());
// Window handler
g_signal_connect(this->window, "delete-event", (GCallback) & deleteEventCallback, this->control);
g_signal_connect(this->window, "window_state_event", G_CALLBACK(&windowStateEventCallback), this);
g_signal_connect(this->window, "delete-event", G_CALLBACK(deleteEventCallback), this->control);
g_signal_connect(this->window, "window_state_event", G_CALLBACK(windowStateEventCallback), this);
g_signal_connect(get("buttonCloseSidebar"), "clicked", G_CALLBACK(buttonCloseSidebarClicked), this);
// "watch over" all events
g_signal_connect(this->window, "key-press-event", (GCallback) & onKeyPressCallback, this);
g_signal_connect(this->window, "key-press-event", G_CALLBACK(onKeyPressCallback), this);
this->toolbar = new ToolMenuHandler(this->control, this, GTK_WINDOW(getWindow()));
@ -97,7 +97,7 @@ MainWindow::MainWindow(GladeSearchpath* gladeSearchPath, Control* control) :
createToolbarAndMenu();
GtkWidget* menuViewSidebarVisible = get("menuViewSidebarVisible");
g_signal_connect(menuViewSidebarVisible, "toggled", (GCallback) viewShowSidebar, this);
g_signal_connect(menuViewSidebarVisible, "toggled", G_CALLBACK(viewShowSidebar), this);
updateScrollbarSidebarPosition();

Loading…
Cancel
Save