Touch / Scrollbar

presentation
Andreas Butti 7 years ago
parent e398ea48cd
commit 639f2d62ea
  1. 81
      src/gui/MainWindow.cpp
  2. 2
      src/gui/MainWindow.h
  3. 4
      src/gui/XournalView.cpp
  4. 3
      src/gui/XournalView.h
  5. 7
      src/gui/inputdevices/NewGtkInputDevice.cpp
  6. 24
      src/gui/widgets/XournalWidget.cpp
  7. 21
      src/gui/widgets/XournalWidget.h

@ -208,26 +208,57 @@ void MainWindow::initXournalWidget()
{
XOJ_CHECK_TYPE(MainWindow);
winXournal = gtk_scrolled_window_new(NULL, NULL);
bool customScrollable = true;
gtk_container_add(GTK_CONTAINER(get("boxContents")), winXournal);
GtkWidget* boxContents = get("boxContents");
GtkWidget* vpXournal = gtk_viewport_new(NULL, NULL);
if (customScrollable)
{
GtkWidget* box1 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
gtk_container_add(GTK_CONTAINER(boxContents), box1);
gtk_container_add(GTK_CONTAINER(winXournal), vpXournal);
GtkWidget* box2 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
gtk_container_add(GTK_CONTAINER(box1), box2);
XojScrollbars scrollbar;
scrollbar.adjHorizontal = gtk_adjustment_new(0, 0, 100, 5, 10, 10);
scrollbar.adjVertical = gtk_adjustment_new(0, 0, 100, 5, 10, 10);
this->xournal = new XournalView(vpXournal, control);
this->xournal = new XournalView(box2, control, scrollbar);
if (control->getSettings()->isZoomGesturesEnabled())
{
this->zoomGesture = new ZoomGesture(winXournal, control->getZoomControl());
if (control->getSettings()->isZoomGesturesEnabled())
{
this->zoomGesture = new ZoomGesture(winXournal, control->getZoomControl());
}
gtk_container_add(GTK_CONTAINER(box2), gtk_scrollbar_new(GTK_ORIENTATION_VERTICAL, scrollbar.adjVertical));
gtk_container_add(GTK_CONTAINER(box1), gtk_scrollbar_new(GTK_ORIENTATION_VERTICAL, scrollbar.adjHorizontal));
gtk_widget_show_all(box1);
}
else
{
this->zoomGesture = NULL;
}
winXournal = gtk_scrolled_window_new(NULL, NULL);
gtk_container_add(GTK_CONTAINER(boxContents), winXournal);
GtkWidget* vpXournal = gtk_viewport_new(NULL, NULL);
gtk_container_add(GTK_CONTAINER(winXournal), vpXournal);
gtk_widget_show_all(winXournal);
XojScrollbars scrollbar;
scrollbar.adjHorizontal = gtk_scrollable_get_hadjustment(GTK_SCROLLABLE(vpXournal));
scrollbar.adjVertical = gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(vpXournal));
this->xournal = new XournalView(vpXournal, control, scrollbar);
if (control->getSettings()->isZoomGesturesEnabled())
{
this->zoomGesture = new ZoomGesture(winXournal, control->getZoomControl());
}
gtk_widget_show_all(winXournal);
}
}
/**
@ -415,24 +446,26 @@ void MainWindow::updateScrollbarSidebarPosition()
XOJ_CHECK_TYPE(MainWindow);
GtkWidget* panelMainContents = get("panelMainContents");
GtkScrolledWindow* scrolledWindow = GTK_SCROLLED_WINDOW(winXournal);
ScrollbarHideType type = this->getControl()->getSettings()->getScrollbarHideType();
bool scrollbarOnLeft = control->getSettings()->isScrollbarOnLeft();
if (scrollbarOnLeft)
{
gtk_scrolled_window_set_placement(scrolledWindow, GTK_CORNER_TOP_RIGHT);
}
else
if (winXournal != NULL)
{
gtk_scrolled_window_set_placement(scrolledWindow, GTK_CORNER_TOP_LEFT);
}
GtkScrolledWindow* scrolledWindow = GTK_SCROLLED_WINDOW(winXournal);
gtk_widget_set_visible(gtk_scrolled_window_get_hscrollbar(scrolledWindow), !(type & SCROLLBAR_HIDE_HORIZONTAL));
gtk_widget_set_visible(gtk_scrolled_window_get_vscrollbar(scrolledWindow), !(type & SCROLLBAR_HIDE_VERTICAL));
ScrollbarHideType type = this->getControl()->getSettings()->getScrollbarHideType();
bool scrollbarOnLeft = control->getSettings()->isScrollbarOnLeft();
if (scrollbarOnLeft)
{
gtk_scrolled_window_set_placement(scrolledWindow, GTK_CORNER_TOP_RIGHT);
}
else
{
gtk_scrolled_window_set_placement(scrolledWindow, GTK_CORNER_TOP_LEFT);
}
gtk_widget_set_visible(gtk_scrolled_window_get_hscrollbar(scrolledWindow), !(type & SCROLLBAR_HIDE_HORIZONTAL));
gtk_widget_set_visible(gtk_scrolled_window_get_vscrollbar(scrolledWindow), !(type & SCROLLBAR_HIDE_VERTICAL));
}
GtkWidget* sidebar = get("sidebar");
GtkWidget* boxContents = get("boxContents");

@ -135,7 +135,7 @@ private:
XournalView* xournal = NULL;
GtkWidget* winXournal = NULL;
ZoomGesture* zoomGesture;
ZoomGesture* zoomGesture = NULL;
// Toolbars
ToolMenuHandler* toolbar;

@ -23,7 +23,7 @@
#include <math.h>
XournalView::XournalView(GtkWidget* parent, Control* control)
XournalView::XournalView(GtkWidget* parent, Control* control, XojScrollbars scrollbar)
{
XOJ_INIT_TYPE(XournalView);
@ -31,7 +31,7 @@ XournalView::XournalView(GtkWidget* parent, Control* control)
this->cache = new PdfCache(control->getSettings()->getPdfPageCacheSize());
registerListener(control);
this->widget = gtk_xournal_new(this, GTK_SCROLLABLE(parent));
this->widget = gtk_xournal_new(this, scrollbar);
// we need to refer widget here, because we unref it somewhere twice!?
g_object_ref(this->widget);

@ -14,6 +14,7 @@
#include "control/zoom/ZoomListener.h"
#include "model/DocumentListener.h"
#include "model/PageRef.h"
#include "widgets/XournalWidget.h"
#include <Arrayiterator.h>
@ -35,7 +36,7 @@ class TouchHelper;
class XournalView : public DocumentListener, public ZoomListener
{
public:
XournalView(GtkWidget* parent, Control* control);
XournalView(GtkWidget* parent, Control* control, XojScrollbars scrollbar);
virtual ~XournalView();
public:

@ -133,13 +133,16 @@ void NewGtkInputDevice::initWidget()
GDK_SCROLL_MASK |
// Touch / Pen / Mouse
// Disable touch
// GDK_TOUCH_MASK |
GDK_POINTER_MOTION_MASK |
GDK_BUTTON_PRESS_MASK |
GDK_BUTTON_RELEASE_MASK |
GDK_SMOOTH_SCROLL_MASK |
GDK_ENTER_NOTIFY_MASK |
GDK_LEAVE_NOTIFY_MASK |
GDK_TOUCH_MASK);
GDK_LEAVE_NOTIFY_MASK);
g_signal_connect(widget, "event", G_CALLBACK(event_cb), this);
}

@ -71,18 +71,16 @@ GType gtk_xournal_get_type(void)
return gtk_xournal_type;
}
GtkWidget* gtk_xournal_new(XournalView* view, GtkScrollable* parent)
GtkWidget* gtk_xournal_new(XournalView* view, XojScrollbars scrollbar)
{
GtkXournal* xoj = GTK_XOURNAL(g_object_new(gtk_xournal_get_type(), NULL));
xoj->view = view;
xoj->parent = parent;
xoj->scrollbar = scrollbar;
xoj->scrollX = 0;
xoj->scrollY = 0;
xoj->x = 0;
xoj->y = 0;
xoj->layout = new Layout(view,
gtk_scrollable_get_hadjustment(parent),
gtk_scrollable_get_vadjustment(parent));
xoj->layout = new Layout(view, scrollbar.adjHorizontal, scrollbar.adjVertical);
xoj->pagePositionCache = new PagePositionCache();
xoj->selection = NULL;
@ -118,8 +116,8 @@ Rectangle* gtk_xournal_get_visible_area(GtkWidget* widget, XojPageView* p)
GtkXournal* xournal = GTK_XOURNAL(widget);
GdkRectangle r2;
GtkAdjustment* vadj = gtk_scrollable_get_vadjustment(xournal->parent);
GtkAdjustment* hadj = gtk_scrollable_get_hadjustment(xournal->parent);
GtkAdjustment* vadj = xournal->scrollbar.adjVertical;
GtkAdjustment* hadj = xournal->scrollbar.adjHorizontal;
r2.x = (int)gtk_adjustment_get_lower(hadj);
r2.y = (int)gtk_adjustment_get_lower(vadj);
r2.width = (int)gtk_adjustment_get_page_size(hadj);
@ -160,23 +158,15 @@ static void gtk_xournal_init(GtkXournal* xournal)
gtk_widget_set_can_focus(widget, TRUE);
}
static void
gtk_xournal_get_preferred_width(GtkWidget *widget,
gint *minimal_width,
gint *natural_width)
static void gtk_xournal_get_preferred_width(GtkWidget* widget, gint* minimal_width, gint* natural_width)
{
GtkXournal* xournal = GTK_XOURNAL(widget);
*minimal_width = *natural_width = xournal->layout->getLayoutWidth();
}
static void
gtk_xournal_get_preferred_height(GtkWidget *widget,
gint *minimal_height,
gint *natural_height)
static void gtk_xournal_get_preferred_height(GtkWidget* widget, gint* minimal_height, gint* natural_height)
{
GtkXournal* xournal = GTK_XOURNAL(widget);
*minimal_height = *natural_height = xournal->layout->getLayoutHeight();
}

@ -27,6 +27,21 @@ class PagePositionCache;
class Rectangle;
class XournalView;
typedef struct
{
/**
* Horizontal scrollbar
*/
GtkAdjustment* adjHorizontal;
/**
* Vertical scrollbar
*/
GtkAdjustment* adjVertical;
} XojScrollbars;
typedef struct _GtkXournal GtkXournal;
typedef struct _GtkXournalClass GtkXournalClass;
@ -40,9 +55,9 @@ struct _GtkXournal
XournalView* view;
/**
* Scrollabel container
* Scrollbar
*/
GtkScrollable* parent;
XojScrollbars scrollbar;
/**
* Visible area
@ -75,7 +90,7 @@ struct _GtkXournalClass
GType gtk_xournal_get_type();
GtkWidget* gtk_xournal_new(XournalView* view, GtkScrollable* parent);
GtkWidget* gtk_xournal_new(XournalView* view, XojScrollbars scrollbar);
Layout* gtk_xournal_get_layout(GtkWidget* widget);

Loading…
Cancel
Save