Improve EnsureVisibleWithDelay feature.

Margins should to be scaled according to scene scale factor.

--HG--
branch : develop
This commit is contained in:
Roman Telezhynskyi 2017-10-29 13:46:58 +02:00
parent 09f3ba234c
commit f16d26b659
6 changed files with 29 additions and 22 deletions

View File

@ -478,7 +478,9 @@ void VToolSpline::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
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->EnsureVisibleWithDelay(QRectF(cursorPosition.x()-5, cursorPosition.y()-5, 10, 10), const qreal scale = SceneScale(scene());
view->EnsureVisibleWithDelay(QRectF(cursorPosition.x()-5/scale, cursorPosition.y()-5/scale, 10/scale,
10/scale),
VMainGraphicsView::scrollDelay); VMainGraphicsView::scrollDelay);
} }
} }

View File

@ -638,7 +638,9 @@ void VToolSplinePath::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
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->EnsureVisibleWithDelay(QRectF(cursorPosition.x()-5, cursorPosition.y()-5, 10, 10), const qreal scale = SceneScale(scene());
view->EnsureVisibleWithDelay(QRectF(cursorPosition.x()-5/scale, cursorPosition.y()-5/scale, 10/scale,
10/scale),
VMainGraphicsView::scrollDelay); VMainGraphicsView::scrollDelay);
} }
} }

View File

@ -195,8 +195,9 @@ QVariant VToolBasePoint::itemChange(QGraphicsItem::GraphicsItemChange change, co
{ {
if (VMainGraphicsView *view = qobject_cast<VMainGraphicsView *>(viewList.at(0))) if (VMainGraphicsView *view = qobject_cast<VMainGraphicsView *>(viewList.at(0)))
{ {
const int xmargin = 50; const qreal scale = SceneScale(scene());
const int ymargin = 50; const int xmargin = qCeil(50/scale);
const int ymargin = qCeil(50/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();
@ -213,7 +214,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->EnsureVisibleWithDelay(QRectF(cursorPosition.x()-5, cursorPosition.y()-5, 10, 10), view->EnsureVisibleWithDelay(QRectF(cursorPosition.x()-5/scale, cursorPosition.y()-5/scale,
10/scale, 10/scale),
VMainGraphicsView::scrollDelay); VMainGraphicsView::scrollDelay);
} }
} }

View File

@ -1030,8 +1030,9 @@ QVariant VToolSeamAllowance::itemChange(QGraphicsItem::GraphicsItemChange change
{ {
if (VMainGraphicsView *view = qobject_cast<VMainGraphicsView *>(viewList.at(0))) if (VMainGraphicsView *view = qobject_cast<VMainGraphicsView *>(viewList.at(0)))
{ {
const int xmargin = 50; const qreal scale = SceneScale(scene());
const int ymargin = 50; const int xmargin = qCeil(50/scale);
const int ymargin = qCeil(50/scale);
const QRectF viewRect = VMainGraphicsView::SceneVisibleArea(view); const QRectF viewRect = VMainGraphicsView::SceneVisibleArea(view);
const QRectF itemRect = mapToScene(boundingRect()|childrenBoundingRect()).boundingRect(); const QRectF itemRect = mapToScene(boundingRect()|childrenBoundingRect()).boundingRect();
@ -1048,7 +1049,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->EnsureVisibleWithDelay(QRectF(cursorPosition.x()-5, cursorPosition.y()-5, 10, 10), view->EnsureVisibleWithDelay(QRectF(cursorPosition.x()-5/scale, cursorPosition.y()-5/scale,
10/scale, 10/scale),
VMainGraphicsView::scrollDelay); VMainGraphicsView::scrollDelay);
} }
} }

View File

@ -178,11 +178,12 @@ QVariant VControlPointSpline::itemChange(QGraphicsItem::GraphicsItemChange chang
{ {
if (VMainGraphicsView *view = qobject_cast<VMainGraphicsView *>(viewList.at(0))) if (VMainGraphicsView *view = qobject_cast<VMainGraphicsView *>(viewList.at(0)))
{ {
const int xmargin = 50; const qreal scale = SceneScale(scene());
const int ymargin = 50; const int xmargin = qCeil(50/scale);
const int ymargin = qCeil(50/scale);
const QRectF viewRect = VMainGraphicsView::SceneVisibleArea(view); const QRectF viewRect = VMainGraphicsView::SceneVisibleArea(view);
const QRectF itemRect = mapToScene(boundingRect()).boundingRect(); const QRectF itemRect = sceneBoundingRect();
// If item's rect is bigger than view's rect ensureVisible works very unstable. // If item's rect is bigger than view's rect ensureVisible works very unstable.
if (itemRect.height() + 2*ymargin < viewRect.height() && if (itemRect.height() + 2*ymargin < viewRect.height() &&
@ -196,8 +197,10 @@ QVariant VControlPointSpline::itemChange(QGraphicsItem::GraphicsItemChange chang
// Ensure visible only small rect around a cursor // Ensure visible only small rect around a cursor
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->EnsureVisibleWithDelay(QRectF(cursorPosition.x()-5, cursorPosition.y()-5, 10, 10), view->EnsureVisibleWithDelay(QRectF(cursorPosition.x()-5/scale,
cursorPosition.y()-5/scale, 10/scale, 10/scale),
VMainGraphicsView::scrollDelay); VMainGraphicsView::scrollDelay);
} }
} }

View File

@ -47,6 +47,7 @@
#include "vmaingraphicsview.h" #include "vmaingraphicsview.h"
#include "global.h" #include "global.h"
#include "vscenepoint.h" #include "vscenepoint.h"
#include "../vmisc/vmath.h"
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
/** /**
@ -161,15 +162,9 @@ QVariant VGraphicsSimpleTextItem::itemChange(GraphicsItemChange change, const QV
{ {
if (VMainGraphicsView *view = qobject_cast<VMainGraphicsView *>(viewList.at(0))) if (VMainGraphicsView *view = qobject_cast<VMainGraphicsView *>(viewList.at(0)))
{ {
int xmargin = 50; const qreal scale = SceneScale(scene());
int ymargin = 50; int xmargin = qCeil(50/scale);
int ymargin = qCeil(50/scale);
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();
@ -187,7 +182,8 @@ QVariant VGraphicsSimpleTextItem::itemChange(GraphicsItemChange change, const QV
SCASSERT(currentScene) SCASSERT(currentScene)
const QPointF cursorPosition = currentScene->getScenePos(); const QPointF cursorPosition = currentScene->getScenePos();
view->EnsureVisibleWithDelay(QRectF(cursorPosition.x()-5, cursorPosition.y()-5, 10, 10), view->EnsureVisibleWithDelay(QRectF(cursorPosition.x()-5/scale, cursorPosition.y()-5/scale,
10/scale, 10/scale),
VMainGraphicsView::scrollDelay); VMainGraphicsView::scrollDelay);
} }
} }