Scrolling delay.
When object is close to edge of view Valentina begins scrolling scene to ensure that the object is visible. In many cases this happens to fast for user. As solution after correction Valentina will wait 80 milliseconds before procedding next move. This will give users enough time to react. Such delay is called only if view was scrolled. --HG-- branch : develop
This commit is contained in:
parent
da2cc857df
commit
08df3b4486
|
@ -425,12 +425,13 @@ void VToolSpline::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
|
||||||
const QList<QGraphicsView *> viewList = scene()->views();
|
const QList<QGraphicsView *> viewList = scene()->views();
|
||||||
if (not viewList.isEmpty())
|
if (not viewList.isEmpty())
|
||||||
{
|
{
|
||||||
if (QGraphicsView *view = viewList.at(0))
|
if (VMainGraphicsView *view = qobject_cast<VMainGraphicsView *>(viewList.at(0)))
|
||||||
{
|
{
|
||||||
VMainGraphicsScene *currentScene = qobject_cast<VMainGraphicsScene *>(scene());
|
VMainGraphicsScene *currentScene = qobject_cast<VMainGraphicsScene *>(scene());
|
||||||
SCASSERT(currentScene)
|
SCASSERT(currentScene)
|
||||||
const QPointF cursorPosition = currentScene->getScenePos();
|
const QPointF cursorPosition = currentScene->getScenePos();
|
||||||
view->ensureVisible(QRectF(cursorPosition.x()-5, cursorPosition.y()-5, 10, 10));
|
view->EnsureVisibleWithDelay(QRectF(cursorPosition.x()-5, cursorPosition.y()-5, 10, 10),
|
||||||
|
VMainGraphicsView::scrollDelay);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
changeFinished = true;
|
changeFinished = true;
|
||||||
|
|
|
@ -565,12 +565,13 @@ void VToolSplinePath::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
|
||||||
const QList<QGraphicsView *> viewList = scene()->views();
|
const QList<QGraphicsView *> viewList = scene()->views();
|
||||||
if (not viewList.isEmpty())
|
if (not viewList.isEmpty())
|
||||||
{
|
{
|
||||||
if (QGraphicsView *view = viewList.at(0))
|
if (VMainGraphicsView *view = qobject_cast<VMainGraphicsView *>(viewList.at(0)))
|
||||||
{
|
{
|
||||||
VMainGraphicsScene *currentScene = qobject_cast<VMainGraphicsScene *>(scene());
|
VMainGraphicsScene *currentScene = qobject_cast<VMainGraphicsScene *>(scene());
|
||||||
SCASSERT(currentScene)
|
SCASSERT(currentScene)
|
||||||
const QPointF cursorPosition = currentScene->getScenePos();
|
const QPointF cursorPosition = currentScene->getScenePos();
|
||||||
view->ensureVisible(QRectF(cursorPosition.x()-5, cursorPosition.y()-5, 10, 10));
|
view->EnsureVisibleWithDelay(QRectF(cursorPosition.x()-5, cursorPosition.y()-5, 10, 10),
|
||||||
|
VMainGraphicsView::scrollDelay);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
changeFinished = true;
|
changeFinished = true;
|
||||||
|
|
|
@ -193,7 +193,7 @@ QVariant VToolBasePoint::itemChange(QGraphicsItem::GraphicsItemChange change, co
|
||||||
const QList<QGraphicsView *> viewList = scene()->views();
|
const QList<QGraphicsView *> viewList = scene()->views();
|
||||||
if (not viewList.isEmpty())
|
if (not viewList.isEmpty())
|
||||||
{
|
{
|
||||||
if (QGraphicsView *view = viewList.at(0))
|
if (VMainGraphicsView *view = qobject_cast<VMainGraphicsView *>(viewList.at(0)))
|
||||||
{
|
{
|
||||||
const int xmargin = 50;
|
const int xmargin = 50;
|
||||||
const int ymargin = 50;
|
const int ymargin = 50;
|
||||||
|
@ -205,7 +205,7 @@ QVariant VToolBasePoint::itemChange(QGraphicsItem::GraphicsItemChange change, co
|
||||||
if (itemRect.height() + 2*ymargin < viewRect.height() &&
|
if (itemRect.height() + 2*ymargin < viewRect.height() &&
|
||||||
itemRect.width() + 2*xmargin < viewRect.width())
|
itemRect.width() + 2*xmargin < viewRect.width())
|
||||||
{
|
{
|
||||||
view->ensureVisible(itemRect, xmargin, ymargin);
|
view->EnsureVisibleWithDelay(itemRect, VMainGraphicsView::scrollDelay, xmargin, ymargin);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -213,7 +213,8 @@ QVariant VToolBasePoint::itemChange(QGraphicsItem::GraphicsItemChange change, co
|
||||||
VMainGraphicsScene *currentScene = qobject_cast<VMainGraphicsScene *>(scene());
|
VMainGraphicsScene *currentScene = qobject_cast<VMainGraphicsScene *>(scene());
|
||||||
SCASSERT(currentScene)
|
SCASSERT(currentScene)
|
||||||
const QPointF cursorPosition = currentScene->getScenePos();
|
const QPointF cursorPosition = currentScene->getScenePos();
|
||||||
view->ensureVisible(QRectF(cursorPosition.x()-5, cursorPosition.y()-5, 10, 10));
|
view->EnsureVisibleWithDelay(QRectF(cursorPosition.x()-5, cursorPosition.y()-5, 10, 10),
|
||||||
|
VMainGraphicsView::scrollDelay);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -914,7 +914,7 @@ QVariant VToolSeamAllowance::itemChange(QGraphicsItem::GraphicsItemChange change
|
||||||
const QList<QGraphicsView *> viewList = scene()->views();
|
const QList<QGraphicsView *> viewList = scene()->views();
|
||||||
if (not viewList.isEmpty())
|
if (not viewList.isEmpty())
|
||||||
{
|
{
|
||||||
if (QGraphicsView *view = viewList.at(0))
|
if (VMainGraphicsView *view = qobject_cast<VMainGraphicsView *>(viewList.at(0)))
|
||||||
{
|
{
|
||||||
const int xmargin = 50;
|
const int xmargin = 50;
|
||||||
const int ymargin = 50;
|
const int ymargin = 50;
|
||||||
|
@ -926,7 +926,7 @@ QVariant VToolSeamAllowance::itemChange(QGraphicsItem::GraphicsItemChange change
|
||||||
if (itemRect.height() + 2*ymargin < viewRect.height() &&
|
if (itemRect.height() + 2*ymargin < viewRect.height() &&
|
||||||
itemRect.width() + 2*xmargin < viewRect.width())
|
itemRect.width() + 2*xmargin < viewRect.width())
|
||||||
{
|
{
|
||||||
view->ensureVisible(itemRect, xmargin, ymargin);
|
view->EnsureVisibleWithDelay(itemRect, VMainGraphicsView::scrollDelay, xmargin, ymargin);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -934,7 +934,8 @@ QVariant VToolSeamAllowance::itemChange(QGraphicsItem::GraphicsItemChange change
|
||||||
VMainGraphicsScene *currentScene = qobject_cast<VMainGraphicsScene *>(scene());
|
VMainGraphicsScene *currentScene = qobject_cast<VMainGraphicsScene *>(scene());
|
||||||
SCASSERT(currentScene);
|
SCASSERT(currentScene);
|
||||||
const QPointF cursorPosition = currentScene->getScenePos();
|
const QPointF cursorPosition = currentScene->getScenePos();
|
||||||
view->ensureVisible(QRectF(cursorPosition.x()-5, cursorPosition.y()-5, 10, 10));
|
view->EnsureVisibleWithDelay(QRectF(cursorPosition.x()-5, cursorPosition.y()-5, 10, 10),
|
||||||
|
VMainGraphicsView::scrollDelay);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -176,7 +176,7 @@ QVariant VControlPointSpline::itemChange(QGraphicsItem::GraphicsItemChange chang
|
||||||
const QList<QGraphicsView *> viewList = scene()->views();
|
const QList<QGraphicsView *> viewList = scene()->views();
|
||||||
if (not viewList.isEmpty())
|
if (not viewList.isEmpty())
|
||||||
{
|
{
|
||||||
if (QGraphicsView *view = viewList.at(0))
|
if (VMainGraphicsView *view = qobject_cast<VMainGraphicsView *>(viewList.at(0)))
|
||||||
{
|
{
|
||||||
const int xmargin = 50;
|
const int xmargin = 50;
|
||||||
const int ymargin = 50;
|
const int ymargin = 50;
|
||||||
|
@ -188,7 +188,8 @@ QVariant VControlPointSpline::itemChange(QGraphicsItem::GraphicsItemChange chang
|
||||||
if (itemRect.height() + 2*ymargin < viewRect.height() &&
|
if (itemRect.height() + 2*ymargin < viewRect.height() &&
|
||||||
itemRect.width() + 2*xmargin < viewRect.width())
|
itemRect.width() + 2*xmargin < viewRect.width())
|
||||||
{
|
{
|
||||||
view->ensureVisible(itemRect, xmargin, ymargin);
|
view->EnsureVisibleWithDelay(itemRect, VMainGraphicsView::scrollDelay, xmargin,
|
||||||
|
ymargin);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -196,7 +197,8 @@ QVariant VControlPointSpline::itemChange(QGraphicsItem::GraphicsItemChange chang
|
||||||
VMainGraphicsScene *currentScene = qobject_cast<VMainGraphicsScene *>(scene());
|
VMainGraphicsScene *currentScene = qobject_cast<VMainGraphicsScene *>(scene());
|
||||||
SCASSERT(currentScene)
|
SCASSERT(currentScene)
|
||||||
const QPointF cursorPosition = currentScene->getScenePos();
|
const QPointF cursorPosition = currentScene->getScenePos();
|
||||||
view->ensureVisible(QRectF(cursorPosition.x()-5, cursorPosition.y()-5, 10, 10));
|
view->EnsureVisibleWithDelay(QRectF(cursorPosition.x()-5, cursorPosition.y()-5, 10, 10),
|
||||||
|
VMainGraphicsView::scrollDelay);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -138,10 +138,17 @@ QVariant VGraphicsSimpleTextItem::itemChange(GraphicsItemChange change, const QV
|
||||||
const QList<QGraphicsView *> viewList = scene()->views();
|
const QList<QGraphicsView *> viewList = scene()->views();
|
||||||
if (not viewList.isEmpty())
|
if (not viewList.isEmpty())
|
||||||
{
|
{
|
||||||
if (QGraphicsView *view = viewList.at(0))
|
if (VMainGraphicsView *view = qobject_cast<VMainGraphicsView *>(viewList.at(0)))
|
||||||
{
|
{
|
||||||
const int xmargin = 50;
|
int xmargin = 50;
|
||||||
const int ymargin = 50;
|
int ymargin = 50;
|
||||||
|
|
||||||
|
const int scale = qRound(SceneScale(scene()));
|
||||||
|
if (scale > 1)
|
||||||
|
{
|
||||||
|
xmargin /= scale;
|
||||||
|
ymargin /= scale;
|
||||||
|
}
|
||||||
|
|
||||||
const QRectF viewRect = VMainGraphicsView::SceneVisibleArea(view);
|
const QRectF viewRect = VMainGraphicsView::SceneVisibleArea(view);
|
||||||
const QRectF itemRect = mapToScene(boundingRect()).boundingRect();
|
const QRectF itemRect = mapToScene(boundingRect()).boundingRect();
|
||||||
|
@ -150,7 +157,7 @@ QVariant VGraphicsSimpleTextItem::itemChange(GraphicsItemChange change, const QV
|
||||||
if (itemRect.height() + 2*ymargin < viewRect.height() &&
|
if (itemRect.height() + 2*ymargin < viewRect.height() &&
|
||||||
itemRect.width() + 2*xmargin < viewRect.width())
|
itemRect.width() + 2*xmargin < viewRect.width())
|
||||||
{
|
{
|
||||||
view->ensureVisible(itemRect, xmargin, ymargin);
|
view->EnsureVisibleWithDelay(itemRect, VMainGraphicsView::scrollDelay, xmargin, ymargin);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -158,7 +165,9 @@ QVariant VGraphicsSimpleTextItem::itemChange(GraphicsItemChange change, const QV
|
||||||
VMainGraphicsScene *currentScene = qobject_cast<VMainGraphicsScene *>(scene());
|
VMainGraphicsScene *currentScene = qobject_cast<VMainGraphicsScene *>(scene());
|
||||||
SCASSERT(currentScene)
|
SCASSERT(currentScene)
|
||||||
const QPointF cursorPosition = currentScene->getScenePos();
|
const QPointF cursorPosition = currentScene->getScenePos();
|
||||||
view->ensureVisible(QRectF(cursorPosition.x()-5, cursorPosition.y()-5, 10, 10));
|
|
||||||
|
view->EnsureVisibleWithDelay(QRectF(cursorPosition.x()-5, cursorPosition.y()-5, 10, 10),
|
||||||
|
VMainGraphicsView::scrollDelay);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,6 +46,7 @@
|
||||||
#include <QWheelEvent>
|
#include <QWheelEvent>
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
#include <QDesktopWidget>
|
#include <QDesktopWidget>
|
||||||
|
#include <QThread>
|
||||||
|
|
||||||
#include "../vmisc/def.h"
|
#include "../vmisc/def.h"
|
||||||
#include "../vmisc/vmath.h"
|
#include "../vmisc/vmath.h"
|
||||||
|
@ -339,6 +340,8 @@ bool GraphicsViewZoom::StartHorizontalScrollings(QWheelEvent *wheel_event)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const unsigned long VMainGraphicsView::scrollDelay = 80;
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
/**
|
/**
|
||||||
* @brief VMainGraphicsView constructor.
|
* @brief VMainGraphicsView constructor.
|
||||||
|
@ -529,6 +532,34 @@ qreal VMainGraphicsView::MaxScale()
|
||||||
return maxSceneSize / screenSize;
|
return maxSceneSize / screenSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
void VMainGraphicsView::EnsureVisibleWithDelay(const QRectF &rect, unsigned long msecs, int xmargin, int ymargin)
|
||||||
|
{
|
||||||
|
const int hbar = horizontalScrollBar()->value();
|
||||||
|
const int vbar = verticalScrollBar()->value();
|
||||||
|
|
||||||
|
ensureVisible(rect, xmargin, ymargin);
|
||||||
|
|
||||||
|
if (hbar != horizontalScrollBar()->value() || vbar != verticalScrollBar()->value())
|
||||||
|
{
|
||||||
|
QThread::msleep(msecs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
void VMainGraphicsView::EnsureVisibleWithDelay(const QGraphicsItem *item, unsigned long msecs, int xmargin, int ymargin)
|
||||||
|
{
|
||||||
|
const int hbar = horizontalScrollBar()->value();
|
||||||
|
const int vbar = verticalScrollBar()->value();
|
||||||
|
|
||||||
|
ensureVisible(item, xmargin, ymargin);
|
||||||
|
|
||||||
|
if (hbar != horizontalScrollBar()->value() || vbar != verticalScrollBar()->value())
|
||||||
|
{
|
||||||
|
QThread::msleep(msecs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
void VMainGraphicsView::setShowToolOptions(bool value)
|
void VMainGraphicsView::setShowToolOptions(bool value)
|
||||||
{
|
{
|
||||||
|
|
|
@ -124,6 +124,11 @@ public:
|
||||||
static qreal MinScale();
|
static qreal MinScale();
|
||||||
static qreal MaxScale();
|
static qreal MaxScale();
|
||||||
|
|
||||||
|
void EnsureVisibleWithDelay(const QRectF &rect, unsigned long msecs, int xmargin = 50, int ymargin = 50);
|
||||||
|
void EnsureVisibleWithDelay(const QGraphicsItem *item, unsigned long msecs, int xmargin = 50, int ymargin = 50);
|
||||||
|
|
||||||
|
static const unsigned long scrollDelay;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
/**
|
/**
|
||||||
* @brief MouseRelease help catch mouse release event.
|
* @brief MouseRelease help catch mouse release event.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user