summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/styles/theme/othemebase.cpp14
1 files changed, 1 insertions, 13 deletions
diff --git a/noncore/styles/theme/othemebase.cpp b/noncore/styles/theme/othemebase.cpp
index acac847..62b3a11 100644
--- a/noncore/styles/theme/othemebase.cpp
+++ b/noncore/styles/theme/othemebase.cpp
@@ -1,1217 +1,1205 @@
1/* This file is part of the KDE libraries 1/* This file is part of the KDE libraries
2 Copyright (C) 1999 Daniel M. Duley <mosfet@kde.org> 2 Copyright (C) 1999 Daniel M. Duley <mosfet@kde.org>
3 3
4 This library is free software; you can redistribute it and/or 4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public 5 modify it under the terms of the GNU Library General Public
6 License version 2 as published by the Free Software Foundation. 6 License version 2 as published by the Free Software Foundation.
7 7
8 This library is distributed in the hope that it will be useful, 8 This library is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of 9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 Library General Public License for more details. 11 Library General Public License for more details.
12 12
13 You should have received a copy of the GNU Library General Public License 13 You should have received a copy of the GNU Library General Public License
14 along with this library; see the file COPYING.LIB. If not, write to 14 along with this library; see the file COPYING.LIB. If not, write to
15 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 15 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
16 Boston, MA 02111-1307, USA. 16 Boston, MA 02111-1307, USA.
17*/ 17*/
18#include "othemebase.h" 18#include "othemebase.h"
19#include "ogfxeffect.h" 19#include "ogfxeffect.h"
20#include <qpe/qpeapplication.h> 20#include <qpe/qpeapplication.h>
21//#include <kdebug.h> 21//#include <kdebug.h>
22//#include <klocale.h> 22//#include <klocale.h>
23#include <qpe/config.h> 23#include <qpe/config.h>
24//#include <kglobal.h> 24//#include <kglobal.h>
25//#include <kglobalsettings.h> 25//#include <kglobalsettings.h>
26//#include <kstddirs.h> 26//#include <kstddirs.h>
27#include <qfile.h> 27#include <qfile.h>
28#include <qtextstream.h> 28#include <qtextstream.h>
29#include <qdir.h> 29#include <qdir.h>
30#include <qpainter.h> 30#include <qpainter.h>
31#include <qbitmap.h> 31#include <qbitmap.h>
32#include <stdlib.h> 32#include <stdlib.h>
33#include <qstringlist.h> 33#include <qstringlist.h>
34 34
35#include <stdio.h> 35#include <stdio.h>
36 36
37 37
38template class QIntCache<OThemePixmap> 38template class QIntCache<OThemePixmap>
39; 39;
40 40
41static const char *widgetEntries[] = 41static const char *widgetEntries[] =
42 { // unsunken widgets (see header) 42 { // unsunken widgets (see header)
43 "PushButton", "ComboBox", "HSBarSlider", "VSBarSlider", "Bevel", "ToolButton", 43 "PushButton", "ComboBox", "HSBarSlider", "VSBarSlider", "Bevel", "ToolButton",
44 "ScrollButton", "HScrollDeco", "VScrollDeco", "ComboDeco", "MenuItem", "Tab", 44 "ScrollButton", "HScrollDeco", "VScrollDeco", "ComboDeco", "MenuItem", "Tab",
45 "ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight", 45 "ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight",
46 // sunken widgets 46 // sunken widgets
47 "PushButtonDown", "ComboBoxDown", "HSBarSliderDown", "VSBarSliderDown", 47 "PushButtonDown", "ComboBoxDown", "HSBarSliderDown", "VSBarSliderDown",
48 "BevelDown", "ToolButtonDown", "ScrollButtonDown", "HScrollDecoDown", 48 "BevelDown", "ToolButtonDown", "ScrollButtonDown", "HScrollDecoDown",
49 "VScrollDecoDown", "ComboDecoDown", "MenuItemDown", "TabDown", "SunkenArrowUp", 49 "VScrollDecoDown", "ComboDecoDown", "MenuItemDown", "TabDown", "SunkenArrowUp",
50 "SunkenArrowDown", "SunkenArrowLeft", "SunkenArrowRight", 50 "SunkenArrowDown", "SunkenArrowLeft", "SunkenArrowRight",
51 // everything else 51 // everything else
52 "HScrollGroove", "VScrollGroove", "Slider", "SliderGroove", "CheckBoxDown", 52 "HScrollGroove", "VScrollGroove", "Slider", "SliderGroove", "CheckBoxDown",
53 "CheckBox", "RadioDown", "Radio", "HBarHandle", "VBarHandle", 53 "CheckBox", "RadioDown", "Radio", "HBarHandle", "VBarHandle",
54 "ToolBar", "Splitter", "CheckMark", "MenuBar", "DisableArrowUp", 54 "ToolBar", "Splitter", "CheckMark", "MenuBar", "DisableArrowUp",
55 "DisableArrowDown", "DisableArrowLeft", "DisableArrowRight", "ProgressBar", 55 "DisableArrowDown", "DisableArrowLeft", "DisableArrowRight", "ProgressBar",
56 "ProgressBackground", "MenuBarItem", "Background" 56 "ProgressBackground", "MenuBarItem", "Background"
57 }; 57 };
58 58
59#define INHERIT_ITEMS 16 59#define INHERIT_ITEMS 16
60 60
61 61
62// This is used to encode the keys. I used to use masks but I think this 62// This is used to encode the keys. I used to use masks but I think this
63// bitfield is nicer :) I don't know why C++ coders don't use these more.. 63// bitfield is nicer :) I don't know why C++ coders don't use these more..
64// (mosfet) 64// (mosfet)
65struct kthemeKeyData 65struct kthemeKeyData
66{ 66{
67unsigned int id : 67unsigned int id :
68 6; 68 6;
69unsigned int width : 69unsigned int width :
70 12; 70 12;
71unsigned int height : 71unsigned int height :
72 12; 72 12;
73unsigned int border : 73unsigned int border :
74 1; 74 1;
75unsigned int mask : 75unsigned int mask :
76 1; 76 1;
77}; 77};
78 78
79union kthemeKey{ 79union kthemeKey{
80 kthemeKeyData data; 80 kthemeKeyData data;
81 unsigned int cacheKey; 81 unsigned int cacheKey;
82}; 82};
83 83
84class MyConfig : public Config
85{
86public:
87 MyConfig ( const QString &f, Domain d ) : Config ( f, d )
88 { }
89
90 bool hasGroup ( const QString &gname ) const
91 {
92 QMap< QString, ConfigGroup>::ConstIterator it = groups. find ( gname );
93 return ( it != groups.end() );
94 }
95};
96 84
97void OThemeBase::generateBorderPix( int i ) 85void OThemeBase::generateBorderPix( int i )
98{ 86{
99 // separate pixmap into separate components 87 // separate pixmap into separate components
100 if ( pbPixmaps[ i ] ) { 88 if ( pbPixmaps[ i ] ) {
101 // evidently I have to do masks manually... 89 // evidently I have to do masks manually...
102 const QBitmap * srcMask = pbPixmaps[ i ] ->mask(); 90 const QBitmap * srcMask = pbPixmaps[ i ] ->mask();
103 QBitmap destMask( pbWidth[ i ], pbWidth[ i ] ); 91 QBitmap destMask( pbWidth[ i ], pbWidth[ i ] );
104 QPixmap tmp( pbWidth[ i ], pbWidth[ i ] ); 92 QPixmap tmp( pbWidth[ i ], pbWidth[ i ] );
105 93
106 bitBlt( &tmp, 0, 0, pbPixmaps[ i ], 0, 0, pbWidth[ i ], pbWidth[ i ], 94 bitBlt( &tmp, 0, 0, pbPixmaps[ i ], 0, 0, pbWidth[ i ], pbWidth[ i ],
107 Qt::CopyROP, false ); 95 Qt::CopyROP, false );
108 if ( srcMask ) { 96 if ( srcMask ) {
109 bitBlt( &destMask, 0, 0, srcMask, 0, 0, pbWidth[ i ], pbWidth[ i ], 97 bitBlt( &destMask, 0, 0, srcMask, 0, 0, pbWidth[ i ], pbWidth[ i ],
110 Qt::CopyROP, false ); 98 Qt::CopyROP, false );
111 tmp.setMask( destMask ); 99 tmp.setMask( destMask );
112 } 100 }
113 pbPixmaps[ i ] ->setBorder( OThemePixmap::TopLeft, tmp ); 101 pbPixmaps[ i ] ->setBorder( OThemePixmap::TopLeft, tmp );
114 102
115 bitBlt( &tmp, 0, 0, pbPixmaps[ i ], pbPixmaps[ i ] ->width() - pbWidth[ i ], 0, 103 bitBlt( &tmp, 0, 0, pbPixmaps[ i ], pbPixmaps[ i ] ->width() - pbWidth[ i ], 0,
116 pbWidth[ i ], pbWidth[ i ], Qt::CopyROP, false ); 104 pbWidth[ i ], pbWidth[ i ], Qt::CopyROP, false );
117 if ( srcMask ) { 105 if ( srcMask ) {
118 bitBlt( &destMask, 0, 0, srcMask, pbPixmaps[ i ] ->width() - pbWidth[ i ], 106 bitBlt( &destMask, 0, 0, srcMask, pbPixmaps[ i ] ->width() - pbWidth[ i ],
119 0, pbWidth[ i ], pbWidth[ i ], Qt::CopyROP, false ); 107 0, pbWidth[ i ], pbWidth[ i ], Qt::CopyROP, false );
120 tmp.setMask( destMask ); 108 tmp.setMask( destMask );
121 } 109 }
122 pbPixmaps[ i ] ->setBorder( OThemePixmap::TopRight, tmp ); 110 pbPixmaps[ i ] ->setBorder( OThemePixmap::TopRight, tmp );
123 111
124 bitBlt( &tmp, 0, 0, pbPixmaps[ i ], 0, pbPixmaps[ i ] ->height() - pbWidth[ i ], 112 bitBlt( &tmp, 0, 0, pbPixmaps[ i ], 0, pbPixmaps[ i ] ->height() - pbWidth[ i ],
125 pbWidth[ i ], pbWidth[ i ], Qt::CopyROP, false ); 113 pbWidth[ i ], pbWidth[ i ], Qt::CopyROP, false );
126 if ( srcMask ) { 114 if ( srcMask ) {
127 bitBlt( &destMask, 0, 0, srcMask, 0, pbPixmaps[ i ] ->height() - pbWidth[ i ], 115 bitBlt( &destMask, 0, 0, srcMask, 0, pbPixmaps[ i ] ->height() - pbWidth[ i ],
128 pbWidth[ i ], pbWidth[ i ], Qt::CopyROP, false ); 116 pbWidth[ i ], pbWidth[ i ], Qt::CopyROP, false );
129 tmp.setMask( destMask ); 117 tmp.setMask( destMask );
130 } 118 }
131 pbPixmaps[ i ] ->setBorder( OThemePixmap::BottomLeft, tmp ); 119 pbPixmaps[ i ] ->setBorder( OThemePixmap::BottomLeft, tmp );
132 120
133 bitBlt( &tmp, 0, 0, pbPixmaps[ i ], pbPixmaps[ i ] ->width() - pbWidth[ i ], 121 bitBlt( &tmp, 0, 0, pbPixmaps[ i ], pbPixmaps[ i ] ->width() - pbWidth[ i ],
134 pbPixmaps[ i ] ->height() - pbWidth[ i ], pbWidth[ i ], pbWidth[ i ], 122 pbPixmaps[ i ] ->height() - pbWidth[ i ], pbWidth[ i ], pbWidth[ i ],
135 Qt::CopyROP, false ); 123 Qt::CopyROP, false );
136 if ( srcMask ) { 124 if ( srcMask ) {
137 bitBlt( &destMask, 0, 0, srcMask, pbPixmaps[ i ] ->width() - pbWidth[ i ], 125 bitBlt( &destMask, 0, 0, srcMask, pbPixmaps[ i ] ->width() - pbWidth[ i ],
138 pbPixmaps[ i ] ->height() - pbWidth[ i ], pbWidth[ i ], pbWidth[ i ], 126 pbPixmaps[ i ] ->height() - pbWidth[ i ], pbWidth[ i ], pbWidth[ i ],
139 Qt::CopyROP, false ); 127 Qt::CopyROP, false );
140 tmp.setMask( destMask ); 128 tmp.setMask( destMask );
141 } 129 }
142 pbPixmaps[ i ] ->setBorder( OThemePixmap::BottomRight, tmp ); 130 pbPixmaps[ i ] ->setBorder( OThemePixmap::BottomRight, tmp );
143 131
144 tmp.resize( pbPixmaps[ i ] ->width() - pbWidth[ i ] * 2, pbWidth[ i ] ); 132 tmp.resize( pbPixmaps[ i ] ->width() - pbWidth[ i ] * 2, pbWidth[ i ] );
145 destMask.resize( pbPixmaps[ i ] ->width() - pbWidth[ i ] * 2, pbWidth[ i ] ); 133 destMask.resize( pbPixmaps[ i ] ->width() - pbWidth[ i ] * 2, pbWidth[ i ] );
146 bitBlt( &tmp, 0, 0, pbPixmaps[ i ], pbWidth[ i ], 0, 134 bitBlt( &tmp, 0, 0, pbPixmaps[ i ], pbWidth[ i ], 0,
147 pbPixmaps[ i ] ->width() - pbWidth[ i ] * 2, pbWidth[ i ], Qt::CopyROP, false ); 135 pbPixmaps[ i ] ->width() - pbWidth[ i ] * 2, pbWidth[ i ], Qt::CopyROP, false );
148 if ( srcMask ) { 136 if ( srcMask ) {
149 bitBlt( &destMask, 0, 0, srcMask, pbWidth[ i ], 0, 137 bitBlt( &destMask, 0, 0, srcMask, pbWidth[ i ], 0,
150 pbPixmaps[ i ] ->width() - pbWidth[ i ] * 2, pbWidth[ i ], 138 pbPixmaps[ i ] ->width() - pbWidth[ i ] * 2, pbWidth[ i ],
151 Qt::CopyROP, false ); 139 Qt::CopyROP, false );
152 tmp.setMask( destMask ); 140 tmp.setMask( destMask );
153 } 141 }
154 pbPixmaps[ i ] ->setBorder( OThemePixmap::Top, tmp ); 142 pbPixmaps[ i ] ->setBorder( OThemePixmap::Top, tmp );
155 143
156 bitBlt( &tmp, 0, 0, pbPixmaps[ i ], pbWidth[ i ], 144 bitBlt( &tmp, 0, 0, pbPixmaps[ i ], pbWidth[ i ],
157 pbPixmaps[ i ] ->height() - pbWidth[ i ], 145 pbPixmaps[ i ] ->height() - pbWidth[ i ],
158 pbPixmaps[ i ] ->width() - pbWidth[ i ] * 2, pbWidth[ i ], Qt::CopyROP, false ); 146 pbPixmaps[ i ] ->width() - pbWidth[ i ] * 2, pbWidth[ i ], Qt::CopyROP, false );
159 if ( srcMask ) { 147 if ( srcMask ) {
160 bitBlt( &destMask, 0, 0, srcMask, pbWidth[ i ], 148 bitBlt( &destMask, 0, 0, srcMask, pbWidth[ i ],
161 pbPixmaps[ i ] ->height() - pbWidth[ i ], 149 pbPixmaps[ i ] ->height() - pbWidth[ i ],
162 pbPixmaps[ i ] ->width() - pbWidth[ i ] * 2, pbWidth[ i ], Qt::CopyROP, false ); 150 pbPixmaps[ i ] ->width() - pbWidth[ i ] * 2, pbWidth[ i ], Qt::CopyROP, false );
163 tmp.setMask( destMask ); 151 tmp.setMask( destMask );
164 } 152 }
165 pbPixmaps[ i ] ->setBorder( OThemePixmap::Bottom, tmp ); 153 pbPixmaps[ i ] ->setBorder( OThemePixmap::Bottom, tmp );
166 154
167 tmp.resize( pbWidth[ i ], pbPixmaps[ i ] ->height() - pbWidth[ i ] * 2 ); 155 tmp.resize( pbWidth[ i ], pbPixmaps[ i ] ->height() - pbWidth[ i ] * 2 );
168 destMask.resize( pbWidth[ i ], pbPixmaps[ i ] ->height() - pbWidth[ i ] * 2 ); 156 destMask.resize( pbWidth[ i ], pbPixmaps[ i ] ->height() - pbWidth[ i ] * 2 );
169 bitBlt( &tmp, 0, 0, pbPixmaps[ i ], 0, pbWidth[ i ], pbWidth[ i ], 157 bitBlt( &tmp, 0, 0, pbPixmaps[ i ], 0, pbWidth[ i ], pbWidth[ i ],
170 pbPixmaps[ i ] ->height() - pbWidth[ i ] * 2, Qt::CopyROP, false ); 158 pbPixmaps[ i ] ->height() - pbWidth[ i ] * 2, Qt::CopyROP, false );
171 if ( srcMask ) { 159 if ( srcMask ) {
172 bitBlt( &destMask, 0, 0, srcMask, 0, pbWidth[ i ], pbWidth[ i ], 160 bitBlt( &destMask, 0, 0, srcMask, 0, pbWidth[ i ], pbWidth[ i ],
173 pbPixmaps[ i ] ->height() - pbWidth[ i ] * 2, Qt::CopyROP, false ); 161 pbPixmaps[ i ] ->height() - pbWidth[ i ] * 2, Qt::CopyROP, false );
174 tmp.setMask( destMask ); 162 tmp.setMask( destMask );
175 } 163 }
176 164
177 pbPixmaps[ i ] ->setBorder( OThemePixmap::Left, tmp ); 165 pbPixmaps[ i ] ->setBorder( OThemePixmap::Left, tmp );
178 166
179 bitBlt( &tmp, 0, 0, pbPixmaps[ i ], pbPixmaps[ i ] ->width() - pbWidth[ i ], 167 bitBlt( &tmp, 0, 0, pbPixmaps[ i ], pbPixmaps[ i ] ->width() - pbWidth[ i ],
180 pbWidth[ i ], pbWidth[ i ], pbPixmaps[ i ] ->height() - pbWidth[ i ] * 2, 168 pbWidth[ i ], pbWidth[ i ], pbPixmaps[ i ] ->height() - pbWidth[ i ] * 2,
181 Qt::CopyROP, false ); 169 Qt::CopyROP, false );
182 if ( srcMask ) { 170 if ( srcMask ) {
183 bitBlt( &destMask, 0, 0, srcMask, pbPixmaps[ i ] ->width() - pbWidth[ i ], 171 bitBlt( &destMask, 0, 0, srcMask, pbPixmaps[ i ] ->width() - pbWidth[ i ],
184 pbWidth[ i ], pbWidth[ i ], pbPixmaps[ i ] ->height() - pbWidth[ i ] * 2, 172 pbWidth[ i ], pbWidth[ i ], pbPixmaps[ i ] ->height() - pbWidth[ i ] * 2,
185 Qt::CopyROP, false ); 173 Qt::CopyROP, false );
186 tmp.setMask( destMask ); 174 tmp.setMask( destMask );
187 } 175 }
188 pbPixmaps[ i ] ->setBorder( OThemePixmap::Right, tmp ); 176 pbPixmaps[ i ] ->setBorder( OThemePixmap::Right, tmp );
189 } 177 }
190 else 178 else
191 qDebug ( "OThemeBase: Tried making border from empty pixmap" ); 179 qDebug ( "OThemeBase: Tried making border from empty pixmap" );
192} 180}
193 181
194 182
195void OThemeBase::copyWidgetConfig( int sourceID, int destID, QString *pixnames, 183void OThemeBase::copyWidgetConfig( int sourceID, int destID, QString *pixnames,
196 QString *brdnames ) 184 QString *brdnames )
197{ 185{
198 scaleHints[ destID ] = scaleHints[ sourceID ]; 186 scaleHints[ destID ] = scaleHints[ sourceID ];
199 gradients[ destID ] = gradients[ sourceID ]; 187 gradients[ destID ] = gradients[ sourceID ];
200 blends[ destID ] = blends[ sourceID ]; 188 blends[ destID ] = blends[ sourceID ];
201 bContrasts[ destID ] = bContrasts[ sourceID ]; 189 bContrasts[ destID ] = bContrasts[ sourceID ];
202 borders[ destID ] = borders[ sourceID ]; 190 borders[ destID ] = borders[ sourceID ];
203 highlights[ destID ] = highlights[ sourceID ]; 191 highlights[ destID ] = highlights[ sourceID ];
204 192
205 if ( grLowColors[ sourceID ] ) 193 if ( grLowColors[ sourceID ] )
206 grLowColors[ destID ] = new QColor( *grLowColors[ sourceID ] ); 194 grLowColors[ destID ] = new QColor( *grLowColors[ sourceID ] );
207 else 195 else
208 grLowColors[ destID ] = NULL; 196 grLowColors[ destID ] = NULL;
209 197
210 if ( grHighColors[ sourceID ] ) 198 if ( grHighColors[ sourceID ] )
211 grHighColors[ destID ] = new QColor( *grHighColors[ sourceID ] ); 199 grHighColors[ destID ] = new QColor( *grHighColors[ sourceID ] );
212 else 200 else
213 grHighColors[ destID ] = NULL; 201 grHighColors[ destID ] = NULL;
214 202
215 if ( colors[ sourceID ] ) 203 if ( colors[ sourceID ] )
216 colors[ destID ] = new QColorGroup( *colors[ sourceID ] ); 204 colors[ destID ] = new QColorGroup( *colors[ sourceID ] );
217 else 205 else
218 colors[ destID ] = NULL; 206 colors[ destID ] = NULL;
219 207
220 // pixmap 208 // pixmap
221 pixnames[ destID ] = pixnames[ sourceID ]; 209 pixnames[ destID ] = pixnames[ sourceID ];
222 duplicate[ destID ] = false; 210 duplicate[ destID ] = false;
223 pixmaps[ destID ] = NULL; 211 pixmaps[ destID ] = NULL;
224 images[ destID ] = NULL; 212 images[ destID ] = NULL;
225 if ( !pixnames[ destID ].isEmpty() ) { 213 if ( !pixnames[ destID ].isEmpty() ) {
226 if ( scaleHints[ sourceID ] == TileScale && blends[ sourceID ] == 0.0 ) { 214 if ( scaleHints[ sourceID ] == TileScale && blends[ sourceID ] == 0.0 ) {
227 pixmaps[ destID ] = pixmaps[ sourceID ]; 215 pixmaps[ destID ] = pixmaps[ sourceID ];
228 duplicate[ destID ] = true; 216 duplicate[ destID ] = true;
229 } 217 }
230 if ( !duplicate[ destID ] ) { 218 if ( !duplicate[ destID ] ) {
231 pixmaps[ destID ] = loadPixmap( pixnames[ destID ] ); 219 pixmaps[ destID ] = loadPixmap( pixnames[ destID ] );
232 if ( scaleHints[ destID ] == TileScale && blends[ destID ] == 0.0 ) 220 if ( scaleHints[ destID ] == TileScale && blends[ destID ] == 0.0 )
233 images[ destID ] = NULL; 221 images[ destID ] = NULL;
234 else 222 else
235 images[ destID ] = loadImage( pixnames[ destID ] ); 223 images[ destID ] = loadImage( pixnames[ destID ] );
236 } 224 }
237 } 225 }
238 226
239 // border pixmap 227 // border pixmap
240 pbDuplicate[ destID ] = false; 228 pbDuplicate[ destID ] = false;
241 pbPixmaps[ destID ] = NULL; 229 pbPixmaps[ destID ] = NULL;
242 pbWidth[ destID ] = pbWidth[ sourceID ]; 230 pbWidth[ destID ] = pbWidth[ sourceID ];
243 brdnames[ destID ] = brdnames[ sourceID ]; 231 brdnames[ destID ] = brdnames[ sourceID ];
244 if ( !brdnames[ destID ].isEmpty() ) { 232 if ( !brdnames[ destID ].isEmpty() ) {
245 pbPixmaps[ destID ] = pbPixmaps[ sourceID ]; 233 pbPixmaps[ destID ] = pbPixmaps[ sourceID ];
246 pbDuplicate[ destID ] = true; 234 pbDuplicate[ destID ] = true;
247 } 235 }
248 236
249 if ( sourceID == ActiveTab && destID == InactiveTab ) 237 if ( sourceID == ActiveTab && destID == InactiveTab )
250 aTabLine = iTabLine; 238 aTabLine = iTabLine;
251 else if ( sourceID == InactiveTab && destID == ActiveTab ) 239 else if ( sourceID == InactiveTab && destID == ActiveTab )
252 iTabLine = aTabLine; 240 iTabLine = aTabLine;
253} 241}
254 242
255void OThemeBase::readConfig( Qt::GUIStyle /*style*/ ) 243void OThemeBase::readConfig( Qt::GUIStyle /*style*/ )
256{ 244{
257#define PREBLEND_ITEMS 12 245#define PREBLEND_ITEMS 12
258 static WidgetType preBlend[] = {Slider, IndicatorOn, IndicatorOff, 246 static WidgetType preBlend[] = {Slider, IndicatorOn, IndicatorOff,
259 ExIndicatorOn, ExIndicatorOff, HScrollDeco, VScrollDeco, HScrollDecoDown, 247 ExIndicatorOn, ExIndicatorOff, HScrollDeco, VScrollDeco, HScrollDecoDown,
260 VScrollDecoDown, ComboDeco, ComboDecoDown, CheckMark}; 248 VScrollDecoDown, ComboDeco, ComboDecoDown, CheckMark};
261 249
262 int i; 250 int i;
263 QString tmpStr; 251 QString tmpStr;
264 QString copyfrom[ WIDGETS ]; 252 QString copyfrom[ WIDGETS ];
265 QString pixnames[ WIDGETS ]; // used for duplicate check 253 QString pixnames[ WIDGETS ]; // used for duplicate check
266 QString brdnames[ WIDGETS ]; 254 QString brdnames[ WIDGETS ];
267 bool loaded[ WIDGETS ]; // used for preloading for CopyWidget 255 bool loaded[ WIDGETS ]; // used for preloading for CopyWidget
268 256
269 if ( configFileName.isEmpty() ) { 257 if ( configFileName.isEmpty() ) {
270 Config cfg ( "qpe" ); 258 Config cfg ( "qpe" );
271 cfg. setGroup ( "Appearance" ); 259 cfg. setGroup ( "Appearance" );
272 260
273 configFileName = cfg. readEntry ( "Theme", "default" ); 261 configFileName = cfg. readEntry ( "Theme", "default" );
274 } 262 }
275 MyConfig config( configFilePath + "/themes/" + configFileName + ".themerc" , Config::File ); 263 Config config( configFilePath + "/themes/" + configFileName + ".themerc" , Config::File );
276 264
277 //printf ( "Opened config file: %s\n", ( configFilePath + "/themes/" + configFileName + ".themerc" ). ascii()); 265 //printf ( "Opened config file: %s\n", ( configFilePath + "/themes/" + configFileName + ".themerc" ). ascii());
278 266
279 // Are we initalized? 267 // Are we initalized?
280 applyMiscResourceGroup( &config ); 268 applyMiscResourceGroup( &config );
281 for ( i = 0; i < INHERIT_ITEMS; ++i ) { 269 for ( i = 0; i < INHERIT_ITEMS; ++i ) {
282 applyResourceGroup( &config, i, copyfrom, pixnames, brdnames ); 270 applyResourceGroup( &config, i, copyfrom, pixnames, brdnames );
283 // printf ( "%d [%s]: copy=%s, pix=%s, brd=%s\n", i, widgetEntries [i], copyfrom [i].latin1(), pixnames[i].latin1(),brdnames[i].latin1() ); 271 // printf ( "%d [%s]: copy=%s, pix=%s, brd=%s\n", i, widgetEntries [i], copyfrom [i].latin1(), pixnames[i].latin1(),brdnames[i].latin1() );
284 } 272 }
285 for ( ; i < INHERIT_ITEMS*2; ++i ) { 273 for ( ; i < INHERIT_ITEMS*2; ++i ) {
286 if ( config.hasGroup( QString( widgetEntries[ i ] ) ) ) { 274 if ( config.hasGroup( QString( widgetEntries[ i ] ) ) ) {
287 applyResourceGroup( &config, i, copyfrom, pixnames, brdnames ); 275 applyResourceGroup( &config, i, copyfrom, pixnames, brdnames );
288 // printf ( "%d [%s]: copy=%s, pix=%s, brd=%s\n", i, widgetEntries [i], copyfrom [i].latin1(), pixnames[i].latin1(),brdnames[i].latin1() ); 276 // printf ( "%d [%s]: copy=%s, pix=%s, brd=%s\n", i, widgetEntries [i], copyfrom [i].latin1(), pixnames[i].latin1(),brdnames[i].latin1() );
289 } 277 }
290 else { 278 else {
291 copyfrom [ i ] = widgetEntries[ i - INHERIT_ITEMS ]; 279 copyfrom [ i ] = widgetEntries[ i - INHERIT_ITEMS ];
292 // printf ( "%d [%s]: copy=%s\n", i, widgetEntries [i], copyfrom [i].latin1()); 280 // printf ( "%d [%s]: copy=%s\n", i, widgetEntries [i], copyfrom [i].latin1());
293 } 281 }
294 } 282 }
295 for ( ; i < WIDGETS; ++i ) { 283 for ( ; i < WIDGETS; ++i ) {
296 applyResourceGroup( &config, i, copyfrom, pixnames, brdnames ); 284 applyResourceGroup( &config, i, copyfrom, pixnames, brdnames );
297 // printf ( "%d [%s]: copy=%s, pix=%s, brd=%s\n", i, widgetEntries [i], copyfrom [i].latin1(), pixnames[i].latin1(),brdnames[i].latin1() ); 285 // printf ( "%d [%s]: copy=%s, pix=%s, brd=%s\n", i, widgetEntries [i], copyfrom [i].latin1(), pixnames[i].latin1(),brdnames[i].latin1() );
298 } 286 }
299 287
300 // initalize defaults that may not be read 288 // initalize defaults that may not be read
301 for ( i = 0; i < WIDGETS; ++i ) 289 for ( i = 0; i < WIDGETS; ++i )
302 loaded[ i ] = false; 290 loaded[ i ] = false;
303 btnXShift = btnYShift = focus3DOffset = 0; 291 btnXShift = btnYShift = focus3DOffset = 0;
304 aTabLine = iTabLine = true; 292 aTabLine = iTabLine = true;
305 roundedButton = roundedCombo = roundedSlider = focus3D = false; 293 roundedButton = roundedCombo = roundedSlider = focus3D = false;
306 splitterWidth = 10; 294 splitterWidth = 10;
307 295
308 for ( i = 0; i < WIDGETS; ++i ) { 296 for ( i = 0; i < WIDGETS; ++i ) {
309 readResourceGroup( i, copyfrom, pixnames, brdnames, loaded ); 297 readResourceGroup( i, copyfrom, pixnames, brdnames, loaded );
310 // printf ( "%d [%s]: copy=%s, pix=%s, brd=%s, colors=%s\n", i, widgetEntries [i], copyfrom [i].latin1(), pixnames[i].latin1(),brdnames[i].latin1(), (colors[i]?colors[i]->background().name().latin1():"<none)" )); 298 // printf ( "%d [%s]: copy=%s, pix=%s, brd=%s, colors=%s\n", i, widgetEntries [i], copyfrom [i].latin1(), pixnames[i].latin1(),brdnames[i].latin1(), (colors[i]?colors[i]->background().name().latin1():"<none)" ));
311 } 299 }
312 300
313 // misc items 301 // misc items
314 readMiscResourceGroup(); 302 readMiscResourceGroup();
315 303
316 // Handle preblend items 304 // Handle preblend items
317 for ( i = 0; i < PREBLEND_ITEMS; ++i ) { 305 for ( i = 0; i < PREBLEND_ITEMS; ++i ) {
318 if ( pixmaps[ preBlend[ i ] ] != NULL && blends[ preBlend[ i ] ] != 0.0 ) 306 if ( pixmaps[ preBlend[ i ] ] != NULL && blends[ preBlend[ i ] ] != 0.0 )
319 blend( preBlend[ i ] ); 307 blend( preBlend[ i ] );
320 } 308 }
321} 309}
322 310
323OThemeBase::OThemeBase( const QString & configFile ) 311OThemeBase::OThemeBase( const QString & configFile )
324 : QWindowsStyle() 312 : QWindowsStyle()
325{ 313{
326 configFilePath = QPEApplication::qpeDir ( ) + "/plugins/styles/"; 314 configFilePath = QPEApplication::qpeDir ( ) + "/plugins/styles/";
327 configFileName = configFile; 315 configFileName = configFile;
328 316
329 readConfig( Qt::WindowsStyle ); 317 readConfig( Qt::WindowsStyle );
330 cache = new OThemeCache( cacheSize ); 318 cache = new OThemeCache( cacheSize );
331} 319}
332 320
333void OThemeBase::applyConfigFile( const QString &/*file*/ ) 321void OThemeBase::applyConfigFile( const QString &/*file*/ )
334{ 322{
335#if 0 323#if 0
336 // handle std color scheme 324 // handle std color scheme
337 Config inConfig( file, Config::File ); 325 Config inConfig( file, Config::File );
338 Config globalConfig ( "qpe" ); 326 Config globalConfig ( "qpe" );
339 327
340 globalConfig. setGroup ( "Apperance" ); 328 globalConfig. setGroup ( "Apperance" );
341 inConfig. setGroup( "General" ); 329 inConfig. setGroup( "General" );
342 330
343 if ( inConfig.hasKey( "foreground" ) ) 331 if ( inConfig.hasKey( "foreground" ) )
344 globalConfig.writeEntry( "Text", inConfig.readEntry( "foreground", " " ) ); 332 globalConfig.writeEntry( "Text", inConfig.readEntry( "foreground", " " ) );
345 if ( inConfig.hasKey( "background" ) ) 333 if ( inConfig.hasKey( "background" ) )
346 globalConfig.writeEntry( "Background", inConfig.readEntry( "background", " " ) ); 334 globalConfig.writeEntry( "Background", inConfig.readEntry( "background", " " ) );
347 if ( inConfig.hasKey( "selectForeground" ) ) 335 if ( inConfig.hasKey( "selectForeground" ) )
348 globalConfig.writeEntry( "HighlightedText", inConfig.readEntry( "selectForeground", " " ) ); 336 globalConfig.writeEntry( "HighlightedText", inConfig.readEntry( "selectForeground", " " ) );
349 if ( inConfig.hasKey( "selectBackground" ) ) 337 if ( inConfig.hasKey( "selectBackground" ) )
350 globalConfig.writeEntry( "Highlight", inConfig.readEntry( "selectBackground", " " ) ); 338 globalConfig.writeEntry( "Highlight", inConfig.readEntry( "selectBackground", " " ) );
351 if ( inConfig.hasKey( "windowForeground" ) ) 339 if ( inConfig.hasKey( "windowForeground" ) )
352 globalConfig.writeEntry( "Text", inConfig.readEntry( "windowForeground", " " ) ); 340 globalConfig.writeEntry( "Text", inConfig.readEntry( "windowForeground", " " ) );
353 if ( inConfig.hasKey( "windowBackground" ) ) 341 if ( inConfig.hasKey( "windowBackground" ) )
354 globalConfig.writeEntry( "Base", inConfig.readEntry( "windowBackground", " " ) ); 342 globalConfig.writeEntry( "Base", inConfig.readEntry( "windowBackground", " " ) );
355 343
356 // Keep track of the current theme so that we can select the right one 344 // Keep track of the current theme so that we can select the right one
357 // in the KControl module. 345 // in the KControl module.
358 globalConfig.writeEntry ( "CurrentTheme", file ); 346 globalConfig.writeEntry ( "CurrentTheme", file );
359 347
360 globalConfig.write(); 348 globalConfig.write();
361#endif 349#endif
362} 350}
363 351
364OThemeBase::~OThemeBase() 352OThemeBase::~OThemeBase()
365{ 353{
366 int i; 354 int i;
367 for ( i = 0; i < WIDGETS; ++i ) { 355 for ( i = 0; i < WIDGETS; ++i ) {
368 if ( !duplicate[ i ] ) { 356 if ( !duplicate[ i ] ) {
369 if ( images[ i ] ) 357 if ( images[ i ] )
370 delete images[ i ]; 358 delete images[ i ];
371 if ( pixmaps[ i ] ) 359 if ( pixmaps[ i ] )
372 delete pixmaps[ i ]; 360 delete pixmaps[ i ];
373 } 361 }
374 if ( !pbDuplicate[ i ] && pbPixmaps[ i ] ) 362 if ( !pbDuplicate[ i ] && pbPixmaps[ i ] )
375 delete pbPixmaps[ i ]; 363 delete pbPixmaps[ i ];
376 if ( colors[ i ] ) 364 if ( colors[ i ] )
377 delete( colors[ i ] ); 365 delete( colors[ i ] );
378 if ( grLowColors[ i ] ) 366 if ( grLowColors[ i ] )
379 delete( grLowColors[ i ] ); 367 delete( grLowColors[ i ] );
380 if ( grHighColors[ i ] ) 368 if ( grHighColors[ i ] )
381 delete( grHighColors[ i ] ); 369 delete( grHighColors[ i ] );
382 } 370 }
383 delete cache; 371 delete cache;
384} 372}
385 373
386QImage* OThemeBase::loadImage( QString &name ) 374QImage* OThemeBase::loadImage( QString &name )
387{ 375{
388 QImage * image = new QImage; 376 QImage * image = new QImage;
389 QString path = configFilePath + "/pixmaps/" + name; 377 QString path = configFilePath + "/pixmaps/" + name;
390 image->load( path ); 378 image->load( path );
391 if ( !image->isNull() ) 379 if ( !image->isNull() )
392 return ( image ); 380 return ( image );
393 qDebug ( "OThemeBase: Unable to load image %s\n", name.ascii ( ) ); 381 qDebug ( "OThemeBase: Unable to load image %s\n", name.ascii ( ) );
394 delete image; 382 delete image;
395 return ( NULL ); 383 return ( NULL );
396} 384}
397 385
398OThemePixmap* OThemeBase::loadPixmap( QString &name ) 386OThemePixmap* OThemeBase::loadPixmap( QString &name )
399{ 387{
400 OThemePixmap * pixmap = new OThemePixmap( false ); 388 OThemePixmap * pixmap = new OThemePixmap( false );
401 QString path = configFilePath + "/pixmaps/" + name; 389 QString path = configFilePath + "/pixmaps/" + name;
402 pixmap->load( path ); 390 pixmap->load( path );
403 if ( !pixmap->isNull() ) 391 if ( !pixmap->isNull() )
404 return pixmap; 392 return pixmap;
405 qDebug ( "OThemeBase: Unable to load pixmap %s\n", name.ascii() ); 393 qDebug ( "OThemeBase: Unable to load pixmap %s\n", name.ascii() );
406 delete pixmap; 394 delete pixmap;
407 return ( NULL ); 395 return ( NULL );
408} 396}
409 397
410OThemePixmap* OThemeBase::scale( int w, int h, WidgetType widget ) 398OThemePixmap* OThemeBase::scale( int w, int h, WidgetType widget )
411{ 399{
412 if ( scaleHints[ widget ] == FullScale ) { 400 if ( scaleHints[ widget ] == FullScale ) {
413 if ( !pixmaps[ widget ] || pixmaps[ widget ] ->width() != w || 401 if ( !pixmaps[ widget ] || pixmaps[ widget ] ->width() != w ||
414 pixmaps[ widget ] ->height() != h ) { 402 pixmaps[ widget ] ->height() != h ) {
415 OThemePixmap * cachePix = cache->pixmap( w, h, widget ); 403 OThemePixmap * cachePix = cache->pixmap( w, h, widget );
416 if ( cachePix ) { 404 if ( cachePix ) {
417 cachePix = new OThemePixmap( *cachePix ); 405 cachePix = new OThemePixmap( *cachePix );
418 if ( pixmaps[ widget ] ) 406 if ( pixmaps[ widget ] )
419 cache->insert( pixmaps[ widget ], OThemeCache::FullScale, 407 cache->insert( pixmaps[ widget ], OThemeCache::FullScale,
420 widget ); 408 widget );
421 else 409 else
422 qDebug( "We would have inserted a null pixmap!\n" ); 410 qDebug( "We would have inserted a null pixmap!\n" );
423 pixmaps[ widget ] = cachePix; 411 pixmaps[ widget ] = cachePix;
424 } 412 }
425 else { 413 else {
426 cache->insert( pixmaps[ widget ], OThemeCache::FullScale, widget ); 414 cache->insert( pixmaps[ widget ], OThemeCache::FullScale, widget );
427 QImage tmpImg = images[ widget ] ->smoothScale( w, h ); 415 QImage tmpImg = images[ widget ] ->smoothScale( w, h );
428 pixmaps[ widget ] = new OThemePixmap; 416 pixmaps[ widget ] = new OThemePixmap;
429 pixmaps[ widget ] ->convertFromImage( tmpImg ); 417 pixmaps[ widget ] ->convertFromImage( tmpImg );
430 if ( blends[ widget ] != 0.0 ) 418 if ( blends[ widget ] != 0.0 )
431 blend( widget ); 419 blend( widget );
432 } 420 }
433 } 421 }
434 } 422 }
435 else if ( scaleHints[ widget ] == HorizontalScale ) { 423 else if ( scaleHints[ widget ] == HorizontalScale ) {
436 if ( pixmaps[ widget ] ->width() != w ) { 424 if ( pixmaps[ widget ] ->width() != w ) {
437 OThemePixmap * cachePix = cache->horizontalPixmap( w, widget ); 425 OThemePixmap * cachePix = cache->horizontalPixmap( w, widget );
438 if ( cachePix ) { 426 if ( cachePix ) {
439 cachePix = new OThemePixmap( *cachePix ); 427 cachePix = new OThemePixmap( *cachePix );
440 if ( pixmaps[ widget ] ) 428 if ( pixmaps[ widget ] )
441 cache->insert( pixmaps[ widget ], OThemeCache::HorizontalScale, widget ); 429 cache->insert( pixmaps[ widget ], OThemeCache::HorizontalScale, widget );
442 else 430 else
443 qDebug ( "We would have inserted a null pixmap!\n" ); 431 qDebug ( "We would have inserted a null pixmap!\n" );
444 pixmaps[ widget ] = cachePix; 432 pixmaps[ widget ] = cachePix;
445 } 433 }
446 else { 434 else {
447 cache->insert( pixmaps[ widget ], OThemeCache::HorizontalScale, widget ); 435 cache->insert( pixmaps[ widget ], OThemeCache::HorizontalScale, widget );
448 QImage tmpImg = images[ widget ] -> 436 QImage tmpImg = images[ widget ] ->
449 smoothScale( w, images[ widget ] ->height() ); 437 smoothScale( w, images[ widget ] ->height() );
450 pixmaps[ widget ] = new OThemePixmap; 438 pixmaps[ widget ] = new OThemePixmap;
451 pixmaps[ widget ] ->convertFromImage( tmpImg ); 439 pixmaps[ widget ] ->convertFromImage( tmpImg );
452 if ( blends[ widget ] != 0.0 ) 440 if ( blends[ widget ] != 0.0 )
453 blend( widget ); 441 blend( widget );
454 } 442 }
455 } 443 }
456 } 444 }
457 else if ( scaleHints[ widget ] == VerticalScale ) { 445 else if ( scaleHints[ widget ] == VerticalScale ) {
458 if ( pixmaps[ widget ] ->height() != h ) { 446 if ( pixmaps[ widget ] ->height() != h ) {
459 OThemePixmap * cachePix = cache->verticalPixmap( w, widget ); 447 OThemePixmap * cachePix = cache->verticalPixmap( w, widget );
460 if ( cachePix ) { 448 if ( cachePix ) {
461 cachePix = new OThemePixmap( *cachePix ); 449 cachePix = new OThemePixmap( *cachePix );
462 if ( pixmaps[ widget ] ) 450 if ( pixmaps[ widget ] )
463 cache->insert( pixmaps[ widget ], OThemeCache::VerticalScale, widget ); 451 cache->insert( pixmaps[ widget ], OThemeCache::VerticalScale, widget );
464 else 452 else
465 qDebug ( "We would have inserted a null pixmap!\n" ); 453 qDebug ( "We would have inserted a null pixmap!\n" );
466 pixmaps[ widget ] = cachePix; 454 pixmaps[ widget ] = cachePix;
467 } 455 }
468 else { 456 else {
469 cache->insert( pixmaps[ widget ], OThemeCache::VerticalScale, widget ); 457 cache->insert( pixmaps[ widget ], OThemeCache::VerticalScale, widget );
470 QImage tmpImg = 458 QImage tmpImg =
471 images[ widget ] ->smoothScale( images[ widget ] ->width(), h ); 459 images[ widget ] ->smoothScale( images[ widget ] ->width(), h );
472 pixmaps[ widget ] = new OThemePixmap; 460 pixmaps[ widget ] = new OThemePixmap;
473 pixmaps[ widget ] ->convertFromImage( tmpImg ); 461 pixmaps[ widget ] ->convertFromImage( tmpImg );
474 if ( blends[ widget ] != 0.0 ) 462 if ( blends[ widget ] != 0.0 )
475 blend( widget ); 463 blend( widget );
476 } 464 }
477 } 465 }
478 } 466 }
479 // If blended tile here so the blend is scaled properly 467 // If blended tile here so the blend is scaled properly
480 else if ( scaleHints[ widget ] == TileScale && blends[ widget ] != 0.0 ) { 468 else if ( scaleHints[ widget ] == TileScale && blends[ widget ] != 0.0 ) {
481 if ( !pixmaps[ widget ] || pixmaps[ widget ] ->width() != w || 469 if ( !pixmaps[ widget ] || pixmaps[ widget ] ->width() != w ||
482 pixmaps[ widget ] ->height() != h ) { 470 pixmaps[ widget ] ->height() != h ) {
483 OThemePixmap * cachePix = cache->pixmap( w, h, widget ); 471 OThemePixmap * cachePix = cache->pixmap( w, h, widget );
484 if ( cachePix ) { 472 if ( cachePix ) {
485 cachePix = new OThemePixmap( *cachePix ); 473 cachePix = new OThemePixmap( *cachePix );
486 cache->insert( pixmaps[ widget ], OThemeCache::FullScale, widget ); 474 cache->insert( pixmaps[ widget ], OThemeCache::FullScale, widget );
487 pixmaps[ widget ] = cachePix; 475 pixmaps[ widget ] = cachePix;
488 } 476 }
489 else { 477 else {
490 cache->insert( pixmaps[ widget ], OThemeCache::FullScale, widget ); 478 cache->insert( pixmaps[ widget ], OThemeCache::FullScale, widget );
491 QPixmap tile; 479 QPixmap tile;
492 tile.convertFromImage( *images[ widget ] ); 480 tile.convertFromImage( *images[ widget ] );
493 pixmaps[ widget ] = new OThemePixmap; 481 pixmaps[ widget ] = new OThemePixmap;
494 pixmaps[ widget ] ->resize( w, h ); 482 pixmaps[ widget ] ->resize( w, h );
495 QPainter p( pixmaps[ widget ] ); 483 QPainter p( pixmaps[ widget ] );
496 p.drawTiledPixmap( 0, 0, w, h, tile ); 484 p.drawTiledPixmap( 0, 0, w, h, tile );
497 if ( blends[ widget ] != 0.0 ) 485 if ( blends[ widget ] != 0.0 )
498 blend( widget ); 486 blend( widget );
499 } 487 }
500 } 488 }
501 } 489 }
502 return ( pixmaps[ widget ] ); 490 return ( pixmaps[ widget ] );
503} 491}
504 492
505OThemePixmap* OThemeBase::scaleBorder( int w, int h, WidgetType widget ) 493OThemePixmap* OThemeBase::scaleBorder( int w, int h, WidgetType widget )
506{ 494{
507 OThemePixmap * pixmap = NULL; 495 OThemePixmap * pixmap = NULL;
508 if ( !pbPixmaps[ widget ] && !pbWidth[ widget ] ) 496 if ( !pbPixmaps[ widget ] && !pbWidth[ widget ] )
509 return ( NULL ); 497 return ( NULL );
510 pixmap = cache->pixmap( w, h, widget, true ); 498 pixmap = cache->pixmap( w, h, widget, true );
511 if ( pixmap ) { 499 if ( pixmap ) {
512 pixmap = new OThemePixmap( *pixmap ); 500 pixmap = new OThemePixmap( *pixmap );
513 } 501 }
514 else { 502 else {
515 pixmap = new OThemePixmap(); 503 pixmap = new OThemePixmap();
516 pixmap->resize( w, h ); 504 pixmap->resize( w, h );
517 QBitmap mask; 505 QBitmap mask;
518 mask.resize( w, h ); 506 mask.resize( w, h );
519 mask.fill( color0 ); 507 mask.fill( color0 );
520 QPainter mPainter; 508 QPainter mPainter;
521 mPainter.begin( &mask ); 509 mPainter.begin( &mask );
522 510
523 QPixmap *tmp = borderPixmap( widget ) ->border( OThemePixmap::TopLeft ); 511 QPixmap *tmp = borderPixmap( widget ) ->border( OThemePixmap::TopLeft );
524 const QBitmap *srcMask = tmp->mask(); 512 const QBitmap *srcMask = tmp->mask();
525 int bdWidth = tmp->width(); 513 int bdWidth = tmp->width();
526 514
527 bitBlt( pixmap, 0, 0, tmp, 0, 0, bdWidth, bdWidth, 515 bitBlt( pixmap, 0, 0, tmp, 0, 0, bdWidth, bdWidth,
528 Qt::CopyROP, false ); 516 Qt::CopyROP, false );
529 if ( srcMask ) 517 if ( srcMask )
530 bitBlt( &mask, 0, 0, srcMask, 0, 0, bdWidth, bdWidth, 518 bitBlt( &mask, 0, 0, srcMask, 0, 0, bdWidth, bdWidth,
531 Qt::CopyROP, false ); 519 Qt::CopyROP, false );
532 else 520 else
533 mPainter.fillRect( 0, 0, bdWidth, bdWidth, color1 ); 521 mPainter.fillRect( 0, 0, bdWidth, bdWidth, color1 );
534 522
535 523
536 tmp = borderPixmap( widget ) ->border( OThemePixmap::TopRight ); 524 tmp = borderPixmap( widget ) ->border( OThemePixmap::TopRight );
537 srcMask = tmp->mask(); 525 srcMask = tmp->mask();
538 bitBlt( pixmap, w - bdWidth, 0, tmp, 0, 0, bdWidth, 526 bitBlt( pixmap, w - bdWidth, 0, tmp, 0, 0, bdWidth,
539 bdWidth, Qt::CopyROP, false ); 527 bdWidth, Qt::CopyROP, false );
540 if ( srcMask ) 528 if ( srcMask )
541 bitBlt( &mask, w - bdWidth, 0, srcMask, 0, 0, bdWidth, 529 bitBlt( &mask, w - bdWidth, 0, srcMask, 0, 0, bdWidth,
542 bdWidth, Qt::CopyROP, false ); 530 bdWidth, Qt::CopyROP, false );
543 else 531 else
544 mPainter.fillRect( w - bdWidth, 0, bdWidth, bdWidth, color1 ); 532 mPainter.fillRect( w - bdWidth, 0, bdWidth, bdWidth, color1 );
545 533
546 tmp = borderPixmap( widget ) ->border( OThemePixmap::BottomLeft ); 534 tmp = borderPixmap( widget ) ->border( OThemePixmap::BottomLeft );
547 srcMask = tmp->mask(); 535 srcMask = tmp->mask();
548 bitBlt( pixmap, 0, h - bdWidth, tmp, 0, 0, bdWidth, 536 bitBlt( pixmap, 0, h - bdWidth, tmp, 0, 0, bdWidth,
549 bdWidth, Qt::CopyROP, false ); 537 bdWidth, Qt::CopyROP, false );
550 if ( srcMask ) 538 if ( srcMask )
551 bitBlt( &mask, 0, h - bdWidth, srcMask, 0, 0, bdWidth, 539 bitBlt( &mask, 0, h - bdWidth, srcMask, 0, 0, bdWidth,
552 bdWidth, Qt::CopyROP, false ); 540 bdWidth, Qt::CopyROP, false );
553 else 541 else
554 mPainter.fillRect( 0, h - bdWidth, bdWidth, bdWidth, color1 ); 542 mPainter.fillRect( 0, h - bdWidth, bdWidth, bdWidth, color1 );
555 543
556 tmp = borderPixmap( widget ) ->border( OThemePixmap::BottomRight ); 544 tmp = borderPixmap( widget ) ->border( OThemePixmap::BottomRight );
557 srcMask = tmp->mask(); 545 srcMask = tmp->mask();
558 bitBlt( pixmap, w - bdWidth, h - bdWidth, tmp, 0, 0, 546 bitBlt( pixmap, w - bdWidth, h - bdWidth, tmp, 0, 0,
559 bdWidth, bdWidth, Qt::CopyROP, false ); 547 bdWidth, bdWidth, Qt::CopyROP, false );
560 if ( srcMask ) 548 if ( srcMask )
561 bitBlt( &mask, w - bdWidth, h - bdWidth, srcMask, 0, 0, 549 bitBlt( &mask, w - bdWidth, h - bdWidth, srcMask, 0, 0,
562 bdWidth, bdWidth, Qt::CopyROP, false ); 550 bdWidth, bdWidth, Qt::CopyROP, false );
563 else 551 else
564 mPainter.fillRect( w - bdWidth, h - bdWidth, bdWidth, bdWidth, color1 ); 552 mPainter.fillRect( w - bdWidth, h - bdWidth, bdWidth, bdWidth, color1 );
565 553
566 QPainter p; 554 QPainter p;
567 p.begin( pixmap ); 555 p.begin( pixmap );
568 if ( w - bdWidth * 2 > 0 ) { 556 if ( w - bdWidth * 2 > 0 ) {
569 tmp = borderPixmap( widget ) ->border( OThemePixmap::Top ); 557 tmp = borderPixmap( widget ) ->border( OThemePixmap::Top );
570 srcMask = tmp->mask(); 558 srcMask = tmp->mask();
571 p.drawTiledPixmap( bdWidth, 0, w - bdWidth * 2, bdWidth, *tmp ); 559 p.drawTiledPixmap( bdWidth, 0, w - bdWidth * 2, bdWidth, *tmp );
572 if ( srcMask ) 560 if ( srcMask )
573 mPainter.drawTiledPixmap( bdWidth, 0, w - bdWidth * 2, bdWidth, *srcMask ); 561 mPainter.drawTiledPixmap( bdWidth, 0, w - bdWidth * 2, bdWidth, *srcMask );
574 else 562 else
575 mPainter.fillRect( bdWidth, 0, w - bdWidth * 2, bdWidth, color1 ); 563 mPainter.fillRect( bdWidth, 0, w - bdWidth * 2, bdWidth, color1 );
576 564
577 tmp = borderPixmap( widget ) ->border( OThemePixmap::Bottom ); 565 tmp = borderPixmap( widget ) ->border( OThemePixmap::Bottom );
578 srcMask = tmp->mask(); 566 srcMask = tmp->mask();
579 p.drawTiledPixmap( bdWidth, h - bdWidth, w - bdWidth * 2, bdWidth, 567 p.drawTiledPixmap( bdWidth, h - bdWidth, w - bdWidth * 2, bdWidth,
580 *tmp ); 568 *tmp );
581 if ( srcMask ) 569 if ( srcMask )
582 mPainter.drawTiledPixmap( bdWidth, h - bdWidth, w - bdWidth * 2, bdWidth, *srcMask ); 570 mPainter.drawTiledPixmap( bdWidth, h - bdWidth, w - bdWidth * 2, bdWidth, *srcMask );
583 else 571 else
584 mPainter.fillRect( bdWidth, h - bdWidth, w - bdWidth * 2, bdWidth, 572 mPainter.fillRect( bdWidth, h - bdWidth, w - bdWidth * 2, bdWidth,
585 color1 ); 573 color1 );
586 } 574 }
587 if ( h - bdWidth * 2 > 0 ) { 575 if ( h - bdWidth * 2 > 0 ) {
588 tmp = borderPixmap( widget ) ->border( OThemePixmap::Left ); 576 tmp = borderPixmap( widget ) ->border( OThemePixmap::Left );
589 srcMask = tmp->mask(); 577 srcMask = tmp->mask();
590 p.drawTiledPixmap( 0, bdWidth, bdWidth, h - bdWidth * 2, *tmp ); 578 p.drawTiledPixmap( 0, bdWidth, bdWidth, h - bdWidth * 2, *tmp );
591 if ( srcMask ) 579 if ( srcMask )
592 mPainter.drawTiledPixmap( 0, bdWidth, bdWidth, h - bdWidth * 2, *srcMask ); 580 mPainter.drawTiledPixmap( 0, bdWidth, bdWidth, h - bdWidth * 2, *srcMask );
593 else 581 else
594 mPainter.fillRect( 0, bdWidth, bdWidth, h - bdWidth * 2, color1 ); 582 mPainter.fillRect( 0, bdWidth, bdWidth, h - bdWidth * 2, color1 );
595 583
596 tmp = borderPixmap( widget ) ->border( OThemePixmap::Right ); 584 tmp = borderPixmap( widget ) ->border( OThemePixmap::Right );
597 srcMask = tmp->mask(); 585 srcMask = tmp->mask();
598 p.drawTiledPixmap( w - bdWidth, bdWidth, bdWidth, h - bdWidth * 2, 586 p.drawTiledPixmap( w - bdWidth, bdWidth, bdWidth, h - bdWidth * 2,
599 *tmp ); 587 *tmp );
600 if ( srcMask ) 588 if ( srcMask )
601 mPainter.drawTiledPixmap( w - bdWidth, bdWidth, bdWidth, h - bdWidth * 2, *srcMask ); 589 mPainter.drawTiledPixmap( w - bdWidth, bdWidth, bdWidth, h - bdWidth * 2, *srcMask );
602 else 590 else
603 mPainter.fillRect( w - bdWidth, bdWidth, bdWidth, h - bdWidth * 2, color1 ); 591 mPainter.fillRect( w - bdWidth, bdWidth, bdWidth, h - bdWidth * 2, color1 );
604 } 592 }
605 p.end(); 593 p.end();
606 mPainter.end(); 594 mPainter.end();
607 pixmap->setMask( mask ); 595 pixmap->setMask( mask );
608 cache->insert( pixmap, OThemeCache::FullScale, widget, true ); 596 cache->insert( pixmap, OThemeCache::FullScale, widget, true );
609 if ( !pixmap->mask() ) 597 if ( !pixmap->mask() )
610 qDebug ( "No mask for border pixmap!\n" ); 598 qDebug ( "No mask for border pixmap!\n" );
611 } 599 }
612 return ( pixmap ); 600 return ( pixmap );
613} 601}
614 602
615 603
616OThemePixmap* OThemeBase::blend( WidgetType widget ) 604OThemePixmap* OThemeBase::blend( WidgetType widget )
617{ 605{
618 OGfxEffect::GradientType g; 606 OGfxEffect::GradientType g;
619 switch ( gradients[ widget ] ) { 607 switch ( gradients[ widget ] ) {
620 case GrHorizontal: 608 case GrHorizontal:
621 g = OGfxEffect::HorizontalGradient; 609 g = OGfxEffect::HorizontalGradient;
622 break; 610 break;
623 case GrVertical: 611 case GrVertical:
624 g = OGfxEffect::VerticalGradient; 612 g = OGfxEffect::VerticalGradient;
625 break; 613 break;
626 case GrPyramid: 614 case GrPyramid:
627 g = OGfxEffect::PyramidGradient; 615 g = OGfxEffect::PyramidGradient;
628 break; 616 break;
629 case GrRectangle: 617 case GrRectangle:
630 g = OGfxEffect::RectangleGradient; 618 g = OGfxEffect::RectangleGradient;
631 break; 619 break;
632 case GrElliptic: 620 case GrElliptic:
633 g = OGfxEffect::EllipticGradient; 621 g = OGfxEffect::EllipticGradient;
634 break; 622 break;
635 default: 623 default:
636 g = OGfxEffect::DiagonalGradient; 624 g = OGfxEffect::DiagonalGradient;
637 break; 625 break;
638 } 626 }
639 OGfxEffect::blend( *pixmaps[ widget ], blends[ widget ], *grLowColors[ widget ], 627 OGfxEffect::blend( *pixmaps[ widget ], blends[ widget ], *grLowColors[ widget ],
640 g, false ); 628 g, false );
641 return ( pixmaps[ widget ] ); 629 return ( pixmaps[ widget ] );
642} 630}
643 631
644OThemePixmap* OThemeBase::gradient( int w, int h, WidgetType widget ) 632OThemePixmap* OThemeBase::gradient( int w, int h, WidgetType widget )
645{ 633{
646 if ( gradients[ widget ] == GrVertical ) { 634 if ( gradients[ widget ] == GrVertical ) {
647 if ( !pixmaps[ widget ] || pixmaps[ widget ] ->height() != h ) { 635 if ( !pixmaps[ widget ] || pixmaps[ widget ] ->height() != h ) {
648 OThemePixmap * cachePix = cache->verticalPixmap( h, widget ); 636 OThemePixmap * cachePix = cache->verticalPixmap( h, widget );
649 if ( cachePix ) { 637 if ( cachePix ) {
650 cachePix = new OThemePixmap( *cachePix ); 638 cachePix = new OThemePixmap( *cachePix );
651 if ( pixmaps[ widget ] ) 639 if ( pixmaps[ widget ] )
652 cache->insert( pixmaps[ widget ], OThemeCache::VerticalScale, 640 cache->insert( pixmaps[ widget ], OThemeCache::VerticalScale,
653 widget ); 641 widget );
654 pixmaps[ widget ] = cachePix; 642 pixmaps[ widget ] = cachePix;
655 } 643 }
656 else { 644 else {
657 if ( pixmaps[ widget ] ) 645 if ( pixmaps[ widget ] )
658 cache->insert( pixmaps[ widget ], OThemeCache::VerticalScale, 646 cache->insert( pixmaps[ widget ], OThemeCache::VerticalScale,
659 widget ); 647 widget );
660 pixmaps[ widget ] = new OThemePixmap; 648 pixmaps[ widget ] = new OThemePixmap;
661 pixmaps[ widget ] ->resize( w, h ); 649 pixmaps[ widget ] ->resize( w, h );
662 OGfxEffect::gradient( *pixmaps[ widget ], *grHighColors[ widget ], 650 OGfxEffect::gradient( *pixmaps[ widget ], *grHighColors[ widget ],
663 *grLowColors[ widget ], 651 *grLowColors[ widget ],
664 OGfxEffect::VerticalGradient ); 652 OGfxEffect::VerticalGradient );
665 } 653 }
666 } 654 }
667 } 655 }
668 else if ( gradients[ widget ] == GrHorizontal ) { 656 else if ( gradients[ widget ] == GrHorizontal ) {
669 if ( !pixmaps[ widget ] || pixmaps[ widget ] ->width() != w ) { 657 if ( !pixmaps[ widget ] || pixmaps[ widget ] ->width() != w ) {
670 OThemePixmap * cachePix = cache->horizontalPixmap( w, widget ); 658 OThemePixmap * cachePix = cache->horizontalPixmap( w, widget );
671 if ( cachePix ) { 659 if ( cachePix ) {
672 cachePix = new OThemePixmap( *cachePix ); 660 cachePix = new OThemePixmap( *cachePix );
673 if ( pixmaps[ widget ] ) 661 if ( pixmaps[ widget ] )
674 cache->insert( pixmaps[ widget ], 662 cache->insert( pixmaps[ widget ],
675 OThemeCache::HorizontalScale, widget ); 663 OThemeCache::HorizontalScale, widget );
676 pixmaps[ widget ] = cachePix; 664 pixmaps[ widget ] = cachePix;
677 } 665 }
678 else { 666 else {
679 if ( pixmaps[ widget ] ) 667 if ( pixmaps[ widget ] )
680 cache->insert( pixmaps[ widget ], 668 cache->insert( pixmaps[ widget ],
681 OThemeCache::HorizontalScale, widget ); 669 OThemeCache::HorizontalScale, widget );
682 pixmaps[ widget ] = new OThemePixmap; 670 pixmaps[ widget ] = new OThemePixmap;
683 pixmaps[ widget ] ->resize( w, h ); 671 pixmaps[ widget ] ->resize( w, h );
684 OGfxEffect::gradient( *pixmaps[ widget ], *grHighColors[ widget ], 672 OGfxEffect::gradient( *pixmaps[ widget ], *grHighColors[ widget ],
685 *grLowColors[ widget ], 673 *grLowColors[ widget ],
686 OGfxEffect::HorizontalGradient ); 674 OGfxEffect::HorizontalGradient );
687 } 675 }
688 } 676 }
689 } 677 }
690 else if ( gradients[ widget ] == GrReverseBevel ) { 678 else if ( gradients[ widget ] == GrReverseBevel ) {
691 if ( !pixmaps[ widget ] || pixmaps[ widget ] ->width() != w || 679 if ( !pixmaps[ widget ] || pixmaps[ widget ] ->width() != w ||
692 pixmaps[ widget ] ->height() != h ) { 680 pixmaps[ widget ] ->height() != h ) {
693 OThemePixmap * cachePix = cache->pixmap( w, h, widget ); 681 OThemePixmap * cachePix = cache->pixmap( w, h, widget );
694 if ( cachePix ) { 682 if ( cachePix ) {
695 cachePix = new OThemePixmap( *cachePix ); 683 cachePix = new OThemePixmap( *cachePix );
696 if ( pixmaps[ widget ] ) 684 if ( pixmaps[ widget ] )
697 cache->insert( pixmaps[ widget ], OThemeCache::FullScale, 685 cache->insert( pixmaps[ widget ], OThemeCache::FullScale,
698 widget ); 686 widget );
699 pixmaps[ widget ] = cachePix; 687 pixmaps[ widget ] = cachePix;
700 } 688 }
701 else { 689 else {
702 if ( pixmaps[ widget ] ) 690 if ( pixmaps[ widget ] )
703 cache->insert( pixmaps[ widget ], OThemeCache::FullScale, 691 cache->insert( pixmaps[ widget ], OThemeCache::FullScale,
704 widget ); 692 widget );
705 pixmaps[ widget ] = new OThemePixmap; 693 pixmaps[ widget ] = new OThemePixmap;
706 pixmaps[ widget ] ->resize( w, h ); 694 pixmaps[ widget ] ->resize( w, h );
707 695
708 QPixmap s; 696 QPixmap s;
709 int offset = decoWidth( widget ); 697 int offset = decoWidth( widget );
710 s.resize( w - offset * 2, h - offset * 2 ); 698 s.resize( w - offset * 2, h - offset * 2 );
711 QColor lc( *grLowColors[ widget ] ); 699 QColor lc( *grLowColors[ widget ] );
712 QColor hc( *grHighColors[ widget ] ); 700 QColor hc( *grHighColors[ widget ] );
713 if ( bevelContrast( widget ) ) { 701 if ( bevelContrast( widget ) ) {
714 int bc = bevelContrast( widget ); 702 int bc = bevelContrast( widget );
715 // want single increments, not factors like light()/dark() 703 // want single increments, not factors like light()/dark()
716 lc.setRgb( lc.red() - bc, lc.green() - bc, lc.blue() - bc ); 704 lc.setRgb( lc.red() - bc, lc.green() - bc, lc.blue() - bc );
717 hc.setRgb( hc.red() + bc, hc.green() + bc, hc.blue() + bc ); 705 hc.setRgb( hc.red() + bc, hc.green() + bc, hc.blue() + bc );
718 } 706 }
719 OGfxEffect::gradient( *pixmaps[ widget ], 707 OGfxEffect::gradient( *pixmaps[ widget ],
720 lc, hc, 708 lc, hc,
721 OGfxEffect::DiagonalGradient ); 709 OGfxEffect::DiagonalGradient );
722 OGfxEffect::gradient( s, *grHighColors[ widget ], 710 OGfxEffect::gradient( s, *grHighColors[ widget ],
723 *grLowColors[ widget ], 711 *grLowColors[ widget ],
724 OGfxEffect::DiagonalGradient ); 712 OGfxEffect::DiagonalGradient );
725 bitBlt( pixmaps[ widget ], offset, offset, &s, 0, 0, w - offset * 2, 713 bitBlt( pixmaps[ widget ], offset, offset, &s, 0, 0, w - offset * 2,
726 h - offset * 2, Qt::CopyROP ); 714 h - offset * 2, Qt::CopyROP );
727 } 715 }
728 } 716 }
729 } 717 }
730 else { 718 else {
731 OGfxEffect::GradientType g; 719 OGfxEffect::GradientType g;
732 switch ( gradients[ widget ] ) { 720 switch ( gradients[ widget ] ) {
733 case GrPyramid: 721 case GrPyramid:
734 g = OGfxEffect::PyramidGradient; 722 g = OGfxEffect::PyramidGradient;
735 break; 723 break;
736 case GrRectangle: 724 case GrRectangle:
737 g = OGfxEffect::RectangleGradient; 725 g = OGfxEffect::RectangleGradient;
738 break; 726 break;
739 case GrElliptic: 727 case GrElliptic:
740 g = OGfxEffect::EllipticGradient; 728 g = OGfxEffect::EllipticGradient;
741 break; 729 break;
742 default: 730 default:
743 g = OGfxEffect::DiagonalGradient; 731 g = OGfxEffect::DiagonalGradient;
744 break; 732 break;
745 } 733 }
746 if ( !pixmaps[ widget ] || pixmaps[ widget ] ->width() != w || 734 if ( !pixmaps[ widget ] || pixmaps[ widget ] ->width() != w ||
747 pixmaps[ widget ] ->height() != h ) { 735 pixmaps[ widget ] ->height() != h ) {
748 OThemePixmap * cachePix = cache->pixmap( w, h, widget ); 736 OThemePixmap * cachePix = cache->pixmap( w, h, widget );
749 if ( cachePix ) { 737 if ( cachePix ) {
750 cachePix = new OThemePixmap( *cachePix ); 738 cachePix = new OThemePixmap( *cachePix );
751 if ( pixmaps[ widget ] ) 739 if ( pixmaps[ widget ] )
752 cache->insert( pixmaps[ widget ], OThemeCache::FullScale, 740 cache->insert( pixmaps[ widget ], OThemeCache::FullScale,
753 widget ); 741 widget );
754 pixmaps[ widget ] = cachePix; 742 pixmaps[ widget ] = cachePix;
755 } 743 }
756 else { 744 else {
757 if ( pixmaps[ widget ] ) 745 if ( pixmaps[ widget ] )
758 cache->insert( pixmaps[ widget ], OThemeCache::FullScale, 746 cache->insert( pixmaps[ widget ], OThemeCache::FullScale,
759 widget ); 747 widget );
760 pixmaps[ widget ] = new OThemePixmap; 748 pixmaps[ widget ] = new OThemePixmap;
761 pixmaps[ widget ] ->resize( w, h ); 749 pixmaps[ widget ] ->resize( w, h );
762 OGfxEffect::gradient( *pixmaps[ widget ], *grHighColors[ widget ], 750 OGfxEffect::gradient( *pixmaps[ widget ], *grHighColors[ widget ],
763 *grLowColors[ widget ], g ); 751 *grLowColors[ widget ], g );
764 } 752 }
765 } 753 }
766 } 754 }
767 return ( pixmaps[ widget ] ); 755 return ( pixmaps[ widget ] );
768} 756}
769 757
770OThemePixmap* OThemeBase::scalePixmap( int w, int h, WidgetType widget ) 758OThemePixmap* OThemeBase::scalePixmap( int w, int h, WidgetType widget )
771{ 759{
772 760
773 if ( gradients[ widget ] && blends[ widget ] == 0.0 ) 761 if ( gradients[ widget ] && blends[ widget ] == 0.0 )
774 return ( gradient( w, h, widget ) ); 762 return ( gradient( w, h, widget ) );
775 763
776 return ( scale( w, h, widget ) ); 764 return ( scale( w, h, widget ) );
777} 765}
778 766
779QColorGroup* OThemeBase::makeColorGroup( QColor &fg, QColor &bg, 767QColorGroup* OThemeBase::makeColorGroup( QColor &fg, QColor &bg,
780 Qt::GUIStyle ) 768 Qt::GUIStyle )
781{ 769{
782 if ( shading == Motif ) { 770 if ( shading == Motif ) {
783 int highlightVal, lowlightVal; 771 int highlightVal, lowlightVal;
784 highlightVal = 100 + ( 2* /*KGlobalSettings::contrast()*/ 3 + 4 ) * 16 / 10; 772 highlightVal = 100 + ( 2* /*KGlobalSettings::contrast()*/ 3 + 4 ) * 16 / 10;
785 lowlightVal = 100 + ( ( 2* /*KGlobalSettings::contrast()*/ 3 + 4 ) * 10 ); 773 lowlightVal = 100 + ( ( 2* /*KGlobalSettings::contrast()*/ 3 + 4 ) * 10 );
786 return ( new QColorGroup( fg, bg, bg.light( highlightVal ), 774 return ( new QColorGroup( fg, bg, bg.light( highlightVal ),
787 bg.dark( lowlightVal ), bg.dark( 120 ), 775 bg.dark( lowlightVal ), bg.dark( 120 ),
788 fg, qApp->palette().normal().base() ) ); 776 fg, qApp->palette().normal().base() ) );
789 } 777 }
790 else 778 else
791 return ( new QColorGroup( fg, bg, bg.light( 150 ), bg.dark(), 779 return ( new QColorGroup( fg, bg, bg.light( 150 ), bg.dark(),
792 bg.dark( 120 ), fg, 780 bg.dark( 120 ), fg,
793 qApp->palette().normal().base() ) ); 781 qApp->palette().normal().base() ) );
794} 782}
795 783
796static QColor strToColor ( const QString &str ) 784static QColor strToColor ( const QString &str )
797{ 785{
798 QString str2 = str. stripWhiteSpace ( ); 786 QString str2 = str. stripWhiteSpace ( );
799 787
800 if ( str2 [0] == '#' ) 788 if ( str2 [0] == '#' )
801 return QColor ( str2 ); 789 return QColor ( str2 );
802 else { 790 else {
803 QStringList sl = QStringList::split ( ',', str2 ); 791 QStringList sl = QStringList::split ( ',', str2 );
804 792
805 if ( sl. count ( ) >= 3 ) 793 if ( sl. count ( ) >= 3 )
806 return QColor ( sl [0]. toInt ( ), sl [1]. toInt ( ), sl [2]. toInt ( )); 794 return QColor ( sl [0]. toInt ( ), sl [1]. toInt ( ), sl [2]. toInt ( ));
807 } 795 }
808 return QColor ( 0, 0, 0 ); 796 return QColor ( 0, 0, 0 );
809} 797}
810 798
811 799
812 800
813void OThemeBase::applyMiscResourceGroup( Config *config ) 801void OThemeBase::applyMiscResourceGroup( Config *config )
814{ 802{
815 config-> setGroup ( "Misc" ); 803 config-> setGroup ( "Misc" );
816 QString tmpStr; 804 QString tmpStr;
817 805
818 tmpStr = config->readEntry( "SButtonPosition" ); 806 tmpStr = config->readEntry( "SButtonPosition" );
819 if ( tmpStr == "BottomLeft" ) 807 if ( tmpStr == "BottomLeft" )
820 sbPlacement = SBBottomLeft; 808 sbPlacement = SBBottomLeft;
821 else if ( tmpStr == "BottomRight" ) 809 else if ( tmpStr == "BottomRight" )
822 sbPlacement = SBBottomRight; 810 sbPlacement = SBBottomRight;
823 else { 811 else {
824 if ( tmpStr != "Opposite" && !tmpStr.isEmpty() ) 812 if ( tmpStr != "Opposite" && !tmpStr.isEmpty() )
825 qDebug ( "OThemeBase: Unrecognized sb button option %s, using Opposite.\n", tmpStr.ascii() ); 813 qDebug ( "OThemeBase: Unrecognized sb button option %s, using Opposite.\n", tmpStr.ascii() );
826 sbPlacement = SBOpposite; 814 sbPlacement = SBOpposite;
827 } 815 }
828 tmpStr = config->readEntry( "ArrowType" ); 816 tmpStr = config->readEntry( "ArrowType" );
829 if ( tmpStr == "Small" ) 817 if ( tmpStr == "Small" )
830 arrowStyle = SmallArrow; 818 arrowStyle = SmallArrow;
831 else if ( tmpStr == "3D" ) 819 else if ( tmpStr == "3D" )
832 arrowStyle = MotifArrow; 820 arrowStyle = MotifArrow;
833 else { 821 else {
834 if ( tmpStr != "Normal" && !tmpStr.isEmpty() ) 822 if ( tmpStr != "Normal" && !tmpStr.isEmpty() )
835 qDebug ( "OThemeBase: Unrecognized arrow option %s, using Normal.\n", tmpStr.ascii() ); 823 qDebug ( "OThemeBase: Unrecognized arrow option %s, using Normal.\n", tmpStr.ascii() );
836 arrowStyle = LargeArrow; 824 arrowStyle = LargeArrow;
837 } 825 }
838 tmpStr = config->readEntry( "ShadeStyle" ); 826 tmpStr = config->readEntry( "ShadeStyle" );
839 if ( tmpStr == "Motif" ) 827 if ( tmpStr == "Motif" )
840 shading = Motif; 828 shading = Motif;
841 else if ( tmpStr == "Next" ) 829 else if ( tmpStr == "Next" )
842 shading = Next; 830 shading = Next;
843 else if ( tmpStr == "KDE" ) 831 else if ( tmpStr == "KDE" )
844 shading = KDE; 832 shading = KDE;
845 else 833 else
846 shading = Windows; 834 shading = Windows;
847 835
848 defaultFrame = config->readNumEntry( "FrameWidth", 2 ); 836 defaultFrame = config->readNumEntry( "FrameWidth", 2 );
849 cacheSize = config->readNumEntry( "Cache", 1024 ); 837 cacheSize = config->readNumEntry( "Cache", 1024 );
850 sbExtent = config->readNumEntry( "ScrollBarExtent", 16 ); 838 sbExtent = config->readNumEntry( "ScrollBarExtent", 16 );
851 839
852 config-> setGroup ( "General" ); 840 config-> setGroup ( "General" );
853 841
854 if ( config-> hasKey ( "foreground" )) fgcolor = strToColor ( config-> readEntry ( "foreground" )); 842 if ( config-> hasKey ( "foreground" )) fgcolor = strToColor ( config-> readEntry ( "foreground" ));
855 if ( config-> hasKey ( "background" )) bgcolor = strToColor ( config-> readEntry ( "background" )); 843 if ( config-> hasKey ( "background" )) bgcolor = strToColor ( config-> readEntry ( "background" ));
856 if ( config-> hasKey ( "selectForeground" )) selfgcolor = strToColor ( config-> readEntry ( "selectForeground" )); 844 if ( config-> hasKey ( "selectForeground" )) selfgcolor = strToColor ( config-> readEntry ( "selectForeground" ));
857 if ( config-> hasKey ( "selectBackground" )) selbgcolor = strToColor ( config-> readEntry ( "selectBackground" )); 845 if ( config-> hasKey ( "selectBackground" )) selbgcolor = strToColor ( config-> readEntry ( "selectBackground" ));
858 if ( config-> hasKey ( "windowForeground" )) winfgcolor = strToColor ( config-> readEntry ( "windowForeground" )); 846 if ( config-> hasKey ( "windowForeground" )) winfgcolor = strToColor ( config-> readEntry ( "windowForeground" ));
859 if ( config-> hasKey ( "windowBackground" )) winbgcolor = strToColor ( config-> readEntry ( "windowBackground" )); 847 if ( config-> hasKey ( "windowBackground" )) winbgcolor = strToColor ( config-> readEntry ( "windowBackground" ));
860} 848}
861 849
862void OThemeBase::readMiscResourceGroup() 850void OThemeBase::readMiscResourceGroup()
863{} 851{}
864 852
865void OThemeBase::applyResourceGroup( Config *config, int i, QString *copyfrom, QString *pixnames, QString *brdnames ) 853void OThemeBase::applyResourceGroup( Config *config, int i, QString *copyfrom, QString *pixnames, QString *brdnames )
866{ 854{
867 QString tmpStr; 855 QString tmpStr;
868 856
869 config-> setGroup ( widgetEntries [ i ] ); 857 config-> setGroup ( widgetEntries [ i ] );
870 858
871 tmpStr = config->readEntry( "CopyWidget", "" ); 859 tmpStr = config->readEntry( "CopyWidget", "" );
872 copyfrom [ i ] = tmpStr; 860 copyfrom [ i ] = tmpStr;
873 if ( !tmpStr.isEmpty() ) 861 if ( !tmpStr.isEmpty() )
874 return ; 862 return ;
875 863
876 // Scale hint 864 // Scale hint
877 tmpStr = config->readEntry( "Scale" ); 865 tmpStr = config->readEntry( "Scale" );
878 if ( tmpStr == "Full" ) 866 if ( tmpStr == "Full" )
879 scaleHints [ i ] = FullScale; 867 scaleHints [ i ] = FullScale;
880 else if ( tmpStr == "Horizontal" ) 868 else if ( tmpStr == "Horizontal" )
881 scaleHints [ i ] = HorizontalScale; 869 scaleHints [ i ] = HorizontalScale;
882 else if ( tmpStr == "Vertical" ) 870 else if ( tmpStr == "Vertical" )
883 scaleHints [ i ] = VerticalScale; 871 scaleHints [ i ] = VerticalScale;
884 else { 872 else {
885 if ( tmpStr != "Tile" && !tmpStr.isEmpty() ) 873 if ( tmpStr != "Tile" && !tmpStr.isEmpty() )
886 qDebug ( "OThemeBase: Unrecognized scale option %s, using Tile.\n", tmpStr.ascii() ); 874 qDebug ( "OThemeBase: Unrecognized scale option %s, using Tile.\n", tmpStr.ascii() );
887 scaleHints [ i ] = TileScale; 875 scaleHints [ i ] = TileScale;
888 } 876 }
889 877
890 878
891 // Gradient type 879 // Gradient type
892 tmpStr = config->readEntry( "Gradient" ); 880 tmpStr = config->readEntry( "Gradient" );
893 if ( tmpStr == "Diagonal" ) 881 if ( tmpStr == "Diagonal" )
894 gradients [ i ] = GrDiagonal; 882 gradients [ i ] = GrDiagonal;
895 else if ( tmpStr == "Horizontal" ) 883 else if ( tmpStr == "Horizontal" )
896 gradients [ i ] = GrHorizontal; 884 gradients [ i ] = GrHorizontal;
897 else if ( tmpStr == "Vertical" ) 885 else if ( tmpStr == "Vertical" )
898 gradients [ i ] = GrVertical; 886 gradients [ i ] = GrVertical;
899 else if ( tmpStr == "Pyramid" ) 887 else if ( tmpStr == "Pyramid" )
900 gradients [ i ] = GrPyramid; 888 gradients [ i ] = GrPyramid;
901 else if ( tmpStr == "Rectangle" ) 889 else if ( tmpStr == "Rectangle" )
902 gradients [ i ] = GrRectangle; 890 gradients [ i ] = GrRectangle;
903 else if ( tmpStr == "Elliptic" ) 891 else if ( tmpStr == "Elliptic" )
904 gradients [ i ] = GrElliptic; 892 gradients [ i ] = GrElliptic;
905 else if ( tmpStr == "ReverseBevel" ) 893 else if ( tmpStr == "ReverseBevel" )
906 gradients [ i ] = GrReverseBevel; 894 gradients [ i ] = GrReverseBevel;
907 else { 895 else {
908 if ( tmpStr != "None" && !tmpStr.isEmpty() ) 896 if ( tmpStr != "None" && !tmpStr.isEmpty() )
909 qDebug ( "OThemeBase: Unrecognized gradient option %s, using None.\n", tmpStr.ascii() ); 897 qDebug ( "OThemeBase: Unrecognized gradient option %s, using None.\n", tmpStr.ascii() );
910 gradients [ i ] = GrNone; 898 gradients [ i ] = GrNone;
911 } 899 }
912 900
913 // Blend intensity 901 // Blend intensity
914 blends[ i ] = config->readEntry( "BlendIntensity", "0.0" ).toDouble(); 902 blends[ i ] = config->readEntry( "BlendIntensity", "0.0" ).toDouble();
915 903
916 // Bevel contrast 904 // Bevel contrast
917 bContrasts[ i ] = config->readNumEntry( "BevelContrast", 0 ); 905 bContrasts[ i ] = config->readNumEntry( "BevelContrast", 0 );
918 906
919 // Border width 907 // Border width
920 borders [ i ] = config->readNumEntry( "Border", 1 ); 908 borders [ i ] = config->readNumEntry( "Border", 1 );
921 909
922 // Highlight width 910 // Highlight width
923 highlights [ i ] = config->readNumEntry( "Highlight", 1 ); 911 highlights [ i ] = config->readNumEntry( "Highlight", 1 );
924 912
925 // Gradient low color or blend background 913 // Gradient low color or blend background
926 if ( config->hasKey( "GradientLow" ) && ( gradients[ i ] != GrNone || blends[ i ] != 0.0 )) 914 if ( config->hasKey( "GradientLow" ) && ( gradients[ i ] != GrNone || blends[ i ] != 0.0 ))
927 grLowColors[ i ] = new QColor( strToColor ( config->readEntry( "GradientLow", qApp->palette().normal().background().name() ))); 915 grLowColors[ i ] = new QColor( strToColor ( config->readEntry( "GradientLow", qApp->palette().normal().background().name() )));
928 else 916 else
929 grLowColors[ i ] = NULL; 917 grLowColors[ i ] = NULL;
930 918
931 919
932 // Gradient high color 920 // Gradient high color
933 if ( config->hasKey( "GradientHigh" ) && ( gradients[ i ] != GrNone )) 921 if ( config->hasKey( "GradientHigh" ) && ( gradients[ i ] != GrNone ))
934 grHighColors[ i ] = new QColor( strToColor ( config->readEntry( "GradientHigh", qApp->palette().normal().background().name() ))); 922 grHighColors[ i ] = new QColor( strToColor ( config->readEntry( "GradientHigh", qApp->palette().normal().background().name() )));
935 else 923 else
936 grHighColors[ i ] = NULL; 924 grHighColors[ i ] = NULL;
937 925
938 // Extended color attributes 926 // Extended color attributes
939 if ( config->hasKey( "Foreground" ) || config->hasKey( "Background" ) ) { 927 if ( config->hasKey( "Foreground" ) || config->hasKey( "Background" ) ) {
940 QColor bg = strToColor( config->readEntry( "Background", qApp->palette().normal().background().name() )); 928 QColor bg = strToColor( config->readEntry( "Background", qApp->palette().normal().background().name() ));
941 QColor fg = strToColor( config->readEntry( "Foreground", qApp->palette().normal().foreground().name() )); 929 QColor fg = strToColor( config->readEntry( "Foreground", qApp->palette().normal().foreground().name() ));
942 930
943 colors[ i ] = makeColorGroup( fg, bg, Qt::WindowsStyle ); 931 colors[ i ] = makeColorGroup( fg, bg, Qt::WindowsStyle );
944 } 932 }
945 else 933 else
946 colors[ i ] = NULL; 934 colors[ i ] = NULL;
947 935
948 // Pixmap 936 // Pixmap
949 tmpStr = config->readEntry( "Pixmap", "" ); 937 tmpStr = config->readEntry( "Pixmap", "" );
950 pixnames[ i ] = tmpStr; 938 pixnames[ i ] = tmpStr;
951 duplicate[ i ] = false; 939 duplicate[ i ] = false;
952 pixmaps[ i ] = NULL; 940 pixmaps[ i ] = NULL;
953 images[ i ] = NULL; 941 images[ i ] = NULL;
954 942
955 943
956 // Pixmap border 944 // Pixmap border
957 tmpStr = config->readEntry( "PixmapBorder", "" ); 945 tmpStr = config->readEntry( "PixmapBorder", "" );
958 brdnames[ i ] = tmpStr; 946 brdnames[ i ] = tmpStr;
959 pbDuplicate[ i ] = false; 947 pbDuplicate[ i ] = false;
960 pbPixmaps[ i ] = NULL; 948 pbPixmaps[ i ] = NULL;
961 pbWidth[ i ] = 0; 949 pbWidth[ i ] = 0;
962 if ( !tmpStr.isEmpty() ) { 950 if ( !tmpStr.isEmpty() ) {
963 pbWidth[ i ] = config->readNumEntry( "PixmapBWidth", 0 ); 951 pbWidth[ i ] = config->readNumEntry( "PixmapBWidth", 0 );
964 if ( pbWidth[ i ] == 0 ) { 952 if ( pbWidth[ i ] == 0 ) {
965 qDebug ( "OThemeBase: No border width specified for pixmapped border widget %s\n", widgetEntries[ i ] ); 953 qDebug ( "OThemeBase: No border width specified for pixmapped border widget %s\n", widgetEntries[ i ] );
966 qDebug ( "OThemeBase: Using default of 2.\n" ); 954 qDebug ( "OThemeBase: Using default of 2.\n" );
967 pbWidth[ i ] = 2; 955 pbWidth[ i ] = 2;
968 } 956 }
969 } 957 }
970 958
971 959
972 // Various widget specific settings. This was more efficent when bunched 960 // Various widget specific settings. This was more efficent when bunched
973 // together in the misc group, but this makes an easier to read config. 961 // together in the misc group, but this makes an easier to read config.
974 if ( i == SliderGroove ) 962 if ( i == SliderGroove )
975 roundedSlider = config->readBoolEntry( "SmallGroove", false ); 963 roundedSlider = config->readBoolEntry( "SmallGroove", false );
976 else if ( i == ActiveTab ) { 964 else if ( i == ActiveTab ) {
977 aTabLine = config->readBoolEntry( "BottomLine", true ); 965 aTabLine = config->readBoolEntry( "BottomLine", true );
978 } 966 }
979 else if ( i == InactiveTab ) { 967 else if ( i == InactiveTab ) {
980 iTabLine = config->readBoolEntry( "BottomLine", true ); 968 iTabLine = config->readBoolEntry( "BottomLine", true );
981 } 969 }
982 else if ( i == Splitter ) 970 else if ( i == Splitter )
983 splitterWidth = config->readNumEntry( "Width", 10 ); 971 splitterWidth = config->readNumEntry( "Width", 10 );
984 else if ( i == ComboBox || i == ComboBoxDown ) { 972 else if ( i == ComboBox || i == ComboBoxDown ) {
985 roundedCombo = config->readBoolEntry( "Round", false ); 973 roundedCombo = config->readBoolEntry( "Round", false );
986 } 974 }
987 else if ( i == PushButton || i == PushButtonDown ) { 975 else if ( i == PushButton || i == PushButtonDown ) {
988 btnXShift = config->readNumEntry( "XShift", 0 ); 976 btnXShift = config->readNumEntry( "XShift", 0 );
989 btnYShift = config->readNumEntry( "YShift", 0 ); 977 btnYShift = config->readNumEntry( "YShift", 0 );
990 focus3D = config->readBoolEntry( "3DFocusRect", false ); 978 focus3D = config->readBoolEntry( "3DFocusRect", false );
991 focus3DOffset = config->readBoolEntry( "3DFocusOffset", 0 ); 979 focus3DOffset = config->readBoolEntry( "3DFocusOffset", 0 );
992 roundedButton = config->readBoolEntry( "Round", false ); 980 roundedButton = config->readBoolEntry( "Round", false );
993 } 981 }
994} 982}
995 983
996 984
997void OThemeBase::readResourceGroup( int i, QString *copyfrom, QString *pixnames, QString *brdnames, 985void OThemeBase::readResourceGroup( int i, QString *copyfrom, QString *pixnames, QString *brdnames,
998 bool *loadArray ) 986 bool *loadArray )
999{ 987{
1000 if ( loadArray[ i ] == true ) { 988 if ( loadArray[ i ] == true ) {
1001 return ; // already been preloaded. 989 return ; // already been preloaded.
1002 } 990 }
1003 991
1004 int tmpVal; 992 int tmpVal;
1005 QString tmpStr; 993 QString tmpStr;
1006 994
1007 tmpStr = copyfrom [ i ]; 995 tmpStr = copyfrom [ i ];
1008 if ( !tmpStr.isEmpty() ) { // Duplicate another widget's config 996 if ( !tmpStr.isEmpty() ) { // Duplicate another widget's config
1009 int sIndex; 997 int sIndex;
1010 loadArray[ i ] = true; 998 loadArray[ i ] = true;
1011 for ( sIndex = 0; sIndex < WIDGETS; ++sIndex ) { 999 for ( sIndex = 0; sIndex < WIDGETS; ++sIndex ) {
1012 if ( tmpStr == widgetEntries[ sIndex ] ) { 1000 if ( tmpStr == widgetEntries[ sIndex ] ) {
1013 if ( !loadArray[ sIndex ] ) // hasn't been loaded yet 1001 if ( !loadArray[ sIndex ] ) // hasn't been loaded yet
1014 readResourceGroup( sIndex, copyfrom, pixnames, brdnames, 1002 readResourceGroup( sIndex, copyfrom, pixnames, brdnames,
1015 loadArray ); 1003 loadArray );
1016 break; 1004 break;
1017 } 1005 }
1018 } 1006 }
1019 if ( loadArray[ sIndex ] ) { 1007 if ( loadArray[ sIndex ] ) {
1020 copyWidgetConfig( sIndex, i, pixnames, brdnames ); 1008 copyWidgetConfig( sIndex, i, pixnames, brdnames );
1021 } 1009 }
1022 else 1010 else
1023 qDebug ( "OThemeBase: Unable to identify source widget for %s\n", widgetEntries[ i ] ); 1011 qDebug ( "OThemeBase: Unable to identify source widget for %s\n", widgetEntries[ i ] );
1024 return ; 1012 return ;
1025 } 1013 }
1026 // special inheritance for disabled arrows (these are tri-state unlike 1014 // special inheritance for disabled arrows (these are tri-state unlike
1027 // the rest of what we handle). 1015 // the rest of what we handle).
1028 for ( tmpVal = DisArrowUp; tmpVal <= DisArrowRight; ++tmpVal ) { 1016 for ( tmpVal = DisArrowUp; tmpVal <= DisArrowRight; ++tmpVal ) {
1029 if ( tmpVal == i ) { 1017 if ( tmpVal == i ) {
1030 tmpStr = pixnames [ i ]; 1018 tmpStr = pixnames [ i ];
1031 if ( tmpStr.isEmpty() ) { 1019 if ( tmpStr.isEmpty() ) {
1032 copyWidgetConfig( ArrowUp + ( tmpVal - DisArrowUp ), i, pixnames, 1020 copyWidgetConfig( ArrowUp + ( tmpVal - DisArrowUp ), i, pixnames,
1033 brdnames ); 1021 brdnames );
1034 return ; 1022 return ;
1035 } 1023 }
1036 } 1024 }
1037 } 1025 }
1038 1026
1039 // Pixmap 1027 // Pixmap
1040 int existing; 1028 int existing;
1041 // Scan for duplicate pixmaps(two identical pixmaps, tile scale, no blend, 1029 // Scan for duplicate pixmaps(two identical pixmaps, tile scale, no blend,
1042 // no pixmapped border) 1030 // no pixmapped border)
1043 if ( !pixnames [ i ].isEmpty() ) { 1031 if ( !pixnames [ i ].isEmpty() ) {
1044 for ( existing = 0; existing < i; ++existing ) { 1032 for ( existing = 0; existing < i; ++existing ) {
1045 if ( pixnames[ i ] == pixnames[ existing ] && scaleHints[ i ] == TileScale && 1033 if ( pixnames[ i ] == pixnames[ existing ] && scaleHints[ i ] == TileScale &&
1046 scaleHints[ existing ] == TileScale && blends[ existing ] == 0.0 && 1034 scaleHints[ existing ] == TileScale && blends[ existing ] == 0.0 &&
1047 blends[ i ] == 0.0 ) { 1035 blends[ i ] == 0.0 ) {
1048 pixmaps[ i ] = pixmaps[ existing ]; 1036 pixmaps[ i ] = pixmaps[ existing ];
1049 duplicate[ i ] = true; 1037 duplicate[ i ] = true;
1050 break; 1038 break;
1051 } 1039 }
1052 } 1040 }
1053 } 1041 }
1054 // load 1042 // load
1055 if ( !duplicate[ i ] && !pixnames[ i ].isEmpty() ) { 1043 if ( !duplicate[ i ] && !pixnames[ i ].isEmpty() ) {
1056 pixmaps[ i ] = loadPixmap( pixnames[ i ] ); 1044 pixmaps[ i ] = loadPixmap( pixnames[ i ] );
1057 // load and save images for scaled/blended widgets for speed. 1045 // load and save images for scaled/blended widgets for speed.
1058 if ( scaleHints[ i ] == TileScale && blends[ i ] == 0.0 ) 1046 if ( scaleHints[ i ] == TileScale && blends[ i ] == 0.0 )
1059 images[ i ] = NULL; 1047 images[ i ] = NULL;
1060 else 1048 else
1061 images[ i ] = loadImage( pixnames[ i ] ); 1049 images[ i ] = loadImage( pixnames[ i ] );
1062 } 1050 }
1063 1051
1064 // Pixmap border 1052 // Pixmap border
1065 if ( !brdnames [ i ]. isEmpty () ) { 1053 if ( !brdnames [ i ]. isEmpty () ) {
1066 // duplicate check 1054 // duplicate check
1067 for ( existing = 0; existing < i; ++existing ) { 1055 for ( existing = 0; existing < i; ++existing ) {
1068 if ( brdnames [i] == brdnames[ existing ] ) { 1056 if ( brdnames [i] == brdnames[ existing ] ) {
1069 pbPixmaps[ i ] = pbPixmaps[ existing ]; 1057 pbPixmaps[ i ] = pbPixmaps[ existing ];
1070 pbDuplicate[ i ] = true; 1058 pbDuplicate[ i ] = true;
1071 break; 1059 break;
1072 } 1060 }
1073 } 1061 }
1074 } 1062 }
1075 // load 1063 // load
1076 if ( !pbDuplicate[ i ] && !brdnames[ i ].isEmpty() ) 1064 if ( !pbDuplicate[ i ] && !brdnames[ i ].isEmpty() )
1077 pbPixmaps[ i ] = loadPixmap( brdnames[ i ] ); 1065 pbPixmaps[ i ] = loadPixmap( brdnames[ i ] );
1078 1066
1079 if ( pbPixmaps[ i ] && !pbDuplicate[ i ] ) 1067 if ( pbPixmaps[ i ] && !pbDuplicate[ i ] )
1080 generateBorderPix( i ); 1068 generateBorderPix( i );
1081 1069
1082 loadArray[ i ] = true; 1070 loadArray[ i ] = true;
1083} 1071}
1084 1072
1085 1073
1086OThemePixmap::OThemePixmap( bool timer ) 1074OThemePixmap::OThemePixmap( bool timer )
1087 : QPixmap() 1075 : QPixmap()
1088{ 1076{
1089 if(timer){ 1077 if(timer){
1090 t = new QTime; 1078 t = new QTime;
1091 t->start(); 1079 t->start();
1092 } 1080 }
1093 else 1081 else
1094 t = NULL; 1082 t = NULL;
1095 int i; 1083 int i;
1096 for ( i = 0; i < 8; ++i ) 1084 for ( i = 0; i < 8; ++i )
1097 b[ i ] = NULL; 1085 b[ i ] = NULL;
1098} 1086}
1099 1087
1100OThemePixmap::OThemePixmap( const OThemePixmap &p ) 1088OThemePixmap::OThemePixmap( const OThemePixmap &p )
1101 : QPixmap( p ) 1089 : QPixmap( p )
1102{ 1090{
1103 if(p.t){ 1091 if(p.t){
1104 t = new QTime; 1092 t = new QTime;
1105 t->start(); 1093 t->start();
1106 } 1094 }
1107 else 1095 else
1108 t = NULL; 1096 t = NULL;
1109 int i; 1097 int i;
1110 for ( i = 0; i < 8; ++i ) 1098 for ( i = 0; i < 8; ++i )
1111 if ( p.b[ i ] ) 1099 if ( p.b[ i ] )
1112 b[ i ] = new QPixmap( *p.b[ i ] ); 1100 b[ i ] = new QPixmap( *p.b[ i ] );
1113 else 1101 else
1114 b[ i ] = NULL; 1102 b[ i ] = NULL;
1115} 1103}
1116 1104
1117 1105
1118 1106
1119OThemePixmap::~OThemePixmap() 1107OThemePixmap::~OThemePixmap()
1120{ 1108{
1121 if(t) 1109 if(t)
1122 delete t; 1110 delete t;
1123 int i; 1111 int i;
1124 for ( i = 0; i < 8; ++i ) 1112 for ( i = 0; i < 8; ++i )
1125 if ( b[ i ] ) 1113 if ( b[ i ] )
1126 delete b[ i ]; 1114 delete b[ i ];
1127} 1115}
1128 1116
1129OThemeCache::OThemeCache( int maxSize, QObject *parent, const char *name ) 1117OThemeCache::OThemeCache( int maxSize, QObject *parent, const char *name )
1130 : QObject( parent, name ) 1118 : QObject( parent, name )
1131{ 1119{
1132 cache.setMaxCost( maxSize * 1024 ); 1120 cache.setMaxCost( maxSize * 1024 );
1133 cache.setAutoDelete( true ); 1121 cache.setAutoDelete( true );
1134 flushTimer.start(300000); // 5 minutes 1122 flushTimer.start(300000); // 5 minutes
1135 connect(&flushTimer, SIGNAL(timeout()), SLOT(flushTimeout())); 1123 connect(&flushTimer, SIGNAL(timeout()), SLOT(flushTimeout()));
1136} 1124}
1137 1125
1138void OThemeCache::flushTimeout() 1126void OThemeCache::flushTimeout()
1139{ 1127{
1140 QIntCacheIterator<OThemePixmap> it( cache ); 1128 QIntCacheIterator<OThemePixmap> it( cache );
1141 while ( it.current() ) { 1129 while ( it.current() ) {
1142 if ( it.current() ->isOld() ) 1130 if ( it.current() ->isOld() )
1143 cache.remove( it.currentKey() ); 1131 cache.remove( it.currentKey() );
1144 else 1132 else
1145 ++it; 1133 ++it;
1146 } 1134 }
1147} 1135}
1148 1136
1149OThemePixmap* OThemeCache::pixmap( int w, int h, int widgetID, bool border, 1137OThemePixmap* OThemeCache::pixmap( int w, int h, int widgetID, bool border,
1150 bool mask ) 1138 bool mask )
1151{ 1139{
1152 1140
1153 kthemeKey key; 1141 kthemeKey key;
1154 key.cacheKey = 0; // shut up, gcc 1142 key.cacheKey = 0; // shut up, gcc
1155 key.data.id = widgetID; 1143 key.data.id = widgetID;
1156 key.data.width = w; 1144 key.data.width = w;
1157 key.data.height = h; 1145 key.data.height = h;
1158 key.data.border = border; 1146 key.data.border = border;
1159 key.data.mask = mask; 1147 key.data.mask = mask;
1160 1148
1161 OThemePixmap *pix = cache.find( ( unsigned long ) key.cacheKey ); 1149 OThemePixmap *pix = cache.find( ( unsigned long ) key.cacheKey );
1162 if ( pix ) 1150 if ( pix )
1163 pix->updateAccessed(); 1151 pix->updateAccessed();
1164 return ( pix ); 1152 return ( pix );
1165} 1153}
1166 1154
1167OThemePixmap* OThemeCache::horizontalPixmap( int w, int widgetID ) 1155OThemePixmap* OThemeCache::horizontalPixmap( int w, int widgetID )
1168{ 1156{
1169 kthemeKey key; 1157 kthemeKey key;
1170 key.cacheKey = 0; // shut up, gcc 1158 key.cacheKey = 0; // shut up, gcc
1171 key.data.id = widgetID; 1159 key.data.id = widgetID;
1172 key.data.width = w; 1160 key.data.width = w;
1173 key.data.height = 0; 1161 key.data.height = 0;
1174 key.data.border = false; 1162 key.data.border = false;
1175 key.data.mask = false; 1163 key.data.mask = false;
1176 OThemePixmap *pix = cache.find( ( unsigned long ) key.cacheKey ); 1164 OThemePixmap *pix = cache.find( ( unsigned long ) key.cacheKey );
1177 if ( pix ) 1165 if ( pix )
1178 pix->updateAccessed(); 1166 pix->updateAccessed();
1179 return ( pix ); 1167 return ( pix );
1180} 1168}
1181 1169
1182OThemePixmap* OThemeCache::verticalPixmap( int h, int widgetID ) 1170OThemePixmap* OThemeCache::verticalPixmap( int h, int widgetID )
1183{ 1171{
1184 kthemeKey key; 1172 kthemeKey key;
1185 key.cacheKey = 0; // shut up, gcc 1173 key.cacheKey = 0; // shut up, gcc
1186 key.data.id = widgetID; 1174 key.data.id = widgetID;
1187 key.data.width = 0; 1175 key.data.width = 0;
1188 key.data.height = h; 1176 key.data.height = h;
1189 key.data.border = false; 1177 key.data.border = false;
1190 key.data.mask = false; 1178 key.data.mask = false;
1191 OThemePixmap *pix = cache.find( ( unsigned long ) key.cacheKey ); 1179 OThemePixmap *pix = cache.find( ( unsigned long ) key.cacheKey );
1192 if ( pix ) 1180 if ( pix )
1193 pix->updateAccessed(); 1181 pix->updateAccessed();
1194 return ( pix ); 1182 return ( pix );
1195} 1183}
1196 1184
1197bool OThemeCache::insert( OThemePixmap *pixmap, ScaleHint scale, int widgetID, 1185bool OThemeCache::insert( OThemePixmap *pixmap, ScaleHint scale, int widgetID,
1198 bool border, bool mask ) 1186 bool border, bool mask )
1199{ 1187{
1200 kthemeKey key; 1188 kthemeKey key;
1201 key.cacheKey = 0; // shut up, gcc 1189 key.cacheKey = 0; // shut up, gcc
1202 key.data.id = widgetID; 1190 key.data.id = widgetID;
1203 key.data.width = ( scale == FullScale || scale == HorizontalScale ) ? 1191 key.data.width = ( scale == FullScale || scale == HorizontalScale ) ?
1204 pixmap->width() : 0; 1192 pixmap->width() : 0;
1205 key.data.height = ( scale == FullScale || scale == VerticalScale ) ? 1193 key.data.height = ( scale == FullScale || scale == VerticalScale ) ?
1206 pixmap->height() : 0; 1194 pixmap->height() : 0;
1207 key.data.border = border; 1195 key.data.border = border;
1208 key.data.mask = mask; 1196 key.data.mask = mask;
1209 1197
1210 if ( cache.find( ( unsigned long ) key.cacheKey, true ) != NULL ) { 1198 if ( cache.find( ( unsigned long ) key.cacheKey, true ) != NULL ) {
1211 return ( true ); // a pixmap of this scale is already in there 1199 return ( true ); // a pixmap of this scale is already in there
1212 } 1200 }
1213 return ( cache.insert( ( unsigned long ) key.cacheKey, pixmap, 1201 return ( cache.insert( ( unsigned long ) key.cacheKey, pixmap,
1214 pixmap->width() * pixmap->height() * pixmap->depth() / 8 ) ); 1202 pixmap->width() * pixmap->height() * pixmap->depth() / 8 ) );
1215} 1203}
1216 1204
1217//#include "kthemebase.moc" 1205//#include "kthemebase.moc"