qskinny/src/controls/QskSetup.cpp

91 lines
2.1 KiB
C++

/******************************************************************************
* QSkinny - Copyright (C) The authors
* SPDX-License-Identifier: BSD-3-Clause
*****************************************************************************/
#include "QskSetup.h"
extern bool qskHasEnvironment( const char* );
extern void qskUpdateItemFlags();
namespace
{
inline const QskItem::UpdateFlags environmentUpdateFlags()
{
QskItem::UpdateFlags flags;
if ( !qskHasEnvironment( "QSK_PREFER_FBO_PAINTING" ) )
flags |= QskItem::PreferRasterForTextures;
if ( qskHasEnvironment( "QSK_FORCE_BACKGROUND" ) )
flags |= QskItem::DebugForceBackground;
return flags;
}
inline QskItem::UpdateFlags defaultUpdateFlags()
{
static QskItem::UpdateFlags flags;
if ( flags == 0 )
{
flags |= QskItem::DeferredUpdate;
flags |= QskItem::DeferredPolish;
flags |= QskItem::DeferredLayout;
flags |= QskItem::CleanupOnVisibility;
flags |= environmentUpdateFlags();
}
return flags;
}
inline void propagateFlags()
{
qskUpdateItemFlags();
}
}
static QskItem::UpdateFlags qskUpdateFlags = defaultUpdateFlags();
void QskSetup::setUpdateFlags( QskItem::UpdateFlags flags )
{
if ( qskUpdateFlags != flags )
{
qskUpdateFlags = flags;
propagateFlags();
}
}
QskItem::UpdateFlags QskSetup::updateFlags()
{
return qskUpdateFlags;
}
void QskSetup::resetUpdateFlags()
{
setUpdateFlags( defaultUpdateFlags() );
}
void QskSetup::setUpdateFlag( QskItem::UpdateFlag flag, bool on )
{
if ( qskUpdateFlags.testFlag( flag ) != on )
{
if ( on )
qskUpdateFlags |= flag;
else
qskUpdateFlags &= ~flag;
propagateFlags();
}
}
void QskSetup::resetUpdateFlag( QskItem::UpdateFlag flag )
{
setUpdateFlag( flag, flag & defaultUpdateFlags() );
}
bool QskSetup::testUpdateFlag( QskItem::UpdateFlag flag )
{
return qskUpdateFlags.testFlag( flag );
}