@ -35,6 +35,7 @@
# include <KConfigGroup>
# include <KSharedConfig>
# define DEFAULTCOLORSCHEME "default.colors"
# define REVERSEDCOLORSCHEME "reversed.colors"
namespace Latte {
@ -62,7 +63,7 @@ PlasmaThemeExtended::~PlasmaThemeExtended()
{
saveConfig ( ) ;
m_ normal Scheme- > deleteLater ( ) ;
m_ default Scheme- > deleteLater ( ) ;
m_reversedScheme - > deleteLater ( ) ;
}
@ -128,38 +129,31 @@ bool PlasmaThemeExtended::themeHasExtendedInfo() const
SchemeColors * PlasmaThemeExtended : : defaultTheme ( ) const
{
return m_ normal Scheme;
return m_ default Scheme;
}
SchemeColors * PlasmaThemeExtended : : lightTheme ( ) const
{
return m_isLightTheme ? m_ normal Scheme : m_reversedScheme ;
return m_isLightTheme ? m_ default Scheme : m_reversedScheme ;
}
SchemeColors * PlasmaThemeExtended : : darkTheme ( ) const
{
return ! m_isLightTheme ? m_ normal Scheme : m_reversedScheme ;
return ! m_isLightTheme ? m_ default Scheme : m_reversedScheme ;
}
void PlasmaThemeExtended : : set Norm alSchemeFile( const QString & file )
void PlasmaThemeExtended : : set Origin alSchemeFile( const QString & file )
{
if ( m_ norm alSchemePath = = file ) {
if ( m_ origin alSchemePath = = file ) {
return ;
}
m_ norm alSchemePath = file ;
m_ origin alSchemePath = file ;
if ( m_normalScheme ) {
disconnect ( m_normalScheme , & SchemeColors : : colorsChanged , this , & PlasmaThemeExtended : : loadThemeLightness ) ;
m_normalScheme - > deleteLater ( ) ;
}
m_normalScheme = new SchemeColors ( this , m_normalSchemePath , true ) ;
connect ( m_normalScheme , & SchemeColors : : colorsChanged , this , & PlasmaThemeExtended : : loadThemeLightness ) ;
qDebug ( ) < < " plasma theme normal colors ::: " < < m_normalSchemePath ;
qDebug ( ) < < " plasma theme original colors ::: " < < m_originalSchemePath ;
updateDefaultScheme ( ) ;
updateReversedScheme ( ) ;
loadThemeLightness ( ) ;
@ -167,11 +161,59 @@ void PlasmaThemeExtended::setNormalSchemeFile(const QString &file)
emit themeChanged ( ) ;
}
//! WM records need to be updated based on the colors that
//! plasma will use in order to be consistent. Such an example
//! are the Breeze color schemes that have different values for
//! WM and the plasma theme records
void PlasmaThemeExtended : : updateDefaultScheme ( )
{
QString defaultFilePath = m_extendedThemeDir . path ( ) + " / " + DEFAULTCOLORSCHEME ;
if ( QFileInfo ( defaultFilePath ) . exists ( ) ) {
QFile ( defaultFilePath ) . remove ( ) ;
}
QFile ( m_originalSchemePath ) . copy ( defaultFilePath ) ;
m_defaultSchemePath = defaultFilePath ;
updateDefaultSchemeValues ( ) ;
if ( m_defaultScheme ) {
disconnect ( m_defaultScheme , & SchemeColors : : colorsChanged , this , & PlasmaThemeExtended : : loadThemeLightness ) ;
m_defaultScheme - > deleteLater ( ) ;
}
m_defaultScheme = new SchemeColors ( this , m_defaultSchemePath , true ) ;
connect ( m_defaultScheme , & SchemeColors : : colorsChanged , this , & PlasmaThemeExtended : : loadThemeLightness ) ;
qDebug ( ) < < " plasma theme default colors ::: " < < m_defaultSchemePath ;
}
void PlasmaThemeExtended : : updateDefaultSchemeValues ( )
{
//! update WM values based on original scheme
KSharedConfigPtr originalPtr = KSharedConfig : : openConfig ( m_originalSchemePath ) ;
KSharedConfigPtr defaultPtr = KSharedConfig : : openConfig ( m_defaultSchemePath ) ;
if ( originalPtr & & defaultPtr ) {
KConfigGroup originalViewGroup ( originalPtr , " Colors:View " ) ;
KConfigGroup defaultWMGroup ( defaultPtr , " WM " ) ;
defaultWMGroup . writeEntry ( " activeBackground " , originalViewGroup . readEntry ( " BackgroundNormal " , QColor ( ) ) ) ;
defaultWMGroup . writeEntry ( " activeForeground " , originalViewGroup . readEntry ( " ForegroundNormal " , QColor ( ) ) ) ;
defaultWMGroup . sync ( ) ;
}
}
void PlasmaThemeExtended : : updateReversedScheme ( )
{
QString reversedFilePath = m_extendedThemeDir . path ( ) + " / " + REVERSEDCOLORSCHEME ;
QFile ( m_normalSchemePath ) . copy ( reversedFilePath ) ;
if ( QFileInfo ( reversedFilePath ) . exists ( ) ) {
QFile ( reversedFilePath ) . remove ( ) ;
}
QFile ( m_originalSchemePath ) . copy ( reversedFilePath ) ;
m_reversedSchemePath = reversedFilePath ;
updateReversedSchemeValues ( ) ;
@ -188,10 +230,10 @@ void PlasmaThemeExtended::updateReversedScheme()
void PlasmaThemeExtended : : updateReversedSchemeValues ( )
{
//! reverse values based on original scheme
KSharedConfigPtr normalPtr = KSharedConfig : : openConfig ( m_norm alSchemePath) ;
KSharedConfigPtr originalPtr = KSharedConfig : : openConfig ( m_origin alSchemePath) ;
KSharedConfigPtr reversedPtr = KSharedConfig : : openConfig ( m_reversedSchemePath ) ;
if ( norm alPtr & & reversedPtr ) {
if ( origin alPtr & & reversedPtr ) {
foreach ( auto groupName , reversedPtr - > groupList ( ) ) {
if ( groupName ! = " Colors:Button " ) {
KConfigGroup reversedGroup ( reversedPtr , groupName ) ;
@ -199,10 +241,10 @@ void PlasmaThemeExtended::updateReversedSchemeValues()
if ( reversedGroup . keyList ( ) . contains ( " BackgroundNormal " )
& & reversedGroup . keyList ( ) . contains ( " ForegroundNormal " ) ) {
//! reverse usual text/background values
KConfigGroup normalGroup( norm alPtr, groupName ) ;
KConfigGroup originalGroup( origin alPtr, groupName ) ;
reversedGroup . writeEntry ( " BackgroundNormal " , norm alGroup. readEntry ( " ForegroundNormal " , QColor ( ) ) ) ;
reversedGroup . writeEntry ( " ForegroundNormal " , norm alGroup. readEntry ( " BackgroundNormal " , QColor ( ) ) ) ;
reversedGroup . writeEntry ( " BackgroundNormal " , origin alGroup. readEntry ( " ForegroundNormal " , QColor ( ) ) ) ;
reversedGroup . writeEntry ( " ForegroundNormal " , origin alGroup. readEntry ( " BackgroundNormal " , QColor ( ) ) ) ;
reversedGroup . sync ( ) ;
}
@ -210,33 +252,34 @@ void PlasmaThemeExtended::updateReversedSchemeValues()
}
//! update WM group
KConfigGroup reversedGroup ( reversedPtr , " WM " ) ;
KConfigGroup reversedWMGroup ( reversedPtr , " WM " ) ;
KConfigGroup originalViewGroup ( originalPtr , " Colors:View " ) ;
if ( reversed Group. keyList ( ) . contains ( " activeBackground " )
& & reversed Group. keyList ( ) . contains ( " activeForeground " )
& & reversed Group. keyList ( ) . contains ( " inactiveBackground " )
& & reversed Group. keyList ( ) . contains ( " inactiveForeground " ) ) {
if ( reversed WM Group. keyList ( ) . contains ( " activeBackground " )
& & reversed WM Group. keyList ( ) . contains ( " activeForeground " )
& & reversed WM Group. keyList ( ) . contains ( " inactiveBackground " )
& & reversed WM Group. keyList ( ) . contains ( " inactiveForeground " ) ) {
//! reverse usual wm titlebar values
KConfigGroup normalGroup( norm alPtr, " WM " ) ;
reversed Group. writeEntry ( " activeBackground " , normal Group. readEntry ( " active Foreground" , QColor ( ) ) ) ;
reversed Group. writeEntry ( " activeForeground " , normal Group. readEntry ( " active Background" , QColor ( ) ) ) ;
reversed Group. writeEntry ( " inactiveBackground " , norm alGroup. readEntry ( " inactiveForeground " , QColor ( ) ) ) ;
reversed Group. writeEntry ( " inactiveForeground " , norm alGroup. readEntry ( " inactiveBackground " , QColor ( ) ) ) ;
reversed Group. sync ( ) ;
KConfigGroup originalGroup( origin alPtr, " WM " ) ;
reversed WM Group. writeEntry ( " activeBackground " , originalView Group. readEntry ( " ForegroundNormal " , QColor ( ) ) ) ;
reversed WM Group. writeEntry ( " activeForeground " , originalView Group. readEntry ( " BackgroundNormal " , QColor ( ) ) ) ;
reversed WM Group. writeEntry ( " inactiveBackground " , origin alGroup. readEntry ( " inactiveForeground " , QColor ( ) ) ) ;
reversed WM Group. writeEntry ( " inactiveForeground " , origin alGroup. readEntry ( " inactiveBackground " , QColor ( ) ) ) ;
reversed WM Group. sync ( ) ;
}
if ( reversed Group. keyList ( ) . contains ( " activeBlend " )
& & reversed Group. keyList ( ) . contains ( " inactiveBlend " ) ) {
KConfigGroup normalGroup( norm alPtr, " WM " ) ;
reversed Group. writeEntry ( " activeBlend " , norm alGroup. readEntry ( " inactiveBlend " , QColor ( ) ) ) ;
reversed Group. writeEntry ( " inactiveBlend " , norm alGroup. readEntry ( " activeBlend " , QColor ( ) ) ) ;
reversed Group. sync ( ) ;
if ( reversed WM Group. keyList ( ) . contains ( " activeBlend " )
& & reversed WM Group. keyList ( ) . contains ( " inactiveBlend " ) ) {
KConfigGroup originalGroup( origin alPtr, " WM " ) ;
reversed WM Group. writeEntry ( " activeBlend " , origin alGroup. readEntry ( " inactiveBlend " , QColor ( ) ) ) ;
reversed WM Group. writeEntry ( " inactiveBlend " , origin alGroup. readEntry ( " activeBlend " , QColor ( ) ) ) ;
reversed WM Group. sync ( ) ;
}
//! update scheme name
QString normalSchemeName = SchemeColors : : schemeName ( m_norm alSchemePath) ;
QString originalSchemeName = SchemeColors : : schemeName ( m_origin alSchemePath) ;
KConfigGroup generalGroup ( reversedPtr , " General " ) ;
generalGroup . writeEntry ( " Name " , norm alSchemeName + " _reversed " ) ;
generalGroup . writeEntry ( " Name " , origin alSchemeName + " _reversed " ) ;
generalGroup . sync ( ) ;
}
}
@ -309,7 +352,7 @@ void PlasmaThemeExtended::loadThemePaths()
QString themeColorScheme = m_themePath + " /colors " ;
if ( QFileInfo ( themeColorScheme ) . exists ( ) ) {
set Norm alSchemeFile( themeColorScheme ) ;
set Origin alSchemeFile( themeColorScheme ) ;
} else {
//! when plasma theme uses the kde colors
//! we track when kde color scheme is changing
@ -319,24 +362,24 @@ void PlasmaThemeExtended::loadThemePaths()
m_kdeConnections [ 0 ] = connect ( KDirWatch : : self ( ) , & KDirWatch : : dirty , this , [ & , kdeSettingsFile ] ( const QString & path ) {
if ( path = = kdeSettingsFile ) {
this - > set Norm alSchemeFile( SchemeColors : : possibleSchemeFile ( " kdeglobals " ) ) ;
this - > set Origin alSchemeFile( SchemeColors : : possibleSchemeFile ( " kdeglobals " ) ) ;
}
} ) ;
m_kdeConnections [ 1 ] = connect ( KDirWatch : : self ( ) , & KDirWatch : : created , this , [ & , kdeSettingsFile ] ( const QString & path ) {
if ( path = = kdeSettingsFile ) {
this - > set Norm alSchemeFile( SchemeColors : : possibleSchemeFile ( " kdeglobals " ) ) ;
this - > set Origin alSchemeFile( SchemeColors : : possibleSchemeFile ( " kdeglobals " ) ) ;
}
} ) ;
set Norm alSchemeFile( SchemeColors : : possibleSchemeFile ( " kdeglobals " ) ) ;
set Origin alSchemeFile( SchemeColors : : possibleSchemeFile ( " kdeglobals " ) ) ;
}
}
void PlasmaThemeExtended : : loadThemeLightness ( )
{
float textColorLum = Latte : : colorLumina ( m_ normal Scheme- > textColor ( ) ) ;
float backColorLum = Latte : : colorLumina ( m_ normal Scheme- > backgroundColor ( ) ) ;
float textColorLum = Latte : : colorLumina ( m_ default Scheme- > textColor ( ) ) ;
float backColorLum = Latte : : colorLumina ( m_ default Scheme- > backgroundColor ( ) ) ;
if ( backColorLum > textColorLum ) {
m_isLightTheme = true ;