QskGestureRecognizer::targetItem introduced
This commit is contained in:
parent
b73513eb1f
commit
2e980f087d
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue