diff --git a/src/board/UBBoardView.cpp b/src/board/UBBoardView.cpp index 2b2965f0..c0a44e87 100644 --- a/src/board/UBBoardView.cpp +++ b/src/board/UBBoardView.cpp @@ -270,86 +270,82 @@ UBBoardView::event (QEvent * e) return QGraphicsView::event (e); } -void -UBBoardView::tabletEvent (QTabletEvent * event) +void UBBoardView::tabletEvent (QTabletEvent * event) { - if (!mUseHighResTabletEvent) - { - event->setAccepted (false); - return; + if (!mUseHighResTabletEvent) { + event->setAccepted (false); + return; } - UBDrawingController *dc = UBDrawingController::drawingController (); + qDebug() << "tableEvent position " << event->pos(); + qDebug() << "tableEvent global position " << event->globalPos(); - QPointF tabletPos = UBGeometryUtils::pointConstrainedInRect (event->hiResGlobalPos () - - mapToGlobal (QPoint (0, 0)), rect ()); - UBStylusTool::Enum currentTool = (UBStylusTool::Enum)dc->stylusTool (); + UBDrawingController *dc = UBDrawingController::drawingController (); - if (event->type () == QEvent::TabletPress || event->type () == QEvent::TabletEnterProximity) - { - if (event->pointerType () == QTabletEvent::Eraser) - { - dc->setStylusTool (UBStylusTool::Eraser); - mUsingTabletEraser = true; + QPointF tabletPos = UBGeometryUtils::pointConstrainedInRect (event->hiResGlobalPos () - mapToGlobal (QPoint (0, 0)), rect ()); + +// QPointF tabletPos = event->pos(); + + qDebug() << "tabletPos " << tabletPos; + + + UBStylusTool::Enum currentTool = (UBStylusTool::Enum)dc->stylusTool (); + + if (event->type () == QEvent::TabletPress || event->type () == QEvent::TabletEnterProximity) { + if (event->pointerType () == QTabletEvent::Eraser) { + dc->setStylusTool (UBStylusTool::Eraser); + mUsingTabletEraser = true; } - else - { - if (mUsingTabletEraser && currentTool == UBStylusTool::Eraser) - { - dc->setStylusTool (dc->latestDrawingTool ()); - } + else { + if (mUsingTabletEraser && currentTool == UBStylusTool::Eraser) + dc->setStylusTool (dc->latestDrawingTool ()); - mUsingTabletEraser = false; + mUsingTabletEraser = false; } } - // if event are not Pen events, we drop the tablet stuff and route everything through mouse event - if (currentTool != UBStylusTool::Pen - && currentTool != UBStylusTool::Line - && currentTool != UBStylusTool::Marker - && !mMarkerPressureSensitive) - { - event->setAccepted (false); - return; + // if event are not Pen events, we drop the tablet stuff and route everything through mouse event + if (currentTool != UBStylusTool::Pen && currentTool != UBStylusTool::Line && currentTool != UBStylusTool::Marker && !mMarkerPressureSensitive){ + event->setAccepted (false); + return; } - QPointF scenePos = viewportTransform ().inverted ().map (tabletPos); + QPointF scenePos = viewportTransform ().inverted ().map (tabletPos); + qDebug() << "scene Pos " << scenePos; - qreal pressure = 1.0; - if (((currentTool == UBStylusTool::Pen || currentTool == UBStylusTool::Line) - && mPenPressureSensitive) - || (currentTool == UBStylusTool::Marker && mMarkerPressureSensitive)) - { - pressure = event->pressure (); - } + qreal pressure = 1.0; + if (((currentTool == UBStylusTool::Pen || currentTool == UBStylusTool::Line) + && mPenPressureSensitive) + || (currentTool == UBStylusTool::Marker && mMarkerPressureSensitive)) + pressure = event->pressure (); - bool acceptEvent = true; - switch (event->type ()) - { - case QEvent::TabletPress: - { - mTabletStylusIsPressed = true; + bool acceptEvent = true; + + switch (event->type ()) { + case QEvent::TabletPress: { + qDebug() << "TabletPress"; - scene ()->inputDevicePress (scenePos, pressure); + mTabletStylusIsPressed = true; + scene()->inputDevicePress (scenePos, pressure); break; - } - case QEvent::TabletMove: - { + } + case QEvent::TabletMove: { + qDebug() << "TabletMove"; + if (mTabletStylusIsPressed) - { scene ()->inputDeviceMove (scenePos, pressure); - } acceptEvent = false; // rerouted to mouse move break; - } - case QEvent::TabletRelease: - { + } + case QEvent::TabletRelease: { + qDebug() << "TabletRelease"; + UBStylusTool::Enum currentTool = (UBStylusTool::Enum)dc->stylusTool (); scene ()->setToolCursor (currentTool); setToolCursor (currentTool); @@ -362,22 +358,21 @@ UBBoardView::tabletEvent (QTabletEvent * event) mMouseButtonIsPressed = false; break; - } - default: - { + } + default: { //NOOP - avoid compiler warning - } + } } - // ignore mouse press and mouse move tablet event so that it is rerouted to mouse events, - // documented in QTabletEvent Class Reference: - /* The event handler QWidget::tabletEvent() receives all three types of tablet events. + // ignore mouse press and mouse move tablet event so that it is rerouted to mouse events, + // documented in QTabletEvent Class Reference: + /* The event handler QWidget::tabletEvent() receives all three types of tablet events. Qt will first send a tabletEvent then, if it is not accepted, it will send a mouse event. */ - // - // This is a workaround to the fact that tablet event are not delivered to child widget (like palettes) - // + // + // This is a workaround to the fact that tablet event are not delivered to child widget (like palettes) + // - event->setAccepted (acceptEvent); + event->setAccepted (acceptEvent); } diff --git a/src/gui/UBDocumentThumbnailWidget.cpp b/src/gui/UBDocumentThumbnailWidget.cpp index 788ae05d..debeb9a1 100644 --- a/src/gui/UBDocumentThumbnailWidget.cpp +++ b/src/gui/UBDocumentThumbnailWidget.cpp @@ -26,9 +26,10 @@ UBDocumentThumbnailWidget::UBDocumentThumbnailWidget(QWidget* parent) : UBThumbnailWidget(parent) , mDropCaretRectItem(0) , mClosestDropItem(0) - , mDragEnabled(true) + , mDragEnabled(true), mScrollMagnitude(0) { - // NOOP + mScrollTimer = new QTimer(this); + connect(mScrollTimer, SIGNAL(timeout()), this, SLOT(autoScroll())); } @@ -96,13 +97,43 @@ void UBDocumentThumbnailWidget::dragEnterEvent(QDragEnterEvent *event) void UBDocumentThumbnailWidget::dragLeaveEvent(QDragLeaveEvent *event) { Q_UNUSED(event); + if (mScrollTimer->isActive()) + { + mScrollMagnitude = 0; + mScrollTimer->stop(); + } deleteDropCaret(); } +void UBDocumentThumbnailWidget::autoScroll() +{ + this->verticalScrollBar()->setValue(this->verticalScrollBar()->value() + mScrollMagnitude); +} + void UBDocumentThumbnailWidget::dragMoveEvent(QDragMoveEvent *event) { - QList pixmapItems; - foreach (QGraphicsItem *item, scene()->items(mapToScene(frameRect()))) + QRect boundingFrame = frameRect(); + //setting up automatic scrolling + const int SCROLL_DISTANCE = 16; + int bottomDist = boundingFrame.bottom() - event->pos().y(), topDist = boundingFrame.top() - event->pos().y(); + if(qAbs(bottomDist) <= SCROLL_DISTANCE) + { + mScrollMagnitude = (SCROLL_DISTANCE - bottomDist)*4; + if(verticalScrollBar()->isVisible() && !mScrollTimer->isActive()) mScrollTimer->start(100); + } + else if(qAbs(topDist) <= SCROLL_DISTANCE) + { + mScrollMagnitude = (- SCROLL_DISTANCE - topDist)*4; + if(verticalScrollBar()->isVisible() && !mScrollTimer->isActive()) mScrollTimer->start(100); + } + else + { + mScrollMagnitude = 0; + mScrollTimer->stop(); + } + + QList pixmapItems; + foreach (QGraphicsItem *item, scene()->items(mapToScene(boundingFrame))) { UBSceneThumbnailPixmap* sceneItem = dynamic_cast(item); if (sceneItem) @@ -161,9 +192,15 @@ void UBDocumentThumbnailWidget::dragMoveEvent(QDragMoveEvent *event) event->acceptProposedAction(); } + void UBDocumentThumbnailWidget::dropEvent(QDropEvent *event) { - deleteDropCaret(); + if (mScrollTimer->isActive()) + { + mScrollMagnitude = 0; + mScrollTimer->stop(); + } + deleteDropCaret(); if (mClosestDropItem) { diff --git a/src/gui/UBDocumentThumbnailWidget.h b/src/gui/UBDocumentThumbnailWidget.h index 2d24688f..adfe7c2d 100644 --- a/src/gui/UBDocumentThumbnailWidget.h +++ b/src/gui/UBDocumentThumbnailWidget.h @@ -41,6 +41,9 @@ class UBDocumentThumbnailWidget: public UBThumbnailWidget signals: void sceneDropped(UBDocumentProxy* proxy, int source, int target); + private slots: + void autoScroll(); + protected: virtual void mouseMoveEvent(QMouseEvent *event); @@ -57,6 +60,8 @@ class UBDocumentThumbnailWidget: public UBThumbnailWidget UBSceneThumbnailPixmap *mClosestDropItem; bool mDropIsRight; bool mDragEnabled; + QTimer* mScrollTimer; + int mScrollMagnitude; }; #endif /* UBDOCUMENTTHUMBNAILWIDGET_H_ */