code moved from QskSetup to QskSkinManager
This commit is contained in:
parent
0aff128eec
commit
38e00addd6
@ -38,7 +38,6 @@
|
||||
#include <QskGraphicProvider.h>
|
||||
#include <QskGraphicIO.h>
|
||||
#include <QskGraphic.h>
|
||||
#include <QskSetup.h>
|
||||
|
||||
#include <QGuiApplication>
|
||||
|
||||
@ -159,7 +158,7 @@ namespace
|
||||
for ( const auto& name : names )
|
||||
menu->addOption( QUrl(), name );
|
||||
|
||||
if ( const auto index = names.indexOf( qskSetup->skinName() ) )
|
||||
if ( const auto index = names.indexOf( qskSkinManager->skinName() ) )
|
||||
menu->setCurrentIndex( index );
|
||||
|
||||
connect( menu, &QskMenu::triggered, this, &SkinButton::changeSkin );
|
||||
@ -170,7 +169,7 @@ namespace
|
||||
const auto names = qskSkinManager->skinNames();
|
||||
|
||||
if ( ( index >= 0 ) && ( index < names.size() )
|
||||
&& ( index != names.indexOf( qskSetup->skinName() ) ) )
|
||||
&& ( index != names.indexOf( qskSkinManager->skinName() ) ) )
|
||||
{
|
||||
Skinny::setSkin( index, 500 );
|
||||
}
|
||||
|
@ -79,7 +79,7 @@ int main( int argc, char* argv[] )
|
||||
qskSkinManager->registerFactory(
|
||||
QStringLiteral( "SampleSkinFactory" ), new SkinFactory() );
|
||||
|
||||
qskSetup->setSkin( "DaytimeSkin" );
|
||||
qskSkinManager->setSkin( "DaytimeSkin" );
|
||||
|
||||
#ifdef USE_SHORTCUTS
|
||||
// With CTRL-B you can rotate a couple of visual debug modes
|
||||
@ -92,13 +92,13 @@ int main( int argc, char* argv[] )
|
||||
|
||||
for( int i = 1; i < argc; i++ )
|
||||
{
|
||||
if( argv[i] == QStringLiteral("--screenshot") && i + 1 < argc )
|
||||
{
|
||||
QTimer::singleShot( 500, &window, [&app, &window, filename = QString(argv[i + 1])]()
|
||||
{ auto image = window.grabWindow(); image.save(filename); } );
|
||||
if( argv[i] == QStringLiteral( "--screenshot" ) && i + 1 < argc )
|
||||
{
|
||||
QTimer::singleShot( 500, &window, [&app, &window, filename = QString(argv[i + 1])]()
|
||||
{ auto image = window.grabWindow(); image.save(filename); } );
|
||||
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return app.exec();
|
||||
|
@ -102,11 +102,11 @@ class Window : public QskWindow
|
||||
private:
|
||||
void setAlternativeSkin( bool on )
|
||||
{
|
||||
auto oldSkin = qskSetup->skin();
|
||||
if ( oldSkin->parent() == qskSetup )
|
||||
auto oldSkin = qskSkinManager->skin();
|
||||
if ( oldSkin->parent() == qskSkinManager )
|
||||
oldSkin->setParent( nullptr ); // otherwise setSkin deletes it
|
||||
|
||||
auto newSkin = qskSetup->setSkin( alternativeSkin( on ) );
|
||||
auto newSkin = qskSkinManager->setSkin( alternativeSkin( on ) );
|
||||
|
||||
QskSkinTransition transition;
|
||||
|
||||
|
@ -15,7 +15,7 @@
|
||||
#include <QskLinearBox.h>
|
||||
#include <QskPushButton.h>
|
||||
#include <QskRgbValue.h>
|
||||
#include <QskSetup.h>
|
||||
#include <QskSkinManager.h>
|
||||
#include <QskSkin.h>
|
||||
#include <QskBoxShapeMetrics.h>
|
||||
|
||||
@ -92,10 +92,10 @@ MainWindow::MainWindow()
|
||||
connect( invertButton, &QskPushButton::toggled,
|
||||
label, &GraphicLabel::setDarknessMode );
|
||||
|
||||
connect( qskSetup, &QskSetup::skinChanged,
|
||||
connect( qskSkinManager, &QskSkinManager::skinChanged,
|
||||
this, &MainWindow::setGraphicRoles );
|
||||
|
||||
setGraphicRoles( qskSetup->skin() );
|
||||
setGraphicRoles( qskSkinManager->skin() );
|
||||
}
|
||||
|
||||
void MainWindow::setGraphicRoles( QskSkin* skin )
|
||||
|
@ -15,7 +15,7 @@
|
||||
#include <QskTextLabel.h>
|
||||
#include <QskWindow.h>
|
||||
#include <QskRgbValue.h>
|
||||
#include <QskSetup.h>
|
||||
#include <QskSkinManager.h>
|
||||
|
||||
#include <QDoubleValidator>
|
||||
#include <QFontMetricsF>
|
||||
@ -208,7 +208,7 @@ int main( int argc, char** argv )
|
||||
|
||||
Skinny::init(); // we need a skin
|
||||
SkinnyShortcut::enable( SkinnyShortcut::Quit | SkinnyShortcut::DebugBackground );
|
||||
qskSetup->setSkin( "fusion" );
|
||||
qskSkinManager->setSkin( "fusion" );
|
||||
|
||||
QskWindow window;
|
||||
window.setColor( QskRgb::Wheat );
|
||||
|
@ -8,7 +8,7 @@
|
||||
#include "QskColorFilter.h"
|
||||
#include "QskGraphic.h"
|
||||
#include "QskGraphicProvider.h"
|
||||
#include "QskSetup.h"
|
||||
#include "QskSkinManager.h"
|
||||
#include "QskSkin.h"
|
||||
|
||||
QSK_SUBCONTROL( QskGraphicLabel, Panel )
|
||||
@ -309,7 +309,7 @@ void QskGraphicLabel::changeEvent( QEvent* event )
|
||||
{
|
||||
if ( event->type() == QEvent::StyleChange )
|
||||
{
|
||||
if ( !m_data->source.isEmpty() && qskSetup->skin()->hasGraphicProvider() )
|
||||
if ( !m_data->source.isEmpty() && qskSkinManager->skin()->hasGraphicProvider() )
|
||||
{
|
||||
// we might need to reload from a different skin
|
||||
m_data->isSourceDirty = true;
|
||||
|
@ -9,7 +9,7 @@
|
||||
#include "QskBoxShapeMetrics.h"
|
||||
#include "QskGraphic.h"
|
||||
#include "QskGraphicProvider.h"
|
||||
#include "QskSetup.h"
|
||||
#include "QskSkinManager.h"
|
||||
#include "QskSkin.h"
|
||||
#include "QskSkinlet.h"
|
||||
#include "QskTextOptions.h"
|
||||
@ -275,7 +275,7 @@ void QskPushButton::changeEvent( QEvent* event )
|
||||
case QEvent::StyleChange:
|
||||
{
|
||||
if ( !m_data->iconSource.isEmpty() &&
|
||||
qskSetup->skin()->hasGraphicProvider() )
|
||||
qskSkinManager->skin()->hasGraphicProvider() )
|
||||
{
|
||||
// we might need to reload from a different skin
|
||||
m_data->isIconSourceDirty = true;
|
||||
|
@ -8,6 +8,7 @@
|
||||
#include "QskQuick.h"
|
||||
#include "QskEvent.h"
|
||||
#include "QskSetup.h"
|
||||
#include "QskSkinManager.h"
|
||||
#include "QskSkin.h"
|
||||
#include "QskDirtyItemFilter.h"
|
||||
|
||||
@ -76,8 +77,8 @@ namespace
|
||||
We would also need to send QEvent::StyleChange, when
|
||||
a window has a new skin. TODO ...
|
||||
*/
|
||||
QObject::connect( qskSetup, &QskSetup::skinChanged,
|
||||
qskSetup, [ this ] { updateSkin(); } );
|
||||
QObject::connect( qskSkinManager, &QskSkinManager::skinChanged,
|
||||
qskSkinManager, [ this ] { updateSkin(); } );
|
||||
}
|
||||
|
||||
inline void insert( QskQuickItem* item )
|
||||
|
@ -7,12 +7,11 @@
|
||||
#include "QskControl.h"
|
||||
#include "QskControlPrivate.h"
|
||||
#include "QskGraphicProviderMap.h"
|
||||
#include "QskSkin.h"
|
||||
#include "QskSkinManager.h"
|
||||
#include "QskSkin.h"
|
||||
#include "QskWindow.h"
|
||||
|
||||
#include <qguiapplication.h>
|
||||
#include <qpointer.h>
|
||||
#include <qstylehints.h>
|
||||
|
||||
QskSetup* QskSetup::s_instance = nullptr;
|
||||
@ -81,9 +80,6 @@ class QskSetup::PrivateData
|
||||
{
|
||||
}
|
||||
|
||||
QString skinName;
|
||||
QPointer< QskSkin > skin;
|
||||
|
||||
QskGraphicProviderMap graphicProviders;
|
||||
QskQuickItem::UpdateFlags itemUpdateFlags;
|
||||
};
|
||||
@ -152,53 +148,6 @@ bool QskSetup::testItemUpdateFlag( QskQuickItem::UpdateFlag flag )
|
||||
return m_data->itemUpdateFlags.testFlag( flag );
|
||||
}
|
||||
|
||||
QskSkin* QskSetup::setSkin( const QString& skinName )
|
||||
{
|
||||
if ( m_data->skin && ( skinName == m_data->skinName ) )
|
||||
return m_data->skin;
|
||||
|
||||
auto skin = QskSkinManager::instance()->createSkin( skinName );
|
||||
if ( skin == nullptr )
|
||||
return nullptr;
|
||||
|
||||
if ( skin->parent() == nullptr )
|
||||
skin->setParent( this );
|
||||
|
||||
const auto oldSkin = m_data->skin;
|
||||
|
||||
m_data->skin = skin;
|
||||
m_data->skinName = skinName;
|
||||
|
||||
if ( oldSkin )
|
||||
{
|
||||
Q_EMIT skinChanged( skin );
|
||||
|
||||
if ( oldSkin->parent() == this )
|
||||
delete oldSkin;
|
||||
}
|
||||
|
||||
return m_data->skin;
|
||||
}
|
||||
|
||||
QString QskSetup::skinName() const
|
||||
{
|
||||
return m_data->skinName;
|
||||
}
|
||||
|
||||
QskSkin* QskSetup::skin()
|
||||
{
|
||||
if ( m_data->skin == nullptr )
|
||||
{
|
||||
m_data->skin = QskSkinManager::instance()->createSkin( QString() );
|
||||
Q_ASSERT( m_data->skin );
|
||||
|
||||
m_data->skin->setParent( this );
|
||||
m_data->skinName = m_data->skin->objectName();
|
||||
}
|
||||
|
||||
return m_data->skin;
|
||||
}
|
||||
|
||||
void QskSetup::addGraphicProvider( const QString& providerId, QskGraphicProvider* provider )
|
||||
{
|
||||
m_data->graphicProviders.insert( providerId, provider );
|
||||
@ -206,10 +155,9 @@ void QskSetup::addGraphicProvider( const QString& providerId, QskGraphicProvider
|
||||
|
||||
QskGraphicProvider* QskSetup::graphicProvider( const QString& providerId ) const
|
||||
{
|
||||
if ( m_data->skin )
|
||||
if ( auto skin = qskSkinManager->skin() )
|
||||
{
|
||||
QskGraphicProvider* provider = m_data->skin->graphicProvider( providerId );
|
||||
if ( provider )
|
||||
if ( auto provider = skin->graphicProvider( providerId ) )
|
||||
return provider;
|
||||
}
|
||||
|
||||
|
@ -12,7 +12,6 @@
|
||||
#include <qobject.h>
|
||||
#include <memory>
|
||||
|
||||
class QskSkin;
|
||||
class QQuickItem;
|
||||
class QskGraphicProvider;
|
||||
|
||||
@ -38,11 +37,6 @@ class QSK_EXPORT QskSetup : public QObject
|
||||
void resetItemUpdateFlag( QskQuickItem::UpdateFlag );
|
||||
bool testItemUpdateFlag( QskQuickItem::UpdateFlag );
|
||||
|
||||
QskSkin* setSkin( const QString& );
|
||||
QString skinName() const;
|
||||
|
||||
QskSkin* skin();
|
||||
|
||||
void addGraphicProvider( const QString& providerId, QskGraphicProvider* );
|
||||
QskGraphicProvider* graphicProvider( const QString& providerId ) const;
|
||||
|
||||
@ -50,7 +44,6 @@ class QSK_EXPORT QskSetup : public QObject
|
||||
static void cleanup();
|
||||
|
||||
Q_SIGNALS:
|
||||
void skinChanged( QskSkin* );
|
||||
void itemUpdateFlagsChanged();
|
||||
|
||||
private:
|
||||
|
@ -5,6 +5,7 @@
|
||||
|
||||
#include "QskSkinManager.h"
|
||||
#include "QskSkinFactory.h"
|
||||
#include "QskSkin.h"
|
||||
|
||||
#include <qdir.h>
|
||||
#include <qglobalstatic.h>
|
||||
@ -20,13 +21,6 @@
|
||||
#include <qstylehints.h>
|
||||
#endif
|
||||
|
||||
static inline QStringList qskSplitPath( const QString& s )
|
||||
{
|
||||
const auto separator = QDir::listSeparator();
|
||||
|
||||
return s.split( separator, Qt::SkipEmptyParts );
|
||||
}
|
||||
|
||||
/*
|
||||
We could use QFactoryLoader, but as it is again a "private" class
|
||||
and does a couple of hardcoded things we don't need ( like always resolving
|
||||
@ -48,7 +42,8 @@ static QStringList qskPathList( const char* envName )
|
||||
if ( env.isEmpty() )
|
||||
return QStringList();
|
||||
|
||||
return qskSplitPath( QFile::decodeName( env ) );
|
||||
const auto name = QFile::decodeName( env );
|
||||
return name.split( QDir::listSeparator(), Qt::SkipEmptyParts );
|
||||
}
|
||||
|
||||
static inline QString qskResolvedPath( const QString& path )
|
||||
@ -406,6 +401,8 @@ class QskSkinManager::PrivateData
|
||||
QStringList pluginPaths;
|
||||
FactoryMap factoryMap;
|
||||
|
||||
QPointer< QskSkin > skin;
|
||||
|
||||
bool pluginsRegistered : 1;
|
||||
};
|
||||
|
||||
@ -540,7 +537,64 @@ QskSkin* QskSkinManager::createSkin( const QString& skinName ) const
|
||||
}
|
||||
}
|
||||
|
||||
return factory ? factory->createSkin( name ) : nullptr;
|
||||
QskSkin* skin = nullptr;
|
||||
|
||||
if ( factory )
|
||||
{
|
||||
skin = factory->createSkin( name );
|
||||
if ( skin )
|
||||
skin->setObjectName( name );
|
||||
}
|
||||
|
||||
return skin;
|
||||
}
|
||||
|
||||
QskSkin* QskSkinManager::setSkin( const QString& name )
|
||||
{
|
||||
if ( m_data->skin && ( m_data->skin->objectName() == name ) )
|
||||
return m_data->skin;
|
||||
|
||||
auto skin = createSkin( name );
|
||||
if ( skin == nullptr )
|
||||
return nullptr;
|
||||
|
||||
if ( skin->parent() == nullptr )
|
||||
skin->setParent( this );
|
||||
|
||||
const auto oldSkin = m_data->skin;
|
||||
|
||||
m_data->skin = skin;
|
||||
|
||||
if ( oldSkin )
|
||||
{
|
||||
Q_EMIT skinChanged( skin );
|
||||
|
||||
if ( oldSkin->parent() == this )
|
||||
delete oldSkin;
|
||||
}
|
||||
|
||||
return m_data->skin;
|
||||
}
|
||||
|
||||
QString QskSkinManager::skinName() const
|
||||
{
|
||||
if ( m_data->skin )
|
||||
return m_data->skin->objectName();
|
||||
|
||||
return QString();
|
||||
}
|
||||
|
||||
QskSkin* QskSkinManager::skin()
|
||||
{
|
||||
if ( m_data->skin == nullptr )
|
||||
{
|
||||
m_data->skin = createSkin( QString() );
|
||||
Q_ASSERT( m_data->skin );
|
||||
|
||||
m_data->skin->setParent( this );
|
||||
}
|
||||
|
||||
return m_data->skin;
|
||||
}
|
||||
|
||||
#include "moc_QskSkinManager.cpp"
|
||||
|
@ -39,7 +39,15 @@ class QSK_EXPORT QskSkinManager : public QObject
|
||||
|
||||
QStringList skinNames() const;
|
||||
|
||||
QskSkin* createSkin( const QString& skinName ) const;
|
||||
QskSkin* createSkin( const QString& name ) const;
|
||||
|
||||
QskSkin* skin();
|
||||
|
||||
QskSkin* setSkin( const QString& );
|
||||
QString skinName() const;
|
||||
|
||||
Q_SIGNALS:
|
||||
void skinChanged( QskSkin* );
|
||||
|
||||
protected:
|
||||
QskSkinManager();
|
||||
|
@ -12,7 +12,7 @@
|
||||
#include "QskControl.h"
|
||||
#include "QskHintAnimator.h"
|
||||
#include "QskMargins.h"
|
||||
#include "QskSetup.h"
|
||||
#include "QskSkinManager.h"
|
||||
#include "QskSkin.h"
|
||||
#include "QskSkinHintTable.h"
|
||||
#include "QskSkinTransition.h"
|
||||
@ -1520,7 +1520,7 @@ QskSkin* QskSkinnable::effectiveSkin() const
|
||||
skin = qskEffectiveSkin( item->window() );
|
||||
}
|
||||
|
||||
return skin ? skin : qskSetup->skin();
|
||||
return skin ? skin : qskSkinManager->skin();
|
||||
}
|
||||
|
||||
QskAspect::Variation QskSkinnable::effectiveVariation() const
|
||||
|
@ -662,7 +662,7 @@ void QskWindow::enforceSkin()
|
||||
// let's create a default skin on the GUI thread - whatever it is
|
||||
// good for.
|
||||
|
||||
( void ) qskSetup->skin();
|
||||
( void ) qskSkinManager->skin();
|
||||
qskEnforcedSkin = true;
|
||||
}
|
||||
|
||||
@ -718,7 +718,7 @@ QskSkin* qskEffectiveSkin( const QQuickWindow* window )
|
||||
return skin;
|
||||
}
|
||||
|
||||
return qskSetup->skin();
|
||||
return qskSkinManager->skin();
|
||||
}
|
||||
|
||||
#include "moc_QskWindow.cpp"
|
||||
|
@ -5,7 +5,6 @@
|
||||
|
||||
#include "SkinnyNamespace.h"
|
||||
|
||||
#include <QskSetup.h>
|
||||
#include <QskSkinManager.h>
|
||||
#include <QskSkin.h>
|
||||
#include <QskSkinTransition.h>
|
||||
@ -13,13 +12,13 @@
|
||||
|
||||
#include <QGuiApplication>
|
||||
#include <QByteArray>
|
||||
#include <QFont>
|
||||
|
||||
#define STRINGIFY(x) #x
|
||||
#define STRING(x) STRINGIFY(x)
|
||||
|
||||
#if defined( PLUGIN_PATH )
|
||||
|
||||
#include <QByteArray>
|
||||
#include <QDir>
|
||||
|
||||
#define STRINGIFY(x) #x
|
||||
@ -74,7 +73,7 @@ static bool pluginPath = initPluginPath();
|
||||
}
|
||||
|
||||
if ( !skinNames.isEmpty() )
|
||||
qskSetup->setSkin( skinNames[0] );
|
||||
qskSkinManager->setSkin( skinNames[0] );
|
||||
}
|
||||
|
||||
Q_COREAPP_STARTUP_FUNCTION( initSkins )
|
||||
@ -136,7 +135,7 @@ void Skinny::changeSkin( QskAnimationHint hint )
|
||||
const auto names = qskSkinManager->skinNames();
|
||||
if ( names.size() > 1 )
|
||||
{
|
||||
auto index = names.indexOf( qskSetup->skinName() );
|
||||
auto index = names.indexOf( qskSkinManager->skinName() );
|
||||
index = ( index + 1 ) % names.size();
|
||||
|
||||
setSkin( index, hint );
|
||||
@ -149,14 +148,14 @@ void Skinny::setSkin( int index, QskAnimationHint hint )
|
||||
if ( names.size() <= 1 )
|
||||
return;
|
||||
|
||||
if ( index == names.indexOf( qskSetup->skinName() ) )
|
||||
if ( index == names.indexOf( qskSkinManager->skinName() ) )
|
||||
return;
|
||||
|
||||
auto oldSkin = qskSetup->skin();
|
||||
if ( oldSkin->parent() == qskSetup )
|
||||
auto oldSkin = qskSkinManager->skin();
|
||||
if ( oldSkin->parent() == qskSkinManager )
|
||||
oldSkin->setParent( nullptr ); // otherwise setSkin deletes it
|
||||
|
||||
if ( auto newSkin = qskSetup->setSkin( names[ index ] ) )
|
||||
if ( auto newSkin = qskSkinManager->setSkin( names[ index ] ) )
|
||||
{
|
||||
QskSkinTransition transition;
|
||||
|
||||
@ -174,7 +173,7 @@ void Skinny::setSkin( int index, QskAnimationHint hint )
|
||||
|
||||
void Skinny::changeFonts( int increment )
|
||||
{
|
||||
auto skin = qskSetup->skin();
|
||||
auto skin = qskSkinManager->skin();
|
||||
|
||||
const auto fonts = skin->fonts();
|
||||
|
||||
@ -199,7 +198,7 @@ void Skinny::changeFonts( int increment )
|
||||
skin->setFont( role, font );
|
||||
}
|
||||
|
||||
Q_EMIT qskSetup->skinChanged( skin );
|
||||
Q_EMIT qskSkinManager->skinChanged( skin );
|
||||
}
|
||||
|
||||
void Skinny::init()
|
||||
|
Loading…
x
Reference in New Issue
Block a user