QskSkin::stateMask added to block handling of states not being supported
from the skin
This commit is contained in:
parent
84a0927c0e
commit
a6c9af503c
@ -117,6 +117,7 @@ class QskSkin::PrivateData
|
|||||||
std::unordered_map< const QMetaObject*, SkinletData > skinletMap;
|
std::unordered_map< const QMetaObject*, SkinletData > skinletMap;
|
||||||
|
|
||||||
QskSkinHintTable hintTable;
|
QskSkinHintTable hintTable;
|
||||||
|
QskAspect::State stateMask = QskAspect::AllStates;
|
||||||
|
|
||||||
std::unordered_map< int, QFont > fonts;
|
std::unordered_map< int, QFont > fonts;
|
||||||
std::unordered_map< int, QskColorFilter > graphicFilters;
|
std::unordered_map< int, QskColorFilter > graphicFilters;
|
||||||
@ -439,6 +440,22 @@ const int* QskSkin::dialogButtonLayout( Qt::Orientation orientation ) const
|
|||||||
return QPlatformDialogHelper::buttonLayout( orientation, policy );
|
return QPlatformDialogHelper::buttonLayout( orientation, policy );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QskSkin::setStateMask( QskAspect::State mask )
|
||||||
|
{
|
||||||
|
for ( auto state : { QskControl::Disabled, QskControl::Hovered, QskControl::Focused } )
|
||||||
|
{
|
||||||
|
if ( mask & state )
|
||||||
|
m_data->stateMask |= state;
|
||||||
|
else
|
||||||
|
m_data->stateMask &= ~state;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QskAspect::State QskSkin::stateMask() const
|
||||||
|
{
|
||||||
|
return m_data->stateMask;
|
||||||
|
}
|
||||||
|
|
||||||
QskSkinlet* QskSkin::skinlet( const QskSkinnable* skinnable )
|
QskSkinlet* QskSkin::skinlet( const QskSkinnable* skinnable )
|
||||||
{
|
{
|
||||||
for ( auto metaObject = skinnable->metaObject();
|
for ( auto metaObject = skinnable->metaObject();
|
||||||
|
@ -120,6 +120,9 @@ class QSK_EXPORT QskSkin : public QObject
|
|||||||
|
|
||||||
virtual const int* dialogButtonLayout( Qt::Orientation ) const;
|
virtual const int* dialogButtonLayout( Qt::Orientation ) const;
|
||||||
|
|
||||||
|
void setStateMask( QskAspect::State );
|
||||||
|
QskAspect::State stateMask() const;
|
||||||
|
|
||||||
QskSkinlet* skinlet( const QskSkinnable* );
|
QskSkinlet* skinlet( const QskSkinnable* );
|
||||||
|
|
||||||
const QskSkinHintTable& hintTable() const;
|
const QskSkinHintTable& hintTable() const;
|
||||||
|
@ -550,6 +550,11 @@ QVariant QskSkinnable::animatedValue(
|
|||||||
const QVariant& QskSkinnable::storedHint(
|
const QVariant& QskSkinnable::storedHint(
|
||||||
QskAspect::Aspect aspect, QskSkinHintStatus* status ) const
|
QskAspect::Aspect aspect, QskSkinHintStatus* status ) const
|
||||||
{
|
{
|
||||||
|
const auto skin = effectiveSkin();
|
||||||
|
|
||||||
|
// clearing all state bits not being handled from the skin
|
||||||
|
aspect.clearState( ~skin->stateMask() );
|
||||||
|
|
||||||
QskAspect::Aspect resolvedAspect;
|
QskAspect::Aspect resolvedAspect;
|
||||||
|
|
||||||
const auto& localTable = m_data->hintTable;
|
const auto& localTable = m_data->hintTable;
|
||||||
@ -576,7 +581,7 @@ const QVariant& QskSkinnable::storedHint(
|
|||||||
|
|
||||||
// next we try the hints from the skin
|
// next we try the hints from the skin
|
||||||
|
|
||||||
const auto& skinTable = effectiveSkin()->hintTable();
|
const auto& skinTable = skin->hintTable();
|
||||||
if ( skinTable.hasHints() )
|
if ( skinTable.hasHints() )
|
||||||
{
|
{
|
||||||
QskAspect::Aspect a = aspect;
|
QskAspect::Aspect a = aspect;
|
||||||
@ -819,7 +824,7 @@ void QskSkinnable::setSkinState( QskAspect::State newState )
|
|||||||
if ( m_data->skinState == newState )
|
if ( m_data->skinState == newState )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
QskControl* control = owningControl();
|
auto control = owningControl();
|
||||||
|
|
||||||
#if DEBUG_STATE
|
#if DEBUG_STATE
|
||||||
qDebug() << control->className() << ":"
|
qDebug() << control->className() << ":"
|
||||||
@ -827,6 +832,20 @@ void QskSkinnable::setSkinState( QskAspect::State newState )
|
|||||||
<< skinStateAsPrintable( newState );
|
<< skinStateAsPrintable( newState );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const auto skin = effectiveSkin();
|
||||||
|
|
||||||
|
if ( skin )
|
||||||
|
{
|
||||||
|
const auto mask = skin->stateMask();
|
||||||
|
if ( ( newState & mask ) == ( m_data->skinState & mask ) )
|
||||||
|
{
|
||||||
|
// the modified bits are not handled by the skin
|
||||||
|
|
||||||
|
m_data->skinState = newState;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ( control->window() && isTransitionAccepted( QskAspect::Aspect() ) )
|
if ( control->window() && isTransitionAccepted( QskAspect::Aspect() ) )
|
||||||
{
|
{
|
||||||
const auto placement = effectivePlacement();
|
const auto placement = effectivePlacement();
|
||||||
@ -838,7 +857,7 @@ void QskSkinnable::setSkinState( QskAspect::State newState )
|
|||||||
|
|
||||||
Aspect aspect = subControl | placement;
|
Aspect aspect = subControl | placement;
|
||||||
|
|
||||||
const auto& skinTable = effectiveSkin()->hintTable();
|
const auto& skinTable = skin->hintTable();
|
||||||
|
|
||||||
for ( int i = 0; i <= LastType; i++ )
|
for ( int i = 0; i <= LastType; i++ )
|
||||||
{
|
{
|
||||||
@ -894,7 +913,11 @@ void QskSkinnable::setSkinState( QskAspect::State newState )
|
|||||||
|
|
||||||
QskSkin* QskSkinnable::effectiveSkin() const
|
QskSkin* QskSkinnable::effectiveSkin() const
|
||||||
{
|
{
|
||||||
auto skin = effectiveSkinlet()->skin();
|
QskSkin* skin = nullptr;
|
||||||
|
|
||||||
|
if ( m_data->skinlet )
|
||||||
|
skin = m_data->skinlet->skin();
|
||||||
|
|
||||||
return skin ? skin : qskSetup->skin();
|
return skin ? skin : qskSetup->skin();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -134,7 +134,7 @@ class QSK_EXPORT QskSkinnable
|
|||||||
|
|
||||||
QMarginsF innerPadding( QskAspect::Aspect, const QSizeF& ) const;
|
QMarginsF innerPadding( QskAspect::Aspect, const QSizeF& ) const;
|
||||||
|
|
||||||
virtual const QskSkinlet* effectiveSkinlet() const;
|
const QskSkinlet* effectiveSkinlet() const;
|
||||||
QskSkin* effectiveSkin() const;
|
QskSkin* effectiveSkin() const;
|
||||||
|
|
||||||
void startTransition( QskAspect::Aspect,
|
void startTransition( QskAspect::Aspect,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user