From e5d19a05f3aaed71169a77d79037771620a10517 Mon Sep 17 00:00:00 2001 From: MPIBR-kretschmerf Date: Wed, 26 Apr 2017 11:43:18 +0200 Subject: [PATCH] Moved boundaries check to ResizeHelper --- ResizeHelper.cpp | 28 ++++++++++++++++------------ ResizeHelper.h | 1 + TrackerPlugin_EyeTracker.cpp | 32 ++------------------------------ 3 files changed, 19 insertions(+), 42 deletions(-) diff --git a/ResizeHelper.cpp b/ResizeHelper.cpp index cea69f7..2bc8057 100644 --- a/ResizeHelper.cpp +++ b/ResizeHelper.cpp @@ -40,7 +40,7 @@ void ResizeHelper::paint(QPainter * p, const QStyleOptionGraphicsItem *, QWidget void ResizeHelper::mousePressEvent(QGraphicsSceneMouseEvent * ev) { m_edges = edgesAt(ev->pos(), m_rect, m_pen.widthF()); - if (!m_edges){ /*Moving: Store click location + if (!m_edges){ /*Moving: Store click location*/ //ev->ignore(); /*Ignore if moved*/ clickPos = ev->pos(); } @@ -48,34 +48,38 @@ void ResizeHelper::mousePressEvent(QGraphicsSceneMouseEvent * ev) { } void ResizeHelper::mouseMoveEvent(QGraphicsSceneMouseEvent * ev) { + auto pos = mapToItem(parentItem(), ev->pos()); auto rect = traits.rectFor(parentItem()); - - if (m_edges & Qt::LeftEdge) rect.setLeft(pos.x()); - if (m_edges & Qt::TopEdge) rect.setTop(pos.y()); - if (m_edges & Qt::RightEdge) rect.setRight(pos.x()); - if (m_edges & Qt::BottomEdge) rect.setBottom(pos.y()); if (!!m_edges) { - traits.setRectOn(parentItem(), rect); - newGeometry(); - }else{ /*Moving*/ - QPointF d = clickPos - ev->pos(); + /*Edge was clicked -> Resize*/ + if (m_edges & Qt::LeftEdge) rect.setLeft(pos.x()); + if (m_edges & Qt::TopEdge) rect.setTop(pos.y()); + if (m_edges & Qt::RightEdge) rect.setRight(pos.x()); + if (m_edges & Qt::BottomEdge) rect.setBottom(pos.y()); + }else{ /*No Edge clicked -> Moving*/ + QPointF d = clickPos - pos; rect.setLeft(rect.left()-d.x()); rect.setTop(rect.top()-d.y()); rect.setRight(rect.right()-d.x()); rect.setBottom(rect.bottom()-d.y()); + clickPos = pos; + } + + /*Make sure that rectangle is within predefined boundaries (if given)*/ + if ((!boundaries.isEmpty() & (boundaries.contains(rect))) | boundaries.isEmpty()){ traits.setRectOn(parentItem(), rect); newGeometry(); - clickPos = ev->pos(); + emit(itemChanged(parentItem())); } } void ResizeHelper::newGeometry() { + /*Propagate geometry change to bounding rectangle*/ prepareGeometryChange(); auto parentRect = traits.rectFor(parentItem()); m_rect.setTopLeft(mapFromParent(parentRect.topLeft())); m_rect.setBottomRight(mapFromParent(parentRect.bottomRight())); m_pen.setWidthF(std::min(m_rect.width(), m_rect.height()) * 0.1); m_pen.setJoinStyle(Qt::MiterJoin); - emit(itemChanged(parentItem())); } diff --git a/ResizeHelper.h b/ResizeHelper.h index 195006d..256e065 100644 --- a/ResizeHelper.h +++ b/ResizeHelper.h @@ -17,6 +17,7 @@ class ResizeHelper : public QGraphicsObject public: ResizeTraits traits; QRectF m_rect; + QRectF boundaries; QPen m_pen; QPointF clickPos; QFlags m_edges; diff --git a/TrackerPlugin_EyeTracker.cpp b/TrackerPlugin_EyeTracker.cpp index 445417e..7f21680 100644 --- a/TrackerPlugin_EyeTracker.cpp +++ b/TrackerPlugin_EyeTracker.cpp @@ -152,6 +152,7 @@ void TrackerPlugin_EyeTracker::initializeUI(QLayout *layout, QGraphicsScene *cam this->cameraScene = cameraScene; /*Make objects resizeable and moveable*/ + resizeHelper->boundaries = QRectF(0,0,cameraResolution.width(),cameraResolution.height()); cameraScene->addItem(resizeHelper); connect(cameraScene, SIGNAL(selectionChanged()), resizeHelper, SLOT(selectionChanged())); @@ -231,39 +232,10 @@ void TrackerPlugin_EyeTracker::onItemChanged(QGraphicsItem *item) /*If the resized object is a ROI rectangle created by this plugin*/ /*Send message*/ if(rectIdx >= 0){ - - /*Make sure that roi is within camera window*/ - QRectF rect = rectItems.at(rectIdx)->rect(); - if(rect.x() < 0){ - rect.setRight(rect.right() - rect.x()); - rect.setLeft(0); - }else if (rect.right() >= cameraResolution.width()){ - rect.setLeft(rect.left() + (cameraResolution.width() - rect.right())); - rect.setRight(cameraResolution.width()); - } - if(rect.y() < 0){ - rect.setBottom(rect.bottom() - rect.y()); - rect.setTop(0); - }else if (rect.bottom() >= cameraResolution.height()){ - rect.setTop(rect.top() + (cameraResolution.height() - rect.bottom())); - rect.setBottom(cameraResolution.height()); - } - if(rect.width()> cameraResolution.width()){ - rect.setLeft(0); - rect.setRight(cameraResolution.width()); - } - if(rect.height()>cameraResolution.height()){ - rect.setTop(0); - rect.setBottom(cameraResolution.height()); - } - - rectItems.at(rectIdx)->setRect(rect); - - emit(roiChanged(rectIdx, rect.toRect())); + emit(roiChanged(rectIdx, rectItems.at(rectIdx)->rect().toRect())); } } - void TrackerPlugin_EyeTracker::on_lineEdit_editingFinished() { wndLength = ui->lineEdit->text().toDouble();