qskinny/src/controls/QskSetup.cpp

136 lines
2.9 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"
QskSetup* QskSetup::s_instance = nullptr;
static inline bool qskHasEnvironment( const char* env )
{
bool ok;
const int value = qEnvironmentVariableIntValue( env, &ok );
if ( ok )
return value != 0;
// All other strings are true, apart from "false"
auto result = qgetenv( env );
return !result.isEmpty() && result != "false";
}
2024-02-02 13:13:33 +00:00
static inline const QskItem::UpdateFlags qskEnvironmentUpdateFlags()
2017-07-21 16:21:34 +00:00
{
2024-02-02 13:13:33 +00:00
QskItem::UpdateFlags flags;
2017-07-21 16:21:34 +00:00
if ( qskHasEnvironment( "QSK_PREFER_RASTER" ) )
2024-02-02 13:13:33 +00:00
flags |= QskItem::PreferRasterForTextures;
2017-07-21 16:21:34 +00:00
if ( qskHasEnvironment( "QSK_FORCE_BACKGROUND" ) )
2024-02-02 13:13:33 +00:00
flags |= QskItem::DebugForceBackground;
2017-07-21 16:21:34 +00:00
return flags;
}
2024-02-02 13:13:33 +00:00
static inline QskItem::UpdateFlags qskDefaultUpdateFlags()
2017-07-21 16:21:34 +00:00
{
2024-02-02 13:13:33 +00:00
static QskItem::UpdateFlags flags;
2017-07-21 16:21:34 +00:00
if ( flags == 0 )
{
2024-02-02 13:13:33 +00:00
flags |= QskItem::DeferredUpdate;
flags |= QskItem::DeferredPolish;
flags |= QskItem::DeferredLayout;
flags |= QskItem::CleanupOnVisibility;
2021-02-09 07:13:20 +00:00
flags |= qskEnvironmentUpdateFlags();
2017-07-21 16:21:34 +00:00
}
return flags;
}
static void qskApplicationHook()
{
QskSetup::setup();
qAddPostRoutine( QskSetup::cleanup );
}
Q_CONSTRUCTOR_FUNCTION( qskApplicationHook )
class QskSetup::PrivateData
{
2018-08-03 06:15:28 +00:00
public:
PrivateData()
2021-02-09 07:13:20 +00:00
: itemUpdateFlags( qskDefaultUpdateFlags() )
2017-07-21 16:21:34 +00:00
{
}
2024-02-02 13:13:33 +00:00
QskItem::UpdateFlags itemUpdateFlags;
2017-07-21 16:21:34 +00:00
};
2018-08-03 06:15:28 +00:00
QskSetup::QskSetup()
: m_data( new PrivateData() )
2017-07-21 16:21:34 +00:00
{
}
QskSetup::~QskSetup()
{
s_instance = nullptr; // we might be destroyed from Qml !
}
void QskSetup::setup()
{
if ( s_instance == nullptr )
s_instance = new QskSetup();
}
void QskSetup::cleanup()
{
2021-01-12 15:25:33 +00:00
delete s_instance;
s_instance = nullptr;
2017-07-21 16:21:34 +00:00
}
2024-02-02 13:13:33 +00:00
void QskSetup::setItemUpdateFlags( QskItem::UpdateFlags flags )
2017-07-21 16:21:34 +00:00
{
2021-02-09 07:13:20 +00:00
if ( m_data->itemUpdateFlags != flags )
2017-07-21 16:21:34 +00:00
{
2021-02-09 07:13:20 +00:00
m_data->itemUpdateFlags = flags;
Q_EMIT itemUpdateFlagsChanged();
2017-07-21 16:21:34 +00:00
}
}
2024-02-02 13:13:33 +00:00
QskItem::UpdateFlags QskSetup::itemUpdateFlags() const
2017-07-21 16:21:34 +00:00
{
2021-02-09 07:13:20 +00:00
return m_data->itemUpdateFlags;
2017-07-21 16:21:34 +00:00
}
2021-02-09 07:13:20 +00:00
void QskSetup::resetItemUpdateFlags()
2017-07-21 16:21:34 +00:00
{
2021-02-09 07:13:20 +00:00
setItemUpdateFlags( qskDefaultUpdateFlags() );
2017-07-21 16:21:34 +00:00
}
2024-02-02 13:13:33 +00:00
void QskSetup::setItemUpdateFlag( QskItem::UpdateFlag flag, bool on )
2017-07-21 16:21:34 +00:00
{
2021-02-09 07:13:20 +00:00
if ( m_data->itemUpdateFlags.testFlag( flag ) != on )
2017-07-21 16:21:34 +00:00
{
if ( on )
2021-02-09 07:13:20 +00:00
m_data->itemUpdateFlags |= flag;
2017-07-21 16:21:34 +00:00
else
2021-02-09 07:13:20 +00:00
m_data->itemUpdateFlags &= ~flag;
2017-07-21 16:21:34 +00:00
2021-02-09 07:13:20 +00:00
Q_EMIT itemUpdateFlagsChanged();
2017-07-21 16:21:34 +00:00
}
}
2024-02-02 13:13:33 +00:00
void QskSetup::resetItemUpdateFlag( QskItem::UpdateFlag flag )
2017-07-21 16:21:34 +00:00
{
2021-02-09 07:13:20 +00:00
setItemUpdateFlag( flag, flag & qskDefaultUpdateFlags() );
2017-07-21 16:21:34 +00:00
}
2024-02-02 13:13:33 +00:00
bool QskSetup::testItemUpdateFlag( QskItem::UpdateFlag flag )
2017-07-21 16:21:34 +00:00
{
2021-02-09 07:13:20 +00:00
return m_data->itemUpdateFlags.testFlag( flag );
2017-07-21 16:21:34 +00:00
}
#include "moc_QskSetup.cpp"