Merge branch 'master' of github.com:Sankore/Sankore-3.1

preferencesAboutTextFull
Ivan Ilin 13 years ago
commit 104ce334d5
  1. 125
      src/board/UBBoardView.cpp
  2. 47
      src/gui/UBDocumentThumbnailWidget.cpp
  3. 5
      src/gui/UBDocumentThumbnailWidget.h

@ -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);
}

@ -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<UBSceneThumbnailPixmap*> 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<UBSceneThumbnailPixmap*> pixmapItems;
foreach (QGraphicsItem *item, scene()->items(mapToScene(boundingFrame)))
{
UBSceneThumbnailPixmap* sceneItem = dynamic_cast<UBSceneThumbnailPixmap*>(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)
{

@ -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_ */

Loading…
Cancel
Save