Commit 618072f8 authored by Oliver Sander's avatar Oliver Sander Committed by Albert Astals Cid

Change pages in presentation mode by swiping on touch screen

REVIEW: 130012
BUGS: 354012
parent 63a08bc0
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include <qvalidator.h> #include <qvalidator.h>
#include <qapplication.h> #include <qapplication.h>
#include <qdesktopwidget.h> #include <qdesktopwidget.h>
#include <QGestureEvent>
#include <kcursor.h> #include <kcursor.h>
#include <krandom.h> #include <krandom.h>
#include <qtoolbar.h> #include <qtoolbar.h>
...@@ -232,6 +233,9 @@ PresentationWidget::PresentationWidget( QWidget * parent, Okular::Document * doc ...@@ -232,6 +233,9 @@ PresentationWidget::PresentationWidget( QWidget * parent, Okular::Document * doc
p.setColor( QPalette::Active, QPalette::Background, Qt::darkGray ); p.setColor( QPalette::Active, QPalette::Background, Qt::darkGray );
m_topBar->setPalette( p ); m_topBar->setPalette( p );
// Grab swipe gestures to change pages
grabGesture(Qt::SwipeGesture);
// misc stuff // misc stuff
setMouseTracking( true ); setMouseTracking( true );
setContextMenuPolicy( Qt::PreventContextMenu ); setContextMenuPolicy( Qt::PreventContextMenu );
...@@ -528,6 +532,9 @@ void PresentationWidget::setPlayPauseIcon() ...@@ -528,6 +532,9 @@ void PresentationWidget::setPlayPauseIcon()
// <widget events> // <widget events>
bool PresentationWidget::event( QEvent * e ) bool PresentationWidget::event( QEvent * e )
{ {
if ( e->type() == QEvent::Gesture )
return gestureEvent(static_cast<QGestureEvent*>(e));
if ( e->type() == QEvent::ToolTip ) if ( e->type() == QEvent::ToolTip )
{ {
QHelpEvent * he = (QHelpEvent*)e; QHelpEvent * he = (QHelpEvent*)e;
...@@ -549,6 +556,33 @@ bool PresentationWidget::event( QEvent * e ) ...@@ -549,6 +556,33 @@ bool PresentationWidget::event( QEvent * e )
return QWidget::event( e ); return QWidget::event( e );
} }
bool PresentationWidget::gestureEvent( QGestureEvent * event )
{
// Swiping left or right on a touch screen will go to the previous or next slide, respectively.
// The precise gesture is the standard Qt swipe: with three(!) fingers.
if (QGesture *swipe = event->gesture(Qt::SwipeGesture))
{
QSwipeGesture * swipeEvent = static_cast<QSwipeGesture *>(swipe);
if (swipeEvent->state() == Qt::GestureFinished)
{
if (swipeEvent->horizontalDirection() == QSwipeGesture::Left)
{
slotPrevPage();
event->accept();
return true;
}
if (swipeEvent->horizontalDirection() == QSwipeGesture::Right)
{
slotNextPage();
event->accept();
return true;
}
}
}
return false;
}
void PresentationWidget::keyPressEvent( QKeyEvent * e ) void PresentationWidget::keyPressEvent( QKeyEvent * e )
{ {
if ( !m_isSetup ) if ( !m_isSetup )
...@@ -664,9 +698,6 @@ void PresentationWidget::mousePressEvent( QMouseEvent * e ) ...@@ -664,9 +698,6 @@ void PresentationWidget::mousePressEvent( QMouseEvent * e )
overlayClick( e->pos() ); overlayClick( e->pos() );
return; return;
} }
// if no other actions, go to next page
slotNextPage();
} }
// pressing right button // pressing right button
else if ( e->button() == Qt::RightButton ) else if ( e->button() == Qt::RightButton )
...@@ -689,6 +720,9 @@ void PresentationWidget::mouseReleaseEvent( QMouseEvent * e ) ...@@ -689,6 +720,9 @@ void PresentationWidget::mouseReleaseEvent( QMouseEvent * e )
m_document->processAction( link ); m_document->processAction( link );
m_pressedLink = 0; m_pressedLink = 0;
} }
// if no other actions, go to next page
slotNextPage();
} }
void PresentationWidget::mouseMoveEvent( QMouseEvent * e ) void PresentationWidget::mouseMoveEvent( QMouseEvent * e )
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
class QLineEdit; class QLineEdit;
class QToolBar; class QToolBar;
class QTimer; class QTimer;
class QGestureEvent;
class KActionCollection; class KActionCollection;
class KSelectAction; class KSelectAction;
class SmoothPathEngine; class SmoothPathEngine;
...@@ -71,6 +72,7 @@ class PresentationWidget : public QWidget, public Okular::DocumentObserver ...@@ -71,6 +72,7 @@ class PresentationWidget : public QWidget, public Okular::DocumentObserver
void paintEvent( QPaintEvent * e ) override; void paintEvent( QPaintEvent * e ) override;
void resizeEvent( QResizeEvent * e ) override; void resizeEvent( QResizeEvent * e ) override;
void leaveEvent( QEvent * e ) override; void leaveEvent( QEvent * e ) override;
bool gestureEvent (QGestureEvent * e );
private: private:
const void * getObjectRect( Okular::ObjectRect::ObjectType type, int x, int y, QRect * geometry = 0 ) const; const void * getObjectRect( Okular::ObjectRect::ObjectType type, int x, int y, QRect * geometry = 0 ) const;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment