From 1a75eb19d0116f7e1781a6c5af9c7a07a488f3d0 Mon Sep 17 00:00:00 2001 From: joshua Date: Tue, 4 Jan 2022 18:41:46 +0100 Subject: [PATCH] Graphics item handler is bigger when overred --- .../qetgraphicshandleritem.cpp | 40 +++++++++++++++++-- .../qetgraphicshandleritem.h | 19 +++++++-- 2 files changed, 53 insertions(+), 6 deletions(-) diff --git a/sources/QetGraphicsItemModeler/qetgraphicshandleritem.cpp b/sources/QetGraphicsItemModeler/qetgraphicshandleritem.cpp index 16c418e90..229f7b79d 100644 --- a/sources/QetGraphicsItemModeler/qetgraphicshandleritem.cpp +++ b/sources/QetGraphicsItemModeler/qetgraphicshandleritem.cpp @@ -19,6 +19,7 @@ #include #include #include +#include /** @brief QetGraphicsHandlerItem::QetGraphicsHandlerItem @@ -26,6 +27,7 @@ */ QetGraphicsHandlerItem::QetGraphicsHandlerItem(qreal size) { + setAcceptHoverEvents(true); setFlag(QGraphicsItem::ItemIgnoresTransformations); setSize(size); } @@ -33,9 +35,9 @@ QetGraphicsHandlerItem::QetGraphicsHandlerItem(qreal size) void QetGraphicsHandlerItem::setSize(qreal size) { prepareGeometryChange(); - m_size = size; - m_handler_rect.setRect(0-m_size/2, 0-m_size/2, m_size, m_size); - m_br.setRect(-1-m_size/2, -1-m_size/2, m_size+2, m_size+2); + m_current_size = m_original_size = size; + m_handler_rect.setRect(0-m_current_size/2, 0-m_current_size/2, m_current_size, m_current_size); + m_br.setRect(-1-m_current_size/2, -1-m_current_size/2, m_current_size+2, m_current_size+2); } /** @@ -84,6 +86,38 @@ void QetGraphicsHandlerItem::paint(QPainter *painter, painter->restore(); } +void QetGraphicsHandlerItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event) +{ + Q_UNUSED(event); + + auto animation_ = new QPropertyAnimation(this, "currentSize"); + animation_->setStartValue(m_original_size); + animation_->setEndValue(m_original_size*1.5); + animation_->setDuration(200); + animation_->setEasingCurve(QEasingCurve::OutBack); + animation_->start(QAbstractAnimation::DeleteWhenStopped); +} + +void QetGraphicsHandlerItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) +{ + Q_UNUSED(event); + + auto animation_ = new QPropertyAnimation(this, "currentSize"); + animation_->setStartValue(m_current_size); + animation_->setEndValue(m_original_size); + animation_->setDuration(200); + animation_->setEasingCurve(QEasingCurve::OutBack); + animation_->start(QAbstractAnimation::DeleteWhenStopped); +} + +void QetGraphicsHandlerItem::setCurrentSize(qreal size) +{ + prepareGeometryChange(); + m_current_size = size; + m_handler_rect.setRect(0-m_current_size/2, 0-m_current_size/2, m_current_size, m_current_size); + m_br.setRect(-1-m_current_size/2, -1-m_current_size/2, m_current_size+2, m_current_size+2); +} + /** @brief QetGraphicsHandlerItem::handlerForPoint @param points diff --git a/sources/QetGraphicsItemModeler/qetgraphicshandleritem.h b/sources/QetGraphicsItemModeler/qetgraphicshandleritem.h index e8a2b2884..fb0b0f143 100644 --- a/sources/QetGraphicsItemModeler/qetgraphicshandleritem.h +++ b/sources/QetGraphicsItemModeler/qetgraphicshandleritem.h @@ -18,7 +18,7 @@ #ifndef QETGRAPHICSHANDLERITEM_H #define QETGRAPHICSHANDLERITEM_H -#include +#include #include /** @@ -33,8 +33,12 @@ need to reimplement "sceneEventFilter" for create the modification behavior. */ -class QetGraphicsHandlerItem : public QGraphicsItem +class QetGraphicsHandlerItem : public QGraphicsObject { + Q_OBJECT + + Q_PROPERTY(qreal currentSize READ currentSize WRITE setCurrentSize) + public: QetGraphicsHandlerItem(qreal size = 10); void setSize(qreal size); @@ -45,15 +49,24 @@ class QetGraphicsHandlerItem : public QGraphicsItem void setColor(QColor color); + protected: void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; + void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override; + void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override; + + qreal currentSize() const {return m_current_size;} + void setCurrentSize(qreal size); + + private: QRectF m_handler_rect, m_br; - qreal m_size; + qreal m_current_size; + qreal m_original_size; QColor m_color; QPen m_pen;