diff --git a/src/controls/QskEvent.cpp b/src/controls/QskEvent.cpp index 9bcd2b4b..84230353 100644 --- a/src/controls/QskEvent.cpp +++ b/src/controls/QskEvent.cpp @@ -86,6 +86,14 @@ QskEvent::QskEvent( QskEvent::Type type ) { } +#if QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) + +QskEvent* QskEvent::clone() const +{ + return new QskEvent( *this ); +} + +#endif // -- QskGeometryChangeEvent QskGeometryChangeEvent::QskGeometryChangeEvent( @@ -96,6 +104,11 @@ QskGeometryChangeEvent::QskGeometryChangeEvent( { } +QskGeometryChangeEvent* QskGeometryChangeEvent::clone() const +{ + return new QskGeometryChangeEvent( *this ); +} + bool QskGeometryChangeEvent::isResized() const { return ( m_rect.width() != m_oldRect.width() ) || @@ -118,6 +131,11 @@ QskWindowChangeEvent::QskWindowChangeEvent( { } +QskWindowChangeEvent* QskWindowChangeEvent::clone() const +{ + return new QskWindowChangeEvent( *this ); +} + // -- QskPopupEvent QskPopupEvent::QskPopupEvent( Type type, QskPopup* popup ) @@ -126,20 +144,17 @@ QskPopupEvent::QskPopupEvent( Type type, QskPopup* popup ) { } -// -- QskGestureEvent - -QskGestureEvent::QskGestureEvent( - const QskGesture* gesture, bool ownedByEvent ) - : QskEvent( QskEvent::Gesture ) - , m_gesture( gesture ) - , m_gestureOwnedByEvent( ownedByEvent ) +QskPopupEvent* QskPopupEvent::clone() const { + return new QskPopupEvent( *this ); } -QskGestureEvent::~QskGestureEvent() +// -- QskGestureEvent + +QskGestureEvent::QskGestureEvent( const QskGesture* gesture ) + : QskEvent( QskEvent::Gesture ) + , m_gesture( gesture ) { - if ( m_gestureOwnedByEvent ) - delete m_gesture; } // -- QskAnimatorEvent @@ -151,6 +166,7 @@ QskAnimatorEvent::QskAnimatorEvent( QskAspect::Aspect aspect, State state ) { } -QskAnimatorEvent::~QskAnimatorEvent() +QskAnimatorEvent* QskAnimatorEvent::clone() const { + return new QskAnimatorEvent( *this ); } diff --git a/src/controls/QskEvent.h b/src/controls/QskEvent.h index 3fb8fea1..e913168b 100644 --- a/src/controls/QskEvent.h +++ b/src/controls/QskEvent.h @@ -10,6 +10,7 @@ #include #include +#include class QskGesture; class QskPopup; @@ -45,6 +46,11 @@ class QSK_EXPORT QskEvent : public QEvent }; QskEvent( QskEvent::Type type ); + +#if QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) + virtual QskEvent *clone() const; +#endif + }; class QSK_EXPORT QskGeometryChangeEvent : public QskEvent @@ -58,6 +64,8 @@ class QSK_EXPORT QskGeometryChangeEvent : public QskEvent bool isResized() const; bool isMoved() const; + QskGeometryChangeEvent* clone() const override; + private: const QRectF m_rect; const QRectF m_oldRect; @@ -71,6 +79,8 @@ class QSK_EXPORT QskWindowChangeEvent : public QskEvent inline QQuickWindow* window() const { return m_window; } inline QQuickWindow* oldWindow() const { return m_oldWindow; } + QskWindowChangeEvent* clone() const override; + private: QQuickWindow* const m_oldWindow; QQuickWindow* const m_window; @@ -83,6 +93,8 @@ class QSK_EXPORT QskPopupEvent : public QskEvent inline QskPopup* popup() const { return m_popup; } + QskPopupEvent* clone() const override; + private: QskPopup* const m_popup; }; @@ -90,15 +102,12 @@ class QSK_EXPORT QskPopupEvent : public QskEvent class QSK_EXPORT QskGestureEvent : public QskEvent { public: - QskGestureEvent( const QskGesture* gesture, bool ownedByEvent = true ); - ~QskGestureEvent() override; + QskGestureEvent( const QskGesture* gesture ); inline const QskGesture* gesture() const { return m_gesture; } - inline bool isGestureOwnedByEvent() const { return m_gestureOwnedByEvent; } private: const QskGesture* m_gesture; - bool m_gestureOwnedByEvent; }; class QSK_EXPORT QskAnimatorEvent : public QskEvent @@ -111,11 +120,12 @@ class QSK_EXPORT QskAnimatorEvent : public QskEvent }; QskAnimatorEvent( QskAspect::Aspect aspect, State state ); - ~QskAnimatorEvent() override; inline QskAspect::Aspect aspect() const { return m_aspect; } inline State state() const { return m_state; } + QskAnimatorEvent* clone() const override; + private: const QskAspect::Aspect m_aspect; const State m_state; diff --git a/src/controls/QskPanGestureRecognizer.cpp b/src/controls/QskPanGestureRecognizer.cpp index 0cd25664..7fb9dbc2 100644 --- a/src/controls/QskPanGestureRecognizer.cpp +++ b/src/controls/QskPanGestureRecognizer.cpp @@ -58,17 +58,17 @@ static void qskSendPanGestureEvent( QQuickItem* item, QskGesture::State state, qreal velocity, qreal angle, const QPointF& origin, const QPointF& lastPosition, const QPointF& position ) { - QskPanGesture gesture; - gesture.setState( state ); + auto gesture = new QskPanGesture(); + gesture->setState( state ); - gesture.setAngle( angle ); - gesture.setVelocity( velocity ); + gesture->setAngle( angle ); + gesture->setVelocity( velocity ); - gesture.setOrigin( origin ); - gesture.setLastPosition( lastPosition ); - gesture.setPosition( position ); + gesture->setOrigin( origin ); + gesture->setLastPosition( lastPosition ); + gesture->setPosition( position ); - QskGestureEvent event( &gesture, false ); + QskGestureEvent event( gesture ); QCoreApplication::sendEvent( item, &event ); }