QskGestureRecognizer::targetItem introduced

This commit is contained in:
Uwe Rathmann 2023-10-09 10:37:07 +02:00
parent b73513eb1f
commit 2e980f087d
4 changed files with 30 additions and 8 deletions

View File

@ -68,7 +68,8 @@ class QskGestureRecognizer::PrivateData
return watchedItem->acceptedMouseButtons(); return watchedItem->acceptedMouseButtons();
} }
QQuickItem* watchedItem = nullptr; QPointer< QQuickItem > watchedItem = nullptr;
QPointer< QQuickItem > targetItem = nullptr;
QVector< QMouseEvent* > pendingEvents; QVector< QMouseEvent* > pendingEvents;
@ -121,6 +122,16 @@ QQuickItem* QskGestureRecognizer::watchedItem() const
return m_data->watchedItem; return m_data->watchedItem;
} }
void QskGestureRecognizer::setTargetItem( QQuickItem* item )
{
m_data->targetItem = item;
}
QQuickItem* QskGestureRecognizer::targetItem() const
{
return m_data->targetItem;
}
void QskGestureRecognizer::setAcceptedMouseButtons( Qt::MouseButtons buttons ) void QskGestureRecognizer::setAcceptedMouseButtons( Qt::MouseButtons buttons )
{ {
m_data->buttons = buttons; m_data->buttons = buttons;

View File

@ -43,11 +43,16 @@ class QSK_EXPORT QskGestureRecognizer : public QObject
QskGestureRecognizer( QObject* parent = nullptr ); QskGestureRecognizer( QObject* parent = nullptr );
~QskGestureRecognizer() override; ~QskGestureRecognizer() override;
bool eventFilter( QObject* object, QEvent* event) override; bool eventFilter( QObject*, QEvent* ) override;
// the item where the gesture happens
void setWatchedItem( QQuickItem* ); void setWatchedItem( QQuickItem* );
QQuickItem* watchedItem() const; QQuickItem* watchedItem() const;
// the item processing the gesture events
void setTargetItem( QQuickItem* );
QQuickItem* targetItem() const;
// Qt::NoButton means: all buttons accepted // Qt::NoButton means: all buttons accepted
void setAcceptedMouseButtons( Qt::MouseButtons ); void setAcceptedMouseButtons( Qt::MouseButtons );
Qt::MouseButtons acceptedMouseButtons() const; Qt::MouseButtons acceptedMouseButtons() const;

View File

@ -61,9 +61,14 @@ static inline qreal qskAngle(
} }
static void qskSendPanGestureEvent( static void qskSendPanGestureEvent(
QQuickItem* item, QskGesture::State state, qreal velocity, qreal angle, QskGestureRecognizer* recognizer, QskGesture::State state,
const QPointF& origin, const QPointF& lastPosition, const QPointF& position ) qreal velocity, qreal angle, const QPointF& origin,
const QPointF& lastPosition, const QPointF& position )
{ {
auto item = recognizer->targetItem();
if ( item == nullptr )
item = recognizer->watchedItem();
auto gesture = std::make_shared< QskPanGesture >(); auto gesture = std::make_shared< QskPanGesture >();
gesture->setState( state ); gesture->setState( state );
@ -244,12 +249,12 @@ void QskPanGestureRecognizer::processMove( const QPointF& pos, quint64 timestamp
if ( started ) if ( started )
{ {
qskSendPanGestureEvent( watchedItem(), QskGesture::Started, qskSendPanGestureEvent( this, QskGesture::Started,
velocity, m_data->angle, m_data->origin, m_data->origin, m_data->pos ); velocity, m_data->angle, m_data->origin, m_data->origin, m_data->pos );
} }
else else
{ {
qskSendPanGestureEvent( watchedItem(), QskGesture::Updated, qskSendPanGestureEvent( this, QskGesture::Updated,
velocity, m_data->angle, m_data->origin, oldPos, m_data->pos ); velocity, m_data->angle, m_data->origin, oldPos, m_data->pos );
} }
} }
@ -262,7 +267,7 @@ void QskPanGestureRecognizer::processRelease( const QPointF&, quint64 timestamp
const ulong elapsedTotal = timestamp - timestampStarted(); const ulong elapsedTotal = timestamp - timestampStarted();
const qreal velocity = m_data->velocityTracker.velocity( elapsedTotal ); const qreal velocity = m_data->velocityTracker.velocity( elapsedTotal );
qskSendPanGestureEvent( watchedItem(), QskGesture::Finished, qskSendPanGestureEvent( this, QskGesture::Finished,
velocity, m_data->angle, m_data->origin, m_data->pos, m_data->pos ); velocity, m_data->angle, m_data->origin, m_data->pos, m_data->pos );
} }
} }

View File

@ -23,11 +23,12 @@ class QSK_EXPORT QskPanGestureRecognizer : public QskGestureRecognizer
void setOrientations( Qt::Orientations ); void setOrientations( Qt::Orientations );
Qt::Orientations orientations() const; Qt::Orientations orientations() const;
private: protected:
void processPress( const QPointF&, quint64 timestamp, bool isFinal ) override; void processPress( const QPointF&, quint64 timestamp, bool isFinal ) override;
void processMove( const QPointF&, quint64 timestamp ) override; void processMove( const QPointF&, quint64 timestamp ) override;
void processRelease( const QPointF&, quint64 timestamp ) override; void processRelease( const QPointF&, quint64 timestamp ) override;
private:
class PrivateData; class PrivateData;
std::unique_ptr< PrivateData > m_data; std::unique_ptr< PrivateData > m_data;
}; };