qskinny/src/controls/QskSetup.cpp

91 lines
2.1 KiB
C++
Raw Normal View History

2017-07-21 16:21:34 +00:00
/******************************************************************************
2024-01-17 13:31:45 +00:00
* QSkinny - Copyright (C) The authors
2023-04-06 07:23:37 +00:00
* SPDX-License-Identifier: BSD-3-Clause
2017-07-21 16:21:34 +00:00
*****************************************************************************/
#include "QskSetup.h"
extern bool qskHasEnvironment( const char* );
2024-02-02 14:01:43 +00:00
extern void qskUpdateItemFlags();
2017-07-21 16:21:34 +00:00
2024-02-02 14:01:43 +00:00
namespace
2017-07-21 16:21:34 +00:00
{
2024-02-02 14:01:43 +00:00
inline const QskItem::UpdateFlags environmentUpdateFlags()
{
QskItem::UpdateFlags flags;
2017-07-21 16:21:34 +00:00
if ( !qskHasEnvironment( "QSK_PREFER_FBO_PAINTING" ) )
2024-02-02 14:01:43 +00:00
flags |= QskItem::PreferRasterForTextures;
2017-07-21 16:21:34 +00:00
if ( qskHasEnvironment( "QSK_FORCE_BACKGROUND" ) )
2024-02-02 14:01:43 +00:00
flags |= QskItem::DebugForceBackground;
2017-07-21 16:21:34 +00:00
2024-02-02 14:01:43 +00:00
return flags;
}
2017-07-21 16:21:34 +00:00
2024-02-02 14:01:43 +00:00
inline QskItem::UpdateFlags defaultUpdateFlags()
2017-07-21 16:21:34 +00:00
{
2024-02-02 14:01:43 +00:00
static QskItem::UpdateFlags flags;
if ( flags == 0 )
{
flags |= QskItem::DeferredUpdate;
flags |= QskItem::DeferredPolish;
flags |= QskItem::DeferredLayout;
flags |= QskItem::CleanupOnVisibility;
flags |= environmentUpdateFlags();
}
return flags;
2017-07-21 16:21:34 +00:00
}
2024-02-02 14:01:43 +00:00
inline void propagateFlags()
2017-07-21 16:21:34 +00:00
{
2024-02-02 14:01:43 +00:00
qskUpdateItemFlags();
2017-07-21 16:21:34 +00:00
}
}
2024-02-02 14:01:43 +00:00
static QskItem::UpdateFlags qskUpdateFlags = defaultUpdateFlags();
2017-07-21 16:21:34 +00:00
2024-02-02 14:01:43 +00:00
void QskSetup::setUpdateFlags( QskItem::UpdateFlags flags )
2017-07-21 16:21:34 +00:00
{
2024-02-02 14:01:43 +00:00
if ( qskUpdateFlags != flags )
2017-07-21 16:21:34 +00:00
{
2024-02-02 14:01:43 +00:00
qskUpdateFlags = flags;
propagateFlags();
2017-07-21 16:21:34 +00:00
}
}
2024-02-02 14:01:43 +00:00
QskItem::UpdateFlags QskSetup::updateFlags()
2017-07-21 16:21:34 +00:00
{
2024-02-02 14:01:43 +00:00
return qskUpdateFlags;
2017-07-21 16:21:34 +00:00
}
2024-02-02 14:01:43 +00:00
void QskSetup::resetUpdateFlags()
2017-07-21 16:21:34 +00:00
{
2024-02-02 14:01:43 +00:00
setUpdateFlags( defaultUpdateFlags() );
2017-07-21 16:21:34 +00:00
}
2024-02-02 14:01:43 +00:00
void QskSetup::setUpdateFlag( QskItem::UpdateFlag flag, bool on )
2017-07-21 16:21:34 +00:00
{
2024-02-02 14:01:43 +00:00
if ( qskUpdateFlags.testFlag( flag ) != on )
2017-07-21 16:21:34 +00:00
{
if ( on )
2024-02-02 14:01:43 +00:00
qskUpdateFlags |= flag;
2017-07-21 16:21:34 +00:00
else
2024-02-02 14:01:43 +00:00
qskUpdateFlags &= ~flag;
2017-07-21 16:21:34 +00:00
2024-02-02 14:01:43 +00:00
propagateFlags();
2017-07-21 16:21:34 +00:00
}
}
2024-02-02 14:01:43 +00:00
void QskSetup::resetUpdateFlag( QskItem::UpdateFlag flag )
2017-07-21 16:21:34 +00:00
{
2024-02-02 14:01:43 +00:00
setUpdateFlag( flag, flag & defaultUpdateFlags() );
2017-07-21 16:21:34 +00:00
}
2024-02-02 14:01:43 +00:00
bool QskSetup::testUpdateFlag( QskItem::UpdateFlag flag )
2017-07-21 16:21:34 +00:00
{
2024-02-02 14:01:43 +00:00
return qskUpdateFlags.testFlag( flag );
2017-07-21 16:21:34 +00:00
}