QskSetup is a namespace now
This commit is contained in:
parent
995736ef83
commit
2585385e28
@ -28,7 +28,7 @@ int main( int argc, char* argv[] )
|
||||
|
||||
QGuiApplication app( argc, argv );
|
||||
|
||||
qskSetup->setItemUpdateFlag( QskItem::PreferRasterForTextures, true );
|
||||
QskSetup::setUpdateFlag( QskItem::PreferRasterForTextures, true );
|
||||
qskSkinManager->setSkin( new Skin() );
|
||||
|
||||
Qsk::addGraphicProvider( QString(), new GraphicProvider() );
|
||||
|
@ -139,7 +139,7 @@ int main( int argc, char* argv[] )
|
||||
qskSkinManager->registerFactory(
|
||||
QStringLiteral( "MySkinFactory" ), new MySkinFactory() );
|
||||
|
||||
qskSetup->setItemUpdateFlag( QskItem::PreferRasterForTextures, true );
|
||||
QskSetup::setUpdateFlag( QskItem::PreferRasterForTextures, true );
|
||||
|
||||
Window window;
|
||||
window.resize( 480, 360 );
|
||||
|
@ -41,7 +41,6 @@
|
||||
#include <QskScrollView.h>
|
||||
#include <QskSelectionWindow.h>
|
||||
#include <QskSeparator.h>
|
||||
#include <QskSetup.h>
|
||||
#include <QskShadowMetrics.h>
|
||||
#include <QskSimpleListBox.h>
|
||||
#include <QskSkin.h>
|
||||
@ -191,7 +190,6 @@ namespace
|
||||
|
||||
void QskQml::registerTypes()
|
||||
{
|
||||
qmlRegisterUncreatableType< QskSetup >( QSK_MODULE_NAME, 1, 0, "Setup", QString() );
|
||||
qmlRegisterUncreatableType< QskSkin >( QSK_MODULE_NAME, 1, 0, "Skin", QString() );
|
||||
qRegisterMetaType< QskSkin* >();
|
||||
|
||||
|
@ -69,11 +69,7 @@ namespace
|
||||
/*
|
||||
Its faster and saves some memory to have this registry instead
|
||||
of setting up direct connections between qskSetup and each control
|
||||
*/
|
||||
QObject::connect( qskSetup, &QskSetup::itemUpdateFlagsChanged,
|
||||
qskSetup, [ this ] { updateControlFlags(); } );
|
||||
|
||||
/*
|
||||
We would also need to send QEvent::StyleChange, when
|
||||
a window has a new skin. TODO ...
|
||||
*/
|
||||
@ -94,9 +90,9 @@ namespace
|
||||
m_items.erase( item );
|
||||
}
|
||||
|
||||
void updateControlFlags()
|
||||
void updateItemFlags()
|
||||
{
|
||||
const auto flags = qskSetup->itemUpdateFlags();
|
||||
const auto flags = QskSetup::updateFlags();
|
||||
|
||||
for ( auto item : m_items )
|
||||
qskApplyUpdateFlags( flags, item );
|
||||
@ -525,7 +521,7 @@ void QskItem::resetUpdateFlags()
|
||||
|
||||
// clear all bits in the mask
|
||||
d->updateFlagsMask = 0;
|
||||
d->applyUpdateFlags( qskSetup->itemUpdateFlags() );
|
||||
d->applyUpdateFlags( QskSetup::updateFlags() );
|
||||
}
|
||||
|
||||
void QskItem::setUpdateFlag( UpdateFlag flag, bool on )
|
||||
@ -547,7 +543,7 @@ void QskItem::resetUpdateFlag( UpdateFlag flag )
|
||||
|
||||
d->updateFlagsMask &= ~flag;
|
||||
|
||||
const bool on = qskSetup->testItemUpdateFlag( flag );
|
||||
const bool on = QskSetup::testUpdateFlag( flag );
|
||||
|
||||
if ( testUpdateFlag( flag ) != on )
|
||||
{
|
||||
@ -1045,4 +1041,10 @@ QSGNode* QskItem::updateItemPaintNode( QSGNode* node )
|
||||
return node;
|
||||
}
|
||||
|
||||
void qskUpdateItemFlags()
|
||||
{
|
||||
if ( qskRegistry )
|
||||
qskRegistry->updateItemFlags();
|
||||
}
|
||||
|
||||
#include "moc_QskItem.cpp"
|
||||
|
@ -14,7 +14,7 @@ static inline void qskSendEventTo( QObject* object, QEvent::Type type )
|
||||
}
|
||||
|
||||
QskItemPrivate::QskItemPrivate()
|
||||
: updateFlags( qskSetup->itemUpdateFlags() )
|
||||
: updateFlags( QskSetup::updateFlags() )
|
||||
, updateFlagsMask( 0 )
|
||||
, polishOnResize( false )
|
||||
, blockedPolish( false )
|
||||
|
@ -5,131 +5,98 @@
|
||||
|
||||
#include "QskSetup.h"
|
||||
|
||||
QskSetup* QskSetup::s_instance = nullptr;
|
||||
extern void qskUpdateItemFlags();
|
||||
|
||||
static inline bool qskHasEnvironment( const char* env )
|
||||
namespace
|
||||
{
|
||||
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";
|
||||
}
|
||||
|
||||
static inline const QskItem::UpdateFlags qskEnvironmentUpdateFlags()
|
||||
{
|
||||
QskItem::UpdateFlags flags;
|
||||
|
||||
if ( qskHasEnvironment( "QSK_PREFER_RASTER" ) )
|
||||
flags |= QskItem::PreferRasterForTextures;
|
||||
|
||||
if ( qskHasEnvironment( "QSK_FORCE_BACKGROUND" ) )
|
||||
flags |= QskItem::DebugForceBackground;
|
||||
|
||||
return flags;
|
||||
}
|
||||
|
||||
static inline QskItem::UpdateFlags qskDefaultUpdateFlags()
|
||||
{
|
||||
static QskItem::UpdateFlags flags;
|
||||
|
||||
if ( flags == 0 )
|
||||
inline bool hasEnvironment( const char* env )
|
||||
{
|
||||
flags |= QskItem::DeferredUpdate;
|
||||
flags |= QskItem::DeferredPolish;
|
||||
flags |= QskItem::DeferredLayout;
|
||||
flags |= QskItem::CleanupOnVisibility;
|
||||
flags |= qskEnvironmentUpdateFlags();
|
||||
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";
|
||||
}
|
||||
|
||||
return flags;
|
||||
}
|
||||
|
||||
static void qskApplicationHook()
|
||||
{
|
||||
QskSetup::setup();
|
||||
qAddPostRoutine( QskSetup::cleanup );
|
||||
}
|
||||
|
||||
Q_CONSTRUCTOR_FUNCTION( qskApplicationHook )
|
||||
|
||||
class QskSetup::PrivateData
|
||||
{
|
||||
public:
|
||||
PrivateData()
|
||||
: itemUpdateFlags( qskDefaultUpdateFlags() )
|
||||
inline const QskItem::UpdateFlags environmentUpdateFlags()
|
||||
{
|
||||
QskItem::UpdateFlags flags;
|
||||
|
||||
if ( hasEnvironment( "QSK_PREFER_RASTER" ) )
|
||||
flags |= QskItem::PreferRasterForTextures;
|
||||
|
||||
if ( hasEnvironment( "QSK_FORCE_BACKGROUND" ) )
|
||||
flags |= QskItem::DebugForceBackground;
|
||||
|
||||
return flags;
|
||||
}
|
||||
|
||||
QskItem::UpdateFlags itemUpdateFlags;
|
||||
};
|
||||
|
||||
QskSetup::QskSetup()
|
||||
: m_data( new PrivateData() )
|
||||
{
|
||||
}
|
||||
|
||||
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()
|
||||
{
|
||||
delete s_instance;
|
||||
s_instance = nullptr;
|
||||
}
|
||||
|
||||
void QskSetup::setItemUpdateFlags( QskItem::UpdateFlags flags )
|
||||
{
|
||||
if ( m_data->itemUpdateFlags != flags )
|
||||
inline QskItem::UpdateFlags defaultUpdateFlags()
|
||||
{
|
||||
m_data->itemUpdateFlags = flags;
|
||||
Q_EMIT itemUpdateFlagsChanged();
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
QskItem::UpdateFlags QskSetup::itemUpdateFlags() const
|
||||
static QskItem::UpdateFlags qskUpdateFlags = defaultUpdateFlags();
|
||||
|
||||
void QskSetup::setUpdateFlags( QskItem::UpdateFlags flags )
|
||||
{
|
||||
return m_data->itemUpdateFlags;
|
||||
if ( qskUpdateFlags != flags )
|
||||
{
|
||||
qskUpdateFlags = flags;
|
||||
propagateFlags();
|
||||
}
|
||||
}
|
||||
|
||||
void QskSetup::resetItemUpdateFlags()
|
||||
QskItem::UpdateFlags QskSetup::updateFlags()
|
||||
{
|
||||
setItemUpdateFlags( qskDefaultUpdateFlags() );
|
||||
return qskUpdateFlags;
|
||||
}
|
||||
|
||||
void QskSetup::setItemUpdateFlag( QskItem::UpdateFlag flag, bool on )
|
||||
void QskSetup::resetUpdateFlags()
|
||||
{
|
||||
if ( m_data->itemUpdateFlags.testFlag( flag ) != on )
|
||||
setUpdateFlags( defaultUpdateFlags() );
|
||||
}
|
||||
|
||||
void QskSetup::setUpdateFlag( QskItem::UpdateFlag flag, bool on )
|
||||
{
|
||||
if ( qskUpdateFlags.testFlag( flag ) != on )
|
||||
{
|
||||
if ( on )
|
||||
m_data->itemUpdateFlags |= flag;
|
||||
qskUpdateFlags |= flag;
|
||||
else
|
||||
m_data->itemUpdateFlags &= ~flag;
|
||||
qskUpdateFlags &= ~flag;
|
||||
|
||||
Q_EMIT itemUpdateFlagsChanged();
|
||||
propagateFlags();
|
||||
}
|
||||
}
|
||||
|
||||
void QskSetup::resetItemUpdateFlag( QskItem::UpdateFlag flag )
|
||||
void QskSetup::resetUpdateFlag( QskItem::UpdateFlag flag )
|
||||
{
|
||||
setItemUpdateFlag( flag, flag & qskDefaultUpdateFlags() );
|
||||
setUpdateFlag( flag, flag & defaultUpdateFlags() );
|
||||
}
|
||||
|
||||
bool QskSetup::testItemUpdateFlag( QskItem::UpdateFlag flag )
|
||||
bool QskSetup::testUpdateFlag( QskItem::UpdateFlag flag )
|
||||
{
|
||||
return m_data->itemUpdateFlags.testFlag( flag );
|
||||
return qskUpdateFlags.testFlag( flag );
|
||||
}
|
||||
|
||||
#include "moc_QskSetup.cpp"
|
||||
|
@ -9,53 +9,15 @@
|
||||
#include "QskGlobal.h"
|
||||
#include "QskItem.h"
|
||||
|
||||
#include <qobject.h>
|
||||
#include <memory>
|
||||
|
||||
class QQuickItem;
|
||||
|
||||
#if defined( qskSetup )
|
||||
#undef qskSetup
|
||||
#endif
|
||||
|
||||
#define qskSetup QskSetup::instance()
|
||||
|
||||
class QSK_EXPORT QskSetup : public QObject
|
||||
namespace QskSetup
|
||||
{
|
||||
Q_OBJECT
|
||||
QSK_EXPORT void setUpdateFlags( QskItem::UpdateFlags );
|
||||
QSK_EXPORT void resetUpdateFlags();
|
||||
QSK_EXPORT QskItem::UpdateFlags updateFlags();
|
||||
|
||||
public:
|
||||
|
||||
static QskSetup* instance();
|
||||
|
||||
void setItemUpdateFlags( QskItem::UpdateFlags );
|
||||
void resetItemUpdateFlags();
|
||||
QskItem::UpdateFlags itemUpdateFlags() const;
|
||||
|
||||
void setItemUpdateFlag( QskItem::UpdateFlag, bool on = true );
|
||||
void resetItemUpdateFlag( QskItem::UpdateFlag );
|
||||
bool testItemUpdateFlag( QskItem::UpdateFlag );
|
||||
|
||||
static void setup();
|
||||
static void cleanup();
|
||||
|
||||
Q_SIGNALS:
|
||||
void itemUpdateFlagsChanged();
|
||||
|
||||
private:
|
||||
QskSetup();
|
||||
~QskSetup() override;
|
||||
|
||||
static QskSetup* s_instance;
|
||||
|
||||
class PrivateData;
|
||||
std::unique_ptr< PrivateData > m_data;
|
||||
QSK_EXPORT void setUpdateFlag( QskItem::UpdateFlag, bool on = true );
|
||||
QSK_EXPORT void resetUpdateFlag( QskItem::UpdateFlag );
|
||||
QSK_EXPORT bool testUpdateFlag( QskItem::UpdateFlag );
|
||||
};
|
||||
|
||||
inline QskSetup* QskSetup::instance()
|
||||
{
|
||||
Q_ASSERT( s_instance );
|
||||
return s_instance;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -128,7 +128,7 @@ static inline QSGNode* qskUpdateGraphicNode(
|
||||
|
||||
const auto flag = QskItem::PreferRasterForTextures;
|
||||
|
||||
bool useRaster = qskSetup->testItemUpdateFlag( flag );
|
||||
bool useRaster = QskSetup::testUpdateFlag( flag );
|
||||
if ( auto qItem = qobject_cast< const QskItem* >( item ) )
|
||||
useRaster = qItem->testUpdateFlag( flag );
|
||||
|
||||
|
@ -111,7 +111,7 @@ void SkinnyShortcut::showBackground()
|
||||
scengraphDebugMode = sgDebugModes[ id - 2 ];
|
||||
}
|
||||
|
||||
qskSetup->setItemUpdateFlag( QskItem::DebugForceBackground, forceBackground );
|
||||
QskSetup::setUpdateFlag( QskItem::DebugForceBackground, forceBackground );
|
||||
|
||||
const auto windows = QGuiApplication::topLevelWindows();
|
||||
for ( auto window : windows )
|
||||
|
Loading…
x
Reference in New Issue
Block a user