QskSkinlet::itemIndexAt introduced
This commit is contained in:
parent
34641e4860
commit
1930810070
|
@ -238,18 +238,6 @@ void QskMenu::traverse( int steps )
|
||||||
Q_EMIT currentIndexChanged( index );
|
Q_EMIT currentIndexChanged( index );
|
||||||
}
|
}
|
||||||
|
|
||||||
int QskMenu::indexAtPosition( const QPointF& pos ) const
|
|
||||||
{
|
|
||||||
for ( int i = 0; i < count(); i++ )
|
|
||||||
{
|
|
||||||
// A menu never has many cells and we can simply iterate
|
|
||||||
if ( cellRect( i ).contains( pos ) )
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
QskColorFilter QskMenu::graphicFilterAt( int index ) const
|
QskColorFilter QskMenu::graphicFilterAt( int index ) const
|
||||||
{
|
{
|
||||||
Q_UNUSED( index );
|
Q_UNUSED( index );
|
||||||
|
@ -314,4 +302,10 @@ QRectF QskMenu::cellRect( int index ) const
|
||||||
this, contentsRect(), QskMenu::Cell, index );
|
this, contentsRect(), QskMenu::Cell, index );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int QskMenu::indexAtPosition( const QPointF& pos ) const
|
||||||
|
{
|
||||||
|
return effectiveSkinlet()->itemIndexAt(
|
||||||
|
this, contentsRect(), QskMenu::Cell, pos );
|
||||||
|
}
|
||||||
|
|
||||||
#include "moc_QskMenu.cpp"
|
#include "moc_QskMenu.cpp"
|
||||||
|
|
|
@ -50,7 +50,6 @@ class QSK_EXPORT QskMenu : public QskPopup
|
||||||
|
|
||||||
void addSeparator();
|
void addSeparator();
|
||||||
|
|
||||||
int indexAtPosition( const QPointF& ) const;
|
|
||||||
|
|
||||||
Entry entryAt( int index ) const;
|
Entry entryAt( int index ) const;
|
||||||
QskGraphic graphicAt( int index ) const;
|
QskGraphic graphicAt( int index ) const;
|
||||||
|
@ -65,6 +64,7 @@ class QSK_EXPORT QskMenu : public QskPopup
|
||||||
QRectF focusIndicatorRect() const override;
|
QRectF focusIndicatorRect() const override;
|
||||||
|
|
||||||
QRectF cellRect( int index ) const;
|
QRectF cellRect( int index ) const;
|
||||||
|
int indexAtPosition( const QPointF& ) const;
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void triggered( int index );
|
void triggered( int index );
|
||||||
|
|
|
@ -271,6 +271,41 @@ QRectF QskMenuSkinlet::itemRect(
|
||||||
skinnable, contentsRect, subControl, index );
|
skinnable, contentsRect, subControl, index );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int QskMenuSkinlet::itemIndexAt( const QskSkinnable* skinnable,
|
||||||
|
const QRectF& rect, QskAspect::Subcontrol subControl, const QPointF& pos ) const
|
||||||
|
{
|
||||||
|
if ( subControl == QskMenu::Cell )
|
||||||
|
{
|
||||||
|
const auto menu = static_cast< const QskMenu* >( skinnable );
|
||||||
|
|
||||||
|
const auto panelRect = menu->subControlContentsRect( QskMenu::Panel );
|
||||||
|
if ( !panelRect.contains( pos ) )
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
/*
|
||||||
|
A menu never has many items and we can simply iterate
|
||||||
|
without being concerned about performance issues
|
||||||
|
*/
|
||||||
|
|
||||||
|
const auto h = qskCellHeight( menu );
|
||||||
|
|
||||||
|
auto r = panelRect;
|
||||||
|
r.setHeight( h );
|
||||||
|
|
||||||
|
for ( int i = 0; i < menu->count(); i++ )
|
||||||
|
{
|
||||||
|
if ( r.contains( pos ) )
|
||||||
|
return i;
|
||||||
|
|
||||||
|
r.moveTop( r.bottom() );
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Inherited::itemIndexAt( skinnable, rect, subControl, pos );
|
||||||
|
}
|
||||||
|
|
||||||
QSGNode* QskMenuSkinlet::updateContentsNode(
|
QSGNode* QskMenuSkinlet::updateContentsNode(
|
||||||
const QskPopup* popup, QSGNode* contentsNode ) const
|
const QskPopup* popup, QSGNode* contentsNode ) const
|
||||||
{
|
{
|
||||||
|
|
|
@ -24,7 +24,10 @@ class QSK_EXPORT QskMenuSkinlet : public QskPopupSkinlet
|
||||||
const QRectF&, QskAspect::Subcontrol ) const override;
|
const QRectF&, QskAspect::Subcontrol ) const override;
|
||||||
|
|
||||||
QRectF itemRect( const QskSkinnable*,
|
QRectF itemRect( const QskSkinnable*,
|
||||||
const QRectF&, QskAspect::Subcontrol, int index ) const override;
|
const QRectF&, QskAspect::Subcontrol, int itemIndex ) const override;
|
||||||
|
|
||||||
|
int itemIndexAt( const QskSkinnable*,
|
||||||
|
const QRectF&, QskAspect::Subcontrol, const QPointF& ) const override;
|
||||||
|
|
||||||
QSizeF sizeHint( const QskSkinnable*,
|
QSizeF sizeHint( const QskSkinnable*,
|
||||||
Qt::SizeHint, const QSizeF& ) const override;
|
Qt::SizeHint, const QSizeF& ) const override;
|
||||||
|
|
|
@ -581,6 +581,12 @@ QSizeF QskSkinlet::hintWithoutConstraint(
|
||||||
return h;
|
return h;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int QskSkinlet::itemIndexAt( const QskSkinnable*,
|
||||||
|
const QRectF&, QskAspect::Subcontrol, const QPointF& ) const
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
QRectF QskSkinlet::itemRect( const QskSkinnable*,
|
QRectF QskSkinlet::itemRect( const QskSkinnable*,
|
||||||
const QRectF&, QskAspect::Subcontrol, int index ) const
|
const QRectF&, QskAspect::Subcontrol, int index ) const
|
||||||
{
|
{
|
||||||
|
|
|
@ -36,14 +36,17 @@ class QSK_EXPORT QskSkinlet
|
||||||
|
|
||||||
virtual void updateNode( QskSkinnable*, QSGNode* parent ) const;
|
virtual void updateNode( QskSkinnable*, QSGNode* parent ) const;
|
||||||
|
|
||||||
|
virtual QSizeF sizeHint( const QskSkinnable*,
|
||||||
|
Qt::SizeHint, const QSizeF& ) const;
|
||||||
|
|
||||||
virtual QRectF subControlRect( const QskSkinnable*,
|
virtual QRectF subControlRect( const QskSkinnable*,
|
||||||
const QRectF&, QskAspect::Subcontrol ) const;
|
const QRectF&, QskAspect::Subcontrol ) const;
|
||||||
|
|
||||||
virtual QRectF itemRect( const QskSkinnable*,
|
virtual QRectF itemRect( const QskSkinnable*,
|
||||||
const QRectF&, QskAspect::Subcontrol, int index ) const;
|
const QRectF&, QskAspect::Subcontrol, int itemIndex ) const;
|
||||||
|
|
||||||
virtual QSizeF sizeHint( const QskSkinnable*,
|
virtual int itemIndexAt( const QskSkinnable*,
|
||||||
Qt::SizeHint, const QSizeF& ) const;
|
const QRectF&, QskAspect::Subcontrol, const QPointF& ) const;
|
||||||
|
|
||||||
const QVector< quint8 >& nodeRoles() const;
|
const QVector< quint8 >& nodeRoles() const;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue