qskinny/src/controls/QskSkinStateChanger.h

59 lines
1.6 KiB
C
Raw Normal View History

2021-12-23 18:15:07 +01:00
/******************************************************************************
* QSkinny - Copyright (C) 2016 Uwe Rathmann
* This file may be used under the terms of the QSkinny License, Version 1.0
*****************************************************************************/
#ifndef QSK_SKIN_STATE_CHANGER_H
#define QSK_SKIN_STATE_CHANGER_H
#include "QskAspect.h"
#include "QskSkinnable.h"
class QskSkinStateChanger
{
public:
2021-12-27 17:33:06 +01:00
QskSkinStateChanger( const QskSkinnable*,
QskAspect::States = QskAspect::States() );
2021-12-23 18:15:07 +01:00
~QskSkinStateChanger();
2021-12-27 17:33:06 +01:00
void addStates( QskAspect::States );
void clearStates( QskAspect::States );
2021-12-23 18:15:07 +01:00
private:
QskSkinnable* m_skinnable;
2021-12-27 17:33:06 +01:00
const QskAspect::States m_oldStates;
2021-12-23 18:15:07 +01:00
};
inline QskSkinStateChanger::QskSkinStateChanger(
const QskSkinnable* skinnable, QskAspect::States states )
: m_skinnable( const_cast< QskSkinnable* >( skinnable ) )
, m_oldStates( skinnable->skinStates() )
{
2021-12-27 17:33:06 +01:00
addStates( states );
2021-12-23 18:15:07 +01:00
}
inline QskSkinStateChanger::~QskSkinStateChanger()
{
if ( m_oldStates != m_skinnable->skinStates() )
m_skinnable->replaceSkinStates( m_oldStates );
}
2021-12-27 17:33:06 +01:00
inline void QskSkinStateChanger::addStates( QskAspect::States states )
{
const auto newStates = m_oldStates | states;
if ( newStates != m_skinnable->skinStates() )
m_skinnable->replaceSkinStates( newStates );
}
inline void QskSkinStateChanger::clearStates( QskAspect::States states )
{
const auto newStates = m_oldStates & ~states;
if ( newStates != m_skinnable->skinStates() )
m_skinnable->replaceSkinStates( newStates );
}
2021-12-23 18:15:07 +01:00
#endif