Element editor add touchpad gestures, thank Yoann

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@3533 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
scorpio810
2014-12-06 17:56:07 +00:00
parent 74b1270d0d
commit 438f98d34b
2 changed files with 82 additions and 5 deletions

View File

@@ -18,6 +18,7 @@
#include "elementview.h" #include "elementview.h"
#include "qetelementeditor.h" #include "qetelementeditor.h"
#include "editorcommands.h" #include "editorcommands.h"
#include "qetapp.h"
/** /**
Constructeur Constructeur
@param scene ElementScene visualisee par cette ElementView @param scene ElementScene visualisee par cette ElementView
@@ -28,6 +29,7 @@ ElementView::ElementView(ElementScene *scene, QWidget *parent) :
scene_(scene), scene_(scene),
offset_paste_count_(0) offset_paste_count_(0)
{ {
grabGesture(Qt::PinchGesture);
setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate); setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);
setInteractive(true); setInteractive(true);
setAlignment(Qt::AlignHCenter | Qt::AlignVCenter); setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
@@ -112,6 +114,22 @@ void ElementView::zoomOut() {
scale(0.75, 0.75); scale(0.75, 0.75);
} }
/**
Agrandit le schema avec le trackpad
*/
void ElementView::zoomInSlowly() {
scale(1.02, 1.02);
adjustSceneRect();
}
/**
Retrecit le schema avec le trackpad
*/
void ElementView::zoomOutSlowly() {
scale(0.98, 0.98);
adjustSceneRect();
}
/** /**
Agrandit ou rectrecit le schema de facon a ce que tous les elements du Agrandit ou rectrecit le schema de facon a ce que tous les elements du
schema soient visibles a l'ecran. S'il n'y a aucun element sur le schema, schema soient visibles a l'ecran. S'il n'y a aucun element sur le schema,
@@ -381,20 +399,74 @@ void ElementView::mouseReleaseEvent(QMouseEvent *e) {
QGraphicsView::mouseReleaseEvent(e); QGraphicsView::mouseReleaseEvent(e);
} }
/**
* @brief ElementView::gestures
* @return
*/
bool ElementView::gestures() const {
return(QETApp::settings().value("diagramview/gestures", false).toBool());
}
/** /**
* @brief ElementView::wheelEvent * @brief ElementView::wheelEvent
* @param e * @param e
*/ */
void ElementView::wheelEvent(QWheelEvent *e) { void ElementView::wheelEvent(QWheelEvent *e) {
//Zoom and scrolling //Zoom and scrolling
if (e -> buttons() != Qt::MidButton) { // if (e -> buttons() != Qt::MidButton) {
if (!(e -> modifiers() & Qt::ControlModifier)) // if (!(e -> modifiers() & Qt::ControlModifier))
e -> delta() > 0 ? zoomIn() : zoomOut(); // e -> delta() > 0 ? zoomIn() : zoomOut();
// else
// QAbstractScrollArea::wheelEvent(e);
// }
if ( gestures() ) {
if (e -> modifiers() & Qt::ControlModifier)
e -> delta() > 0 ? zoomInSlowly() : zoomOutSlowly();
else else
QAbstractScrollArea::wheelEvent(e); QGraphicsView::wheelEvent(e);
} else {
e -> delta() > 0 ? zoomIn(): zoomOut();
} }
} }
/**
Gere les evenements de la ElementView
@param e Evenement
*/
bool ElementView::event(QEvent *e) {
// By default touch events are converted to mouse events. So
// after this event we will get a mouse event also but we want
// to handle touch events as gestures only. So we need this safeguard
// to block mouse events that are actually generated from touch.
if (e->type() == QEvent::Gesture)
return gestureEvent(static_cast<QGestureEvent *>(e));
return(QGraphicsView::event(e));
}
/**
* Utilise le pincement du trackpad pour zoomer
* @brief ElementView::gestureEvent
* @param event
* @return
*/
bool ElementView::gestureEvent(QGestureEvent *event){
if (QGesture *gesture = event->gesture(Qt::PinchGesture)) {
QPinchGesture *pinch = static_cast<QPinchGesture *>(gesture);
if (pinch->changeFlags() & QPinchGesture::ScaleFactorChanged){
qreal value = gesture->property("scaleFactor").toReal();
if (value > 1){
zoomInSlowly();
}else{
zoomOutSlowly();
}
}
}
return true;
}
/** /**
Dessine l'arriere-plan de l'editeur, cad la grille. Dessine l'arriere-plan de l'editeur, cad la grille.
@param p Le QPainter a utiliser pour dessiner @param p Le QPainter a utiliser pour dessiner

View File

@@ -47,6 +47,8 @@ class ElementView : public QGraphicsView {
void mousePressEvent(QMouseEvent *); void mousePressEvent(QMouseEvent *);
void mouseMoveEvent(QMouseEvent *); void mouseMoveEvent(QMouseEvent *);
void mouseReleaseEvent(QMouseEvent *); void mouseReleaseEvent(QMouseEvent *);
bool gestureEvent(QGestureEvent *event);
bool event(QEvent *event);
void wheelEvent(QWheelEvent *); void wheelEvent(QWheelEvent *);
virtual void drawBackground(QPainter *, const QRectF &); virtual void drawBackground(QPainter *, const QRectF &);
@@ -58,6 +60,8 @@ class ElementView : public QGraphicsView {
void setSelectionMode(); void setSelectionMode();
void zoomIn(); void zoomIn();
void zoomOut(); void zoomOut();
void zoomInSlowly();
void zoomOutSlowly();
void zoomFit(); void zoomFit();
void zoomReset(); void zoomReset();
void adjustSceneRect(); void adjustSceneRect();
@@ -86,6 +90,7 @@ class ElementView : public QGraphicsView {
QPointF start_top_left_corner_; QPointF start_top_left_corner_;
QPointF reference_view_; QPointF reference_view_;
QPointF center_view_; QPointF center_view_;
bool gestures() const;
bool is_moving_view_; ///< Indicate whether the visualisation mode has been enabled due to mouse/keyboard interactions bool is_moving_view_; ///< Indicate whether the visualisation mode has been enabled due to mouse/keyboard interactions
}; };
#endif #endif