From 1adcce73472fba61b55664028743c7074c3b0813 Mon Sep 17 00:00:00 2001 From: Uwe Rathmann Date: Tue, 22 Aug 2017 11:57:10 +0200 Subject: [PATCH] as the number of local hints is supposed to be small we don't need to have an extra lookup table for the animator hints. --- src/controls/QskSkinnable.cpp | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/src/controls/QskSkinnable.cpp b/src/controls/QskSkinnable.cpp index bad8af6b..f85f46c7 100644 --- a/src/controls/QskSkinnable.cpp +++ b/src/controls/QskSkinnable.cpp @@ -122,7 +122,6 @@ class QskSkinnable::PrivateData public: PrivateData(): skinHints( nullptr ), - anminatorAspects( nullptr ), skinlet( nullptr ), skinState( QskAspect::NoState ), hasLocalSkinlet( false ) @@ -135,11 +134,9 @@ public: delete skinlet; delete skinHints; - delete anminatorAspects; } std::unordered_map< QskAspect::Aspect, QVariant >* skinHints; - std::set< QskAspect::Aspect >* anminatorAspects; QskHintAnimatorTable animators; @@ -388,14 +385,6 @@ void QskSkinnable::setSkinHint( QskAspect::Aspect aspect, const QVariant& skinHi { it->second = skinHint; } - - if ( aspect.isAnimator() ) - { - if ( m_data->anminatorAspects == nullptr ) - m_data->anminatorAspects = new std::set< QskAspect::Aspect >(); - - m_data->anminatorAspects->insert( aspect ); - } } QVariant QskSkinnable::effectiveHint( @@ -757,14 +746,18 @@ void QskSkinnable::setSkinStateFlag( QskAspect::State state, bool on ) QskControl* control = owningControl(); if ( control->window() && control->isInitiallyPainted() ) { - const auto localAspects = m_data->anminatorAspects; + const auto localHints = m_data->skinHints; - if ( localAspects ) + if ( localHints ) { - for ( const auto aspect : *localAspects ) + for ( const auto entry : *localHints ) { - if ( !aspect.state() || aspect.state() == newState ) - startTransition( aspect, m_data->skinState, newState ); + const auto aspect = entry.first; + if ( aspect.isAnimator() ) + { + if ( !aspect.state() || aspect.state() == newState ) + startTransition( aspect, m_data->skinState, newState ); + } } } @@ -781,7 +774,7 @@ void QskSkinnable::setSkinStateFlag( QskAspect::State state, bool on ) for ( QskAspect::Aspect aspect : animatorAspects ) { - if ( localAspects && localAspects->find( aspect ) != localAspects->end() ) + if ( localHints && ( localHints->find( aspect ) != localHints->end() ) ) { // ignore animators from the skin, when we have others // specifically defined for the skinnable