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 }