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();
}
QQuickItem* watchedItem = nullptr;
QPointer< QQuickItem > watchedItem = nullptr;
QPointer< QQuickItem > targetItem = nullptr;
QVector< QMouseEvent* > pendingEvents;
@ -121,6 +122,16 @@ QQuickItem* QskGestureRecognizer::watchedItem() const
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 )
{
m_data->buttons = buttons;

View File

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

View File

@ -61,9 +61,14 @@ static inline qreal qskAngle(
}
static void qskSendPanGestureEvent(
QQuickItem* item, QskGesture::State state, qreal velocity, qreal angle,
const QPointF& origin, const QPointF& lastPosition, const QPointF& position )
QskGestureRecognizer* recognizer, QskGesture::State state,
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 >();
gesture->setState( state );
@ -244,12 +249,12 @@ void QskPanGestureRecognizer::processMove( const QPointF& pos, quint64 timestamp
if ( started )
{
qskSendPanGestureEvent( watchedItem(), QskGesture::Started,
qskSendPanGestureEvent( this, QskGesture::Started,
velocity, m_data->angle, m_data->origin, m_data->origin, m_data->pos );
}
else
{
qskSendPanGestureEvent( watchedItem(), QskGesture::Updated,
qskSendPanGestureEvent( this, QskGesture::Updated,
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 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 );
}
}

View File

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