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"
|