File indexing completed on 2024-04-28 17:04:38

0001 /*****************************************************************************
0002  *   Copyright 2007 - 2010 Craig Drummond <craig.p.drummond@gmail.com>       *
0003  *   Copyright 2013 - 2015 Yichao Yu <yyc1992@gmail.com>                     *
0004  *                                                                           *
0005  *   This program is free software; you can redistribute it and/or modify    *
0006  *   it under the terms of the GNU Lesser General Public License as          *
0007  *   published by the Free Software Foundation; either version 2.1 of the    *
0008  *   License, or (at your option) version 3, or any later version accepted   *
0009  *   by the membership of KDE e.V. (or its successor approved by the         *
0010  *   membership of KDE e.V.), which shall act as a proxy defined in          *
0011  *   Section 6 of version 3 of the license.                                  *
0012  *                                                                           *
0013  *   This program is distributed in the hope that it will be useful,         *
0014  *   but WITHOUT ANY WARRANTY; without even the implied warranty of          *
0015  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU       *
0016  *   Lesser General Public License for more details.                         *
0017  *                                                                           *
0018  *   You should have received a copy of the GNU Lesser General Public        *
0019  *   License along with this library. If not,                                *
0020  *   see <http://www.gnu.org/licenses/>.                                     *
0021  *****************************************************************************/
0022 
0023 #include <KConfigCore/KConfig>
0024 #include <KConfigCore/KConfigGroup>
0025 #include <KConfigWidgets/KColorScheme>
0026 #include <QApplication>
0027 #include "qtcurveshadowconfiguration.h"
0028 
0029 namespace QtCurve {
0030 namespace KWin {
0031 
0032 ShadowConfig::ShadowConfig(QPalette::ColorGroup colorGroup)
0033     : m_colorGroup(colorGroup)
0034 {
0035     defaults();
0036 }
0037 
0038 void ShadowConfig::defaults()
0039 {
0040     m_hOffset = 0;
0041     m_vOffset = 5;
0042     if(QPalette::Active==m_colorGroup)
0043     {
0044         m_size = 35;
0045         setColorType(CT_FOCUS);
0046         m_shadowType = SH_ACTIVE;
0047     }
0048     else
0049     {
0050         m_size = 30;
0051         setColorType(CT_GRAY);
0052         m_shadowType = SH_INACTIVE;
0053     }
0054 }
0055 
0056 void ShadowConfig::setColorType(ColorType ct)
0057 {
0058     m_colorType = ct;
0059     switch (m_colorType) {
0060     default:
0061     case CT_FOCUS:
0062         m_color = KColorScheme(m_colorGroup)
0063             .decoration(KColorScheme::FocusColor).color();
0064         break;
0065     case CT_HOVER:
0066         m_color = KColorScheme(m_colorGroup)
0067             .decoration(KColorScheme::HoverColor).color();
0068         break;
0069     case CT_SELECTION:
0070         m_color = QApplication::palette().color(m_colorGroup,
0071                                                 QPalette::Highlight);
0072         break;
0073     case CT_TITLEBAR:
0074         m_color = KColorScheme(m_colorGroup, KColorScheme::Window)
0075             .background(m_colorGroup == QPalette::Active ?
0076                         KColorScheme::ActiveBackground :
0077                         KColorScheme::NormalBackground)
0078             .color();
0079         break;
0080     case CT_GRAY:
0081         m_color = QColor("#393835");
0082         break;
0083     case CT_CUSTOM:
0084         break;
0085     }
0086 }
0087 
0088 #define CFG_GROUP (QPalette::Active==m_colorGroup ? "ActiveShadows" : "InactiveShadows")
0089 
0090 #define READ_ENTRY(name, field) do {                    \
0091         field = group.readEntry(name, def.field);       \
0092     } while (0)
0093 
0094 void ShadowConfig::load(KConfig *cfg)
0095 {
0096     KConfigGroup group(cfg, CFG_GROUP);
0097     ShadowConfig def(m_colorGroup);
0098 
0099     READ_ENTRY("Size", m_size);
0100     READ_ENTRY("HOffset", m_hOffset);
0101     READ_ENTRY("VOffset", m_vOffset);
0102     READ_ENTRY("ColorType", m_colorType);
0103     READ_ENTRY("ShadowType", m_shadowType);
0104 
0105     if(CT_CUSTOM==m_colorType)
0106         READ_ENTRY("Color", m_color);
0107     if(m_size<MIN_SIZE || m_size>MAX_SIZE)
0108         m_size=def.shadowSize();
0109     if(m_hOffset<MIN_OFFSET || m_hOffset>MAX_OFFSET)
0110         m_hOffset=def.horizontalOffset();
0111     if(m_vOffset<MIN_OFFSET || m_vOffset>MAX_OFFSET)
0112         m_vOffset=def.verticalOffset();
0113     setColorType((ColorType)m_colorType);
0114 }
0115 
0116 #define WRITE_ENTRY(name, field) do {           \
0117         if (def.field == field) {               \
0118             group.deleteEntry(name);            \
0119         } else {                                \
0120             group.writeEntry(name, field);      \
0121         }                                       \
0122     } while (0)
0123 
0124 void ShadowConfig::save(KConfig *cfg)
0125 {
0126     KConfigGroup group(cfg, CFG_GROUP);
0127     ShadowConfig def(m_colorGroup);
0128 
0129     WRITE_ENTRY("Size", m_size);
0130     WRITE_ENTRY("HOffset", m_hOffset);
0131     WRITE_ENTRY("VOffset", m_vOffset);
0132     WRITE_ENTRY("ColorType", m_colorType);
0133     WRITE_ENTRY("ShadowType", m_shadowType);
0134 
0135     if (m_colorType != CT_CUSTOM) {
0136         group.deleteEntry("Color");
0137     } else {
0138         WRITE_ENTRY("Color", m_color);
0139     }
0140 }
0141 
0142 }
0143 }