suing QskMenu::Segement instead of Qskmenu::Cell to be in line with other

controls
This commit is contained in:
Uwe Rathmann 2022-04-20 13:58:53 +02:00
parent 22060f6aaf
commit e689575510
5 changed files with 60 additions and 61 deletions

View File

@ -247,9 +247,9 @@ void Editor::setupMenu()
setBoxBorderMetrics( Q::Separator, 0 );
setGradient( Q::Separator, m_pal.darker125 );
setPadding( Q::Cell, QskMargins( 2, 10, 2, 10 ) );
setSpacing( Q::Cell, 5 );
setGradient( Q::Cell, Qt::transparent );
setPadding( Q::Segment, QskMargins( 2, 10, 2, 10 ) );
setSpacing( Q::Segment, 5 );
setGradient( Q::Segment, Qt::transparent );
setGradient( Q::Cursor, m_pal.accentColor );

View File

@ -346,9 +346,9 @@ void Editor::setupMenu()
setMetric( Q::Separator | A::Size, qskDpiScaled( 2 ) );
setSeparator( Q::Separator | A::Horizontal );
setPadding( Q::Cell, QskMargins( 2, 10, 2, 10 ) );
setSpacing( Q::Cell, 5 );
setGradient( Q::Cell, Qt::transparent );
setPadding( Q::Segment, QskMargins( 2, 10, 2, 10 ) );
setSpacing( Q::Segment, 5 );
setGradient( Q::Segment, Qt::transparent );
setGradient( Q::Cursor, m_pal.highlighted );

View File

@ -13,7 +13,7 @@
#include <qeventloop.h>
QSK_SUBCONTROL( QskMenu, Panel )
QSK_SUBCONTROL( QskMenu, Cell )
QSK_SUBCONTROL( QskMenu, Segment )
QSK_SUBCONTROL( QskMenu, Cursor )
QSK_SUBCONTROL( QskMenu, Text )
QSK_SUBCONTROL( QskMenu, Graphic )
@ -30,8 +30,11 @@ namespace
: graphicSource( graphicSource )
, text( text )
{
#if 1
// lazy loading TODO ...
if( !graphicSource.isEmpty() )
graphic = Qsk::loadGraphic( graphicSource );
#endif
}
QUrl graphicSource;
@ -287,19 +290,16 @@ void QskMenu::traverse( int steps )
if ( newIndex < 0 )
newIndex += count();
if ( hasAnimationHint( Cursor | QskAspect::Position | QskAspect::Metric ) )
{
// when cycling we want slide in
// when cycling we want slide in
if ( index < 0 )
setPositionHint( Cursor, count() );
int startIndex = m_data->currentIndex;
if ( index >= count() )
setPositionHint( Cursor, -1 );
movePositionHint( Cursor, newIndex );
}
if ( index < 0 )
startIndex = count();
else if ( index >= count() )
startIndex = -1;
movePositionHint( Cursor, startIndex, newIndex );
setCurrentIndex( newIndex );
}
@ -374,13 +374,13 @@ void QskMenu::setSelectedIndex( int index )
QRectF QskMenu::cellRect( int index ) const
{
return effectiveSkinlet()->sampleRect(
this, contentsRect(), QskMenu::Cell, index );
this, contentsRect(), QskMenu::Segment, index );
}
int QskMenu::indexAtPosition( const QPointF& pos ) const
{
return effectiveSkinlet()->sampleIndexAt(
this, contentsRect(), QskMenu::Cell, pos );
this, contentsRect(), QskMenu::Segment, pos );
}
int QskMenu::exec()

View File

@ -32,7 +32,7 @@ class QSK_EXPORT QskMenu : public QskPopup
using Inherited = QskPopup;
public:
QSK_SUBCONTROLS( Panel, Cell, Cursor, Text, Graphic, Separator )
QSK_SUBCONTROLS( Panel, Segment, Cursor, Text, Graphic, Separator )
QSK_STATES( Selected )
QskMenu( QQuickItem* parentItem = nullptr );
@ -45,7 +45,7 @@ class QSK_EXPORT QskMenu : public QskPopup
void setOrigin( const QPointF& );
QPointF origin() const;
void setTextOptions( const QskTextOptions& textOptions );
void setTextOptions( const QskTextOptions& );
QskTextOptions textOptions() const;
// insert, remove, functors, actions, QskGraphic ...

View File

@ -9,7 +9,6 @@
#include <QskTextOptions.h>
#include <QskSGNode.h>
#include <QskFunctions.h>
#include <QskSkinStateChanger.h>
#include <QskMargins.h>
#include <QskFunctions.h>
@ -60,7 +59,7 @@ class QskMenuSkinlet::PrivateData
void enableCache( bool on )
{
m_isCaching = on;
m_cellHeight = m_cellWidth = m_graphicWidth = m_textWidth = -1.0;
m_segmentHeight = m_segmentWidth = m_graphicWidth = m_textWidth = -1.0;
}
inline int separatorsBefore( const QskMenu* menu, int index ) const
@ -101,30 +100,30 @@ class QskMenuSkinlet::PrivateData
return textWidthInternal( menu );
}
inline qreal cellWidth( const QskMenu* menu ) const
inline qreal segmentWidth( const QskMenu* menu ) const
{
if ( m_isCaching )
{
if ( m_cellWidth < 0.0 )
m_cellWidth = cellWidthInternal( menu );
if ( m_segmentWidth < 0.0 )
m_segmentWidth = segmentWidthInternal( menu );
return m_cellWidth;
return m_segmentWidth;
}
return cellWidthInternal( menu );
return segmentWidthInternal( menu );
}
inline qreal cellHeight( const QskMenu* menu ) const
inline qreal segmentHeight( const QskMenu* menu ) const
{
if ( m_isCaching )
{
if ( m_cellHeight < 0.0 )
m_cellHeight = cellHeightInternal( menu );
if ( m_segmentHeight < 0.0 )
m_segmentHeight = segmentHeightInternal( menu );
return m_cellHeight;
return m_segmentHeight;
}
return cellHeightInternal( menu );
return segmentHeightInternal( menu );
}
private:
@ -182,33 +181,33 @@ class QskMenuSkinlet::PrivateData
return maxWidth;
}
qreal cellWidthInternal( const QskMenu* menu ) const
qreal segmentWidthInternal( const QskMenu* menu ) const
{
using Q = QskMenu;
const auto spacing = menu->spacingHint( Q::Cell );
const auto padding = menu->paddingHint( Q::Cell );
const auto spacing = menu->spacingHint( Q::Segment );
const auto padding = menu->paddingHint( Q::Segment );
auto w = graphicWidth( menu ) + spacing + textWidth( menu );
w += padding.left() + padding.right();
const auto minWidth = menu->strutSizeHint( Q::Cell ).width();
const auto minWidth = menu->strutSizeHint( Q::Segment ).width();
return qMax( w, minWidth );
}
qreal cellHeightInternal( const QskMenu* menu ) const
qreal segmentHeightInternal( const QskMenu* menu ) const
{
using Q = QskMenu;
const auto graphicHeight = menu->strutSizeHint( Q::Graphic ).height();
const auto textHeight = menu->effectiveFontHeight( Q::Text );
const auto padding = menu->paddingHint( Q::Cell );
const auto padding = menu->paddingHint( Q::Segment );
qreal h = qMax( graphicHeight, textHeight );
h += padding.top() + padding.bottom();
const auto minHeight = menu->strutSizeHint( Q::Cell ).height();
const auto minHeight = menu->strutSizeHint( Q::Segment ).height();
h = qMax( h, minHeight );
return h;
@ -218,8 +217,8 @@ class QskMenuSkinlet::PrivateData
mutable qreal m_graphicWidth = -1.0;
mutable qreal m_textWidth = -1.0;
mutable qreal m_cellHeight = -1.0;
mutable qreal m_cellWidth = -1.0;
mutable qreal m_segmentHeight = -1.0;
mutable qreal m_segmentWidth = -1.0;
};
QskMenuSkinlet::QskMenuSkinlet( QskSkin* skin )
@ -234,10 +233,10 @@ QskMenuSkinlet::~QskMenuSkinlet() = default;
QRectF QskMenuSkinlet::cursorRect(
const QskSkinnable* skinnable, const QRectF& contentsRect, int index ) const
{
const auto count = sampleCount( skinnable, QskMenu::Cell );
const auto count = sampleCount( skinnable, QskMenu::Segment );
auto rect = sampleRect( skinnable, contentsRect,
QskMenu::Cell, qBound( 0, index, count ) );
QskMenu::Segment, qBound( 0, index, count ) );
if ( index < 0 )
rect.setBottom( rect.top() );
@ -295,11 +294,11 @@ QRectF QskMenuSkinlet::sampleRect(
const auto menu = static_cast< const QskMenu* >( skinnable );
if ( subControl == Q::Cell )
if ( subControl == Q::Segment )
{
const auto r = menu->subControlContentsRect( Q::Panel );
auto h = m_data->cellHeight( menu );
auto h = m_data->segmentHeight( menu );
if ( int n = m_data->separatorsBefore( menu, index ) )
{
@ -314,7 +313,7 @@ QRectF QskMenuSkinlet::sampleRect(
if ( subControl == QskMenu::Graphic || subControl == QskMenu::Text )
{
const auto r = sampleRect( menu, contentsRect, Q::Cell, index );
const auto r = sampleRect( menu, contentsRect, Q::Segment, index );
const auto graphicWidth = m_data->graphicWidth( menu );
if ( subControl == QskMenu::Graphic )
@ -330,7 +329,7 @@ QRectF QskMenuSkinlet::sampleRect(
if ( graphicWidth > 0.0 )
{
const auto spacing = skinnable->spacingHint( Q::Cell );
const auto spacing = skinnable->spacingHint( Q::Segment );
textRect.setX( r.x() + graphicWidth + spacing );
}
@ -348,8 +347,8 @@ QRectF QskMenuSkinlet::sampleRect(
if ( pos < menu->count() )
{
const auto cellRect = sampleRect( skinnable, contentsRect, Q::Cell, pos );
r.setBottom( cellRect.top() ); // spacing ???
const auto segmentRect = sampleRect( skinnable, contentsRect, Q::Segment, pos );
r.setBottom( segmentRect.top() ); // spacing ???
}
const qreal h = menu->metric( Q::Separator | QskAspect::Size );
@ -375,7 +374,7 @@ int QskMenuSkinlet::sampleCount(
{
using Q = QskMenu;
if ( subControl == Q::Cell || subControl == Q::Graphic || subControl == Q::Text )
if ( subControl == Q::Segment || subControl == Q::Graphic || subControl == Q::Text )
{
const auto menu = static_cast< const QskMenu* >( skinnable );
return menu->count();
@ -397,7 +396,7 @@ QskAspect::States QskMenuSkinlet::sampleStates(
auto states = Inherited::sampleStates( skinnable, subControl, index );
if ( subControl == Q::Cell || subControl == Q::Graphic || subControl == Q::Text )
if ( subControl == Q::Segment || subControl == Q::Graphic || subControl == Q::Text )
{
const auto menu = static_cast< const QskMenu* >( skinnable );
if ( menu->currentIndex() == index )
@ -433,8 +432,8 @@ QSGNode* QskMenuSkinlet::updateContentsNode(
QSGNode* QskMenuSkinlet::updateMenuNode(
const QskSkinnable* skinnable, QSGNode* contentsNode ) const
{
enum { Panel, Cell, Cursor, Graphic, Text, Separator };
static QVector< quint8 > roles = { Panel, Separator, Cell, Cursor, Graphic, Text };
enum { Panel, Segment, Cursor, Graphic, Text, Separator };
static QVector< quint8 > roles = { Panel, Separator, Segment, Cursor, Graphic, Text };
if ( contentsNode == nullptr )
contentsNode = new QSGNode();
@ -452,9 +451,9 @@ QSGNode* QskMenuSkinlet::updateMenuNode(
newNode = updateBoxNode( skinnable, oldNode, QskMenu::Panel );
break;
}
case Cell:
case Segment:
{
newNode = updateSeriesNode( skinnable, QskMenu::Cell, oldNode );
newNode = updateSeriesNode( skinnable, QskMenu::Segment, oldNode );
break;
}
case Cursor:
@ -494,7 +493,7 @@ QSGNode* QskMenuSkinlet::updateSampleNode( const QskSkinnable* skinnable,
const auto rect = sampleRect( menu, menu->contentsRect(), subControl, index );
if ( subControl == Q::Cell )
if ( subControl == Q::Segment )
{
return updateBoxNode( menu, node, rect, subControl );
}
@ -522,7 +521,7 @@ QSGNode* QskMenuSkinlet::updateSampleNode( const QskSkinnable* skinnable,
subControl, Qt::AlignVCenter | Qt::AlignLeft );
return QskSkinlet::updateTextNode( menu, node, rect, alignment,
text, QskTextOptions(), Q::Text );
text, menu->textOptions(), Q::Text );
}
if ( subControl == Q::Separator )
@ -547,10 +546,10 @@ QSizeF QskMenuSkinlet::sizeHint( const QskSkinnable* skinnable,
qreal w = 0.0;
qreal h = 0.0;
if ( const auto count = sampleCount( skinnable, Q::Cell ) )
if ( const auto count = sampleCount( skinnable, Q::Segment ) )
{
w = m_data->cellWidth( menu );
h = count * m_data->cellHeight( menu );
w = m_data->segmentWidth( menu );
h = count * m_data->segmentHeight( menu );
}
if ( const auto count = sampleCount( skinnable, Q::Separator ) )