summaryrefslogtreecommitdiff
authorsandman <sandman>2002-11-24 18:31:38 (UTC)
committer sandman <sandman>2002-11-24 18:31:38 (UTC)
commit75cf5d2277d66f533167bcb2e3b6f0eee2424d96 (patch) (unidiff)
tree32f6fb81494954ac93e6f451f701d0b83f9852b7
parent1b2c3ce0d94f033e8ffe1aa8575b210cdfb3c1ec (diff)
downloadopie-75cf5d2277d66f533167bcb2e3b6f0eee2424d96.zip
opie-75cf5d2277d66f533167bcb2e3b6f0eee2424d96.tar.gz
opie-75cf5d2277d66f533167bcb2e3b6f0eee2424d96.tar.bz2
Valgrind complaint
had to changed the initialization sequence
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/styles/theme/othemebase.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/noncore/styles/theme/othemebase.cpp b/noncore/styles/theme/othemebase.cpp
index 58005b5..acac847 100644
--- a/noncore/styles/theme/othemebase.cpp
+++ b/noncore/styles/theme/othemebase.cpp
@@ -1,682 +1,682 @@
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 84class MyConfig : public Config
85{ 85{
86public: 86public:
87 MyConfig ( const QString &f, Domain d ) : Config ( f, d ) 87 MyConfig ( const QString &f, Domain d ) : Config ( f, d )
88 { } 88 { }
89 89
90 bool hasGroup ( const QString &gname ) const 90 bool hasGroup ( const QString &gname ) const
91 { 91 {
92 QMap< QString, ConfigGroup>::ConstIterator it = groups. find ( gname ); 92 QMap< QString, ConfigGroup>::ConstIterator it = groups. find ( gname );
93 return ( it != groups.end() ); 93 return ( it != groups.end() );
94 } 94 }
95}; 95};
96 96
97void OThemeBase::generateBorderPix( int i ) 97void OThemeBase::generateBorderPix( int i )
98{ 98{
99 // separate pixmap into separate components 99 // separate pixmap into separate components
100 if ( pbPixmaps[ i ] ) { 100 if ( pbPixmaps[ i ] ) {
101 // evidently I have to do masks manually... 101 // evidently I have to do masks manually...
102 const QBitmap * srcMask = pbPixmaps[ i ] ->mask(); 102 const QBitmap * srcMask = pbPixmaps[ i ] ->mask();
103 QBitmap destMask( pbWidth[ i ], pbWidth[ i ] ); 103 QBitmap destMask( pbWidth[ i ], pbWidth[ i ] );
104 QPixmap tmp( pbWidth[ i ], pbWidth[ i ] ); 104 QPixmap tmp( pbWidth[ i ], pbWidth[ i ] );
105 105
106 bitBlt( &tmp, 0, 0, pbPixmaps[ i ], 0, 0, pbWidth[ i ], pbWidth[ i ], 106 bitBlt( &tmp, 0, 0, pbPixmaps[ i ], 0, 0, pbWidth[ i ], pbWidth[ i ],
107 Qt::CopyROP, false ); 107 Qt::CopyROP, false );
108 if ( srcMask ) { 108 if ( srcMask ) {
109 bitBlt( &destMask, 0, 0, srcMask, 0, 0, pbWidth[ i ], pbWidth[ i ], 109 bitBlt( &destMask, 0, 0, srcMask, 0, 0, pbWidth[ i ], pbWidth[ i ],
110 Qt::CopyROP, false ); 110 Qt::CopyROP, false );
111 tmp.setMask( destMask ); 111 tmp.setMask( destMask );
112 } 112 }
113 pbPixmaps[ i ] ->setBorder( OThemePixmap::TopLeft, tmp ); 113 pbPixmaps[ i ] ->setBorder( OThemePixmap::TopLeft, tmp );
114 114
115 bitBlt( &tmp, 0, 0, pbPixmaps[ i ], pbPixmaps[ i ] ->width() - pbWidth[ i ], 0, 115 bitBlt( &tmp, 0, 0, pbPixmaps[ i ], pbPixmaps[ i ] ->width() - pbWidth[ i ], 0,
116 pbWidth[ i ], pbWidth[ i ], Qt::CopyROP, false ); 116 pbWidth[ i ], pbWidth[ i ], Qt::CopyROP, false );
117 if ( srcMask ) { 117 if ( srcMask ) {
118 bitBlt( &destMask, 0, 0, srcMask, pbPixmaps[ i ] ->width() - pbWidth[ i ], 118 bitBlt( &destMask, 0, 0, srcMask, pbPixmaps[ i ] ->width() - pbWidth[ i ],
119 0, pbWidth[ i ], pbWidth[ i ], Qt::CopyROP, false ); 119 0, pbWidth[ i ], pbWidth[ i ], Qt::CopyROP, false );
120 tmp.setMask( destMask ); 120 tmp.setMask( destMask );
121 } 121 }
122 pbPixmaps[ i ] ->setBorder( OThemePixmap::TopRight, tmp ); 122 pbPixmaps[ i ] ->setBorder( OThemePixmap::TopRight, tmp );
123 123
124 bitBlt( &tmp, 0, 0, pbPixmaps[ i ], 0, pbPixmaps[ i ] ->height() - pbWidth[ i ], 124 bitBlt( &tmp, 0, 0, pbPixmaps[ i ], 0, pbPixmaps[ i ] ->height() - pbWidth[ i ],
125 pbWidth[ i ], pbWidth[ i ], Qt::CopyROP, false ); 125 pbWidth[ i ], pbWidth[ i ], Qt::CopyROP, false );
126 if ( srcMask ) { 126 if ( srcMask ) {
127 bitBlt( &destMask, 0, 0, srcMask, 0, pbPixmaps[ i ] ->height() - pbWidth[ i ], 127 bitBlt( &destMask, 0, 0, srcMask, 0, pbPixmaps[ i ] ->height() - pbWidth[ i ],
128 pbWidth[ i ], pbWidth[ i ], Qt::CopyROP, false ); 128 pbWidth[ i ], pbWidth[ i ], Qt::CopyROP, false );
129 tmp.setMask( destMask ); 129 tmp.setMask( destMask );
130 } 130 }
131 pbPixmaps[ i ] ->setBorder( OThemePixmap::BottomLeft, tmp ); 131 pbPixmaps[ i ] ->setBorder( OThemePixmap::BottomLeft, tmp );
132 132
133 bitBlt( &tmp, 0, 0, pbPixmaps[ i ], pbPixmaps[ i ] ->width() - pbWidth[ i ], 133 bitBlt( &tmp, 0, 0, pbPixmaps[ i ], pbPixmaps[ i ] ->width() - pbWidth[ i ],
134 pbPixmaps[ i ] ->height() - pbWidth[ i ], pbWidth[ i ], pbWidth[ i ], 134 pbPixmaps[ i ] ->height() - pbWidth[ i ], pbWidth[ i ], pbWidth[ i ],
135 Qt::CopyROP, false ); 135 Qt::CopyROP, false );
136 if ( srcMask ) { 136 if ( srcMask ) {
137 bitBlt( &destMask, 0, 0, srcMask, pbPixmaps[ i ] ->width() - pbWidth[ i ], 137 bitBlt( &destMask, 0, 0, srcMask, pbPixmaps[ i ] ->width() - pbWidth[ i ],
138 pbPixmaps[ i ] ->height() - pbWidth[ i ], pbWidth[ i ], pbWidth[ i ], 138 pbPixmaps[ i ] ->height() - pbWidth[ i ], pbWidth[ i ], pbWidth[ i ],
139 Qt::CopyROP, false ); 139 Qt::CopyROP, false );
140 tmp.setMask( destMask ); 140 tmp.setMask( destMask );
141 } 141 }
142 pbPixmaps[ i ] ->setBorder( OThemePixmap::BottomRight, tmp ); 142 pbPixmaps[ i ] ->setBorder( OThemePixmap::BottomRight, tmp );
143 143
144 tmp.resize( pbPixmaps[ i ] ->width() - pbWidth[ i ] * 2, pbWidth[ i ] ); 144 tmp.resize( pbPixmaps[ i ] ->width() - pbWidth[ i ] * 2, pbWidth[ i ] );
145 destMask.resize( pbPixmaps[ i ] ->width() - pbWidth[ i ] * 2, pbWidth[ i ] ); 145 destMask.resize( pbPixmaps[ i ] ->width() - pbWidth[ i ] * 2, pbWidth[ i ] );
146 bitBlt( &tmp, 0, 0, pbPixmaps[ i ], pbWidth[ i ], 0, 146 bitBlt( &tmp, 0, 0, pbPixmaps[ i ], pbWidth[ i ], 0,
147 pbPixmaps[ i ] ->width() - pbWidth[ i ] * 2, pbWidth[ i ], Qt::CopyROP, false ); 147 pbPixmaps[ i ] ->width() - pbWidth[ i ] * 2, pbWidth[ i ], Qt::CopyROP, false );
148 if ( srcMask ) { 148 if ( srcMask ) {
149 bitBlt( &destMask, 0, 0, srcMask, pbWidth[ i ], 0, 149 bitBlt( &destMask, 0, 0, srcMask, pbWidth[ i ], 0,
150 pbPixmaps[ i ] ->width() - pbWidth[ i ] * 2, pbWidth[ i ], 150 pbPixmaps[ i ] ->width() - pbWidth[ i ] * 2, pbWidth[ i ],
151 Qt::CopyROP, false ); 151 Qt::CopyROP, false );
152 tmp.setMask( destMask ); 152 tmp.setMask( destMask );
153 } 153 }
154 pbPixmaps[ i ] ->setBorder( OThemePixmap::Top, tmp ); 154 pbPixmaps[ i ] ->setBorder( OThemePixmap::Top, tmp );
155 155
156 bitBlt( &tmp, 0, 0, pbPixmaps[ i ], pbWidth[ i ], 156 bitBlt( &tmp, 0, 0, pbPixmaps[ i ], pbWidth[ i ],
157 pbPixmaps[ i ] ->height() - pbWidth[ i ], 157 pbPixmaps[ i ] ->height() - pbWidth[ i ],
158 pbPixmaps[ i ] ->width() - pbWidth[ i ] * 2, pbWidth[ i ], Qt::CopyROP, false ); 158 pbPixmaps[ i ] ->width() - pbWidth[ i ] * 2, pbWidth[ i ], Qt::CopyROP, false );
159 if ( srcMask ) { 159 if ( srcMask ) {
160 bitBlt( &destMask, 0, 0, srcMask, pbWidth[ i ], 160 bitBlt( &destMask, 0, 0, srcMask, pbWidth[ i ],
161 pbPixmaps[ i ] ->height() - pbWidth[ i ], 161 pbPixmaps[ i ] ->height() - pbWidth[ i ],
162 pbPixmaps[ i ] ->width() - pbWidth[ i ] * 2, pbWidth[ i ], Qt::CopyROP, false ); 162 pbPixmaps[ i ] ->width() - pbWidth[ i ] * 2, pbWidth[ i ], Qt::CopyROP, false );
163 tmp.setMask( destMask ); 163 tmp.setMask( destMask );
164 } 164 }
165 pbPixmaps[ i ] ->setBorder( OThemePixmap::Bottom, tmp ); 165 pbPixmaps[ i ] ->setBorder( OThemePixmap::Bottom, tmp );
166 166
167 tmp.resize( pbWidth[ i ], pbPixmaps[ i ] ->height() - pbWidth[ i ] * 2 ); 167 tmp.resize( pbWidth[ i ], pbPixmaps[ i ] ->height() - pbWidth[ i ] * 2 );
168 destMask.resize( pbWidth[ i ], pbPixmaps[ i ] ->height() - pbWidth[ i ] * 2 ); 168 destMask.resize( pbWidth[ i ], pbPixmaps[ i ] ->height() - pbWidth[ i ] * 2 );
169 bitBlt( &tmp, 0, 0, pbPixmaps[ i ], 0, pbWidth[ i ], pbWidth[ i ], 169 bitBlt( &tmp, 0, 0, pbPixmaps[ i ], 0, pbWidth[ i ], pbWidth[ i ],
170 pbPixmaps[ i ] ->height() - pbWidth[ i ] * 2, Qt::CopyROP, false ); 170 pbPixmaps[ i ] ->height() - pbWidth[ i ] * 2, Qt::CopyROP, false );
171 if ( srcMask ) { 171 if ( srcMask ) {
172 bitBlt( &destMask, 0, 0, srcMask, 0, pbWidth[ i ], pbWidth[ i ], 172 bitBlt( &destMask, 0, 0, srcMask, 0, pbWidth[ i ], pbWidth[ i ],
173 pbPixmaps[ i ] ->height() - pbWidth[ i ] * 2, Qt::CopyROP, false ); 173 pbPixmaps[ i ] ->height() - pbWidth[ i ] * 2, Qt::CopyROP, false );
174 tmp.setMask( destMask ); 174 tmp.setMask( destMask );
175 } 175 }
176 176
177 pbPixmaps[ i ] ->setBorder( OThemePixmap::Left, tmp ); 177 pbPixmaps[ i ] ->setBorder( OThemePixmap::Left, tmp );
178 178
179 bitBlt( &tmp, 0, 0, pbPixmaps[ i ], pbPixmaps[ i ] ->width() - pbWidth[ i ], 179 bitBlt( &tmp, 0, 0, pbPixmaps[ i ], pbPixmaps[ i ] ->width() - pbWidth[ i ],
180 pbWidth[ i ], pbWidth[ i ], pbPixmaps[ i ] ->height() - pbWidth[ i ] * 2, 180 pbWidth[ i ], pbWidth[ i ], pbPixmaps[ i ] ->height() - pbWidth[ i ] * 2,
181 Qt::CopyROP, false ); 181 Qt::CopyROP, false );
182 if ( srcMask ) { 182 if ( srcMask ) {
183 bitBlt( &destMask, 0, 0, srcMask, pbPixmaps[ i ] ->width() - pbWidth[ i ], 183 bitBlt( &destMask, 0, 0, srcMask, pbPixmaps[ i ] ->width() - pbWidth[ i ],
184 pbWidth[ i ], pbWidth[ i ], pbPixmaps[ i ] ->height() - pbWidth[ i ] * 2, 184 pbWidth[ i ], pbWidth[ i ], pbPixmaps[ i ] ->height() - pbWidth[ i ] * 2,
185 Qt::CopyROP, false ); 185 Qt::CopyROP, false );
186 tmp.setMask( destMask ); 186 tmp.setMask( destMask );
187 } 187 }
188 pbPixmaps[ i ] ->setBorder( OThemePixmap::Right, tmp ); 188 pbPixmaps[ i ] ->setBorder( OThemePixmap::Right, tmp );
189 } 189 }
190 else 190 else
191 qDebug ( "OThemeBase: Tried making border from empty pixmap" ); 191 qDebug ( "OThemeBase: Tried making border from empty pixmap" );
192} 192}
193 193
194 194
195void OThemeBase::copyWidgetConfig( int sourceID, int destID, QString *pixnames, 195void OThemeBase::copyWidgetConfig( int sourceID, int destID, QString *pixnames,
196 QString *brdnames ) 196 QString *brdnames )
197{ 197{
198 scaleHints[ destID ] = scaleHints[ sourceID ]; 198 scaleHints[ destID ] = scaleHints[ sourceID ];
199 gradients[ destID ] = gradients[ sourceID ]; 199 gradients[ destID ] = gradients[ sourceID ];
200 blends[ destID ] = blends[ sourceID ]; 200 blends[ destID ] = blends[ sourceID ];
201 bContrasts[ destID ] = bContrasts[ sourceID ]; 201 bContrasts[ destID ] = bContrasts[ sourceID ];
202 borders[ destID ] = borders[ sourceID ]; 202 borders[ destID ] = borders[ sourceID ];
203 highlights[ destID ] = highlights[ sourceID ]; 203 highlights[ destID ] = highlights[ sourceID ];
204 204
205 if ( grLowColors[ sourceID ] ) 205 if ( grLowColors[ sourceID ] )
206 grLowColors[ destID ] = new QColor( *grLowColors[ sourceID ] ); 206 grLowColors[ destID ] = new QColor( *grLowColors[ sourceID ] );
207 else 207 else
208 grLowColors[ destID ] = NULL; 208 grLowColors[ destID ] = NULL;
209 209
210 if ( grHighColors[ sourceID ] ) 210 if ( grHighColors[ sourceID ] )
211 grHighColors[ destID ] = new QColor( *grHighColors[ sourceID ] ); 211 grHighColors[ destID ] = new QColor( *grHighColors[ sourceID ] );
212 else 212 else
213 grHighColors[ destID ] = NULL; 213 grHighColors[ destID ] = NULL;
214 214
215 if ( colors[ sourceID ] ) 215 if ( colors[ sourceID ] )
216 colors[ destID ] = new QColorGroup( *colors[ sourceID ] ); 216 colors[ destID ] = new QColorGroup( *colors[ sourceID ] );
217 else 217 else
218 colors[ destID ] = NULL; 218 colors[ destID ] = NULL;
219 219
220 // pixmap 220 // pixmap
221 pixnames[ destID ] = pixnames[ sourceID ]; 221 pixnames[ destID ] = pixnames[ sourceID ];
222 duplicate[ destID ] = false; 222 duplicate[ destID ] = false;
223 pixmaps[ destID ] = NULL; 223 pixmaps[ destID ] = NULL;
224 images[ destID ] = NULL; 224 images[ destID ] = NULL;
225 if ( !pixnames[ destID ].isEmpty() ) { 225 if ( !pixnames[ destID ].isEmpty() ) {
226 if ( scaleHints[ sourceID ] == TileScale && blends[ sourceID ] == 0.0 ) { 226 if ( scaleHints[ sourceID ] == TileScale && blends[ sourceID ] == 0.0 ) {
227 pixmaps[ destID ] = pixmaps[ sourceID ]; 227 pixmaps[ destID ] = pixmaps[ sourceID ];
228 duplicate[ destID ] = true; 228 duplicate[ destID ] = true;
229 } 229 }
230 if ( !duplicate[ destID ] ) { 230 if ( !duplicate[ destID ] ) {
231 pixmaps[ destID ] = loadPixmap( pixnames[ destID ] ); 231 pixmaps[ destID ] = loadPixmap( pixnames[ destID ] );
232 if ( scaleHints[ destID ] == TileScale && blends[ destID ] == 0.0 ) 232 if ( scaleHints[ destID ] == TileScale && blends[ destID ] == 0.0 )
233 images[ destID ] = NULL; 233 images[ destID ] = NULL;
234 else 234 else
235 images[ destID ] = loadImage( pixnames[ destID ] ); 235 images[ destID ] = loadImage( pixnames[ destID ] );
236 } 236 }
237 } 237 }
238 238
239 // border pixmap 239 // border pixmap
240 pbDuplicate[ destID ] = false; 240 pbDuplicate[ destID ] = false;
241 pbPixmaps[ destID ] = NULL; 241 pbPixmaps[ destID ] = NULL;
242 pbWidth[ destID ] = pbWidth[ sourceID ]; 242 pbWidth[ destID ] = pbWidth[ sourceID ];
243 brdnames[ destID ] = brdnames[ sourceID ]; 243 brdnames[ destID ] = brdnames[ sourceID ];
244 if ( !brdnames[ destID ].isEmpty() ) { 244 if ( !brdnames[ destID ].isEmpty() ) {
245 pbPixmaps[ destID ] = pbPixmaps[ sourceID ]; 245 pbPixmaps[ destID ] = pbPixmaps[ sourceID ];
246 pbDuplicate[ destID ] = true; 246 pbDuplicate[ destID ] = true;
247 } 247 }
248 248
249 if ( sourceID == ActiveTab && destID == InactiveTab ) 249 if ( sourceID == ActiveTab && destID == InactiveTab )
250 aTabLine = iTabLine; 250 aTabLine = iTabLine;
251 else if ( sourceID == InactiveTab && destID == ActiveTab ) 251 else if ( sourceID == InactiveTab && destID == ActiveTab )
252 iTabLine = aTabLine; 252 iTabLine = aTabLine;
253} 253}
254 254
255void OThemeBase::readConfig( Qt::GUIStyle /*style*/ ) 255void OThemeBase::readConfig( Qt::GUIStyle /*style*/ )
256{ 256{
257#define PREBLEND_ITEMS 12 257#define PREBLEND_ITEMS 12
258 static WidgetType preBlend[] = {Slider, IndicatorOn, IndicatorOff, 258 static WidgetType preBlend[] = {Slider, IndicatorOn, IndicatorOff,
259 ExIndicatorOn, ExIndicatorOff, HScrollDeco, VScrollDeco, HScrollDecoDown, 259 ExIndicatorOn, ExIndicatorOff, HScrollDeco, VScrollDeco, HScrollDecoDown,
260 VScrollDecoDown, ComboDeco, ComboDecoDown, CheckMark}; 260 VScrollDecoDown, ComboDeco, ComboDecoDown, CheckMark};
261 261
262 int i; 262 int i;
263 QString tmpStr; 263 QString tmpStr;
264 QString copyfrom[ WIDGETS ]; 264 QString copyfrom[ WIDGETS ];
265 QString pixnames[ WIDGETS ]; // used for duplicate check 265 QString pixnames[ WIDGETS ]; // used for duplicate check
266 QString brdnames[ WIDGETS ]; 266 QString brdnames[ WIDGETS ];
267 bool loaded[ WIDGETS ]; // used for preloading for CopyWidget 267 bool loaded[ WIDGETS ]; // used for preloading for CopyWidget
268 268
269 if ( configFileName.isEmpty() ) { 269 if ( configFileName.isEmpty() ) {
270 Config cfg ( "qpe" ); 270 Config cfg ( "qpe" );
271 cfg. setGroup ( "Appearance" ); 271 cfg. setGroup ( "Appearance" );
272 272
273 configFileName = cfg. readEntry ( "Theme", "default" ); 273 configFileName = cfg. readEntry ( "Theme", "default" );
274 } 274 }
275 MyConfig config( configFilePath + "/themes/" + configFileName + ".themerc" , Config::File ); 275 MyConfig config( configFilePath + "/themes/" + configFileName + ".themerc" , Config::File );
276 276
277 //printf ( "Opened config file: %s\n", ( configFilePath + "/themes/" + configFileName + ".themerc" ). ascii()); 277 //printf ( "Opened config file: %s\n", ( configFilePath + "/themes/" + configFileName + ".themerc" ). ascii());
278 278
279 // Are we initalized? 279 // Are we initalized?
280 applyMiscResourceGroup( &config );
280 for ( i = 0; i < INHERIT_ITEMS; ++i ) { 281 for ( i = 0; i < INHERIT_ITEMS; ++i ) {
281 applyResourceGroup( &config, i, copyfrom, pixnames, brdnames ); 282 applyResourceGroup( &config, i, copyfrom, pixnames, brdnames );
282 // printf ( "%d [%s]: copy=%s, pix=%s, brd=%s\n", i, widgetEntries [i], copyfrom [i].latin1(), pixnames[i].latin1(),brdnames[i].latin1() ); 283 // printf ( "%d [%s]: copy=%s, pix=%s, brd=%s\n", i, widgetEntries [i], copyfrom [i].latin1(), pixnames[i].latin1(),brdnames[i].latin1() );
283 } 284 }
284 for ( ; i < INHERIT_ITEMS*2; ++i ) { 285 for ( ; i < INHERIT_ITEMS*2; ++i ) {
285 if ( config.hasGroup( QString( widgetEntries[ i ] ) ) ) { 286 if ( config.hasGroup( QString( widgetEntries[ i ] ) ) ) {
286 applyResourceGroup( &config, i, copyfrom, pixnames, brdnames ); 287 applyResourceGroup( &config, i, copyfrom, pixnames, brdnames );
287 // printf ( "%d [%s]: copy=%s, pix=%s, brd=%s\n", i, widgetEntries [i], copyfrom [i].latin1(), pixnames[i].latin1(),brdnames[i].latin1() ); 288 // printf ( "%d [%s]: copy=%s, pix=%s, brd=%s\n", i, widgetEntries [i], copyfrom [i].latin1(), pixnames[i].latin1(),brdnames[i].latin1() );
288 } 289 }
289 else { 290 else {
290 copyfrom [ i ] = widgetEntries[ i - INHERIT_ITEMS ]; 291 copyfrom [ i ] = widgetEntries[ i - INHERIT_ITEMS ];
291 // printf ( "%d [%s]: copy=%s\n", i, widgetEntries [i], copyfrom [i].latin1()); 292 // printf ( "%d [%s]: copy=%s\n", i, widgetEntries [i], copyfrom [i].latin1());
292 } 293 }
293 } 294 }
294 for ( ; i < WIDGETS; ++i ) { 295 for ( ; i < WIDGETS; ++i ) {
295 applyResourceGroup( &config, i, copyfrom, pixnames, brdnames ); 296 applyResourceGroup( &config, i, copyfrom, pixnames, brdnames );
296 // printf ( "%d [%s]: copy=%s, pix=%s, brd=%s\n", i, widgetEntries [i], copyfrom [i].latin1(), pixnames[i].latin1(),brdnames[i].latin1() ); 297 // printf ( "%d [%s]: copy=%s, pix=%s, brd=%s\n", i, widgetEntries [i], copyfrom [i].latin1(), pixnames[i].latin1(),brdnames[i].latin1() );
297 } 298 }
298 applyMiscResourceGroup( &config );
299 299
300 // initalize defaults that may not be read 300 // initalize defaults that may not be read
301 for ( i = 0; i < WIDGETS; ++i ) 301 for ( i = 0; i < WIDGETS; ++i )
302 loaded[ i ] = false; 302 loaded[ i ] = false;
303 btnXShift = btnYShift = focus3DOffset = 0; 303 btnXShift = btnYShift = focus3DOffset = 0;
304 aTabLine = iTabLine = true; 304 aTabLine = iTabLine = true;
305 roundedButton = roundedCombo = roundedSlider = focus3D = false; 305 roundedButton = roundedCombo = roundedSlider = focus3D = false;
306 splitterWidth = 10; 306 splitterWidth = 10;
307 307
308 for ( i = 0; i < WIDGETS; ++i ) { 308 for ( i = 0; i < WIDGETS; ++i ) {
309 readResourceGroup( i, copyfrom, pixnames, brdnames, loaded ); 309 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)" )); 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)" ));
311 } 311 }
312 312
313 // misc items 313 // misc items
314 readMiscResourceGroup(); 314 readMiscResourceGroup();
315 315
316 // Handle preblend items 316 // Handle preblend items
317 for ( i = 0; i < PREBLEND_ITEMS; ++i ) { 317 for ( i = 0; i < PREBLEND_ITEMS; ++i ) {
318 if ( pixmaps[ preBlend[ i ] ] != NULL && blends[ preBlend[ i ] ] != 0.0 ) 318 if ( pixmaps[ preBlend[ i ] ] != NULL && blends[ preBlend[ i ] ] != 0.0 )
319 blend( preBlend[ i ] ); 319 blend( preBlend[ i ] );
320 } 320 }
321} 321}
322 322
323OThemeBase::OThemeBase( const QString & configFile ) 323OThemeBase::OThemeBase( const QString & configFile )
324 : QWindowsStyle() 324 : QWindowsStyle()
325{ 325{
326 configFilePath = QPEApplication::qpeDir ( ) + "/plugins/styles/"; 326 configFilePath = QPEApplication::qpeDir ( ) + "/plugins/styles/";
327 configFileName = configFile; 327 configFileName = configFile;
328 328
329 readConfig( Qt::WindowsStyle ); 329 readConfig( Qt::WindowsStyle );
330 cache = new OThemeCache( cacheSize ); 330 cache = new OThemeCache( cacheSize );
331} 331}
332 332
333void OThemeBase::applyConfigFile( const QString &/*file*/ ) 333void OThemeBase::applyConfigFile( const QString &/*file*/ )
334{ 334{
335#if 0 335#if 0
336 // handle std color scheme 336 // handle std color scheme
337 Config inConfig( file, Config::File ); 337 Config inConfig( file, Config::File );
338 Config globalConfig ( "qpe" ); 338 Config globalConfig ( "qpe" );
339 339
340 globalConfig. setGroup ( "Apperance" ); 340 globalConfig. setGroup ( "Apperance" );
341 inConfig. setGroup( "General" ); 341 inConfig. setGroup( "General" );
342 342
343 if ( inConfig.hasKey( "foreground" ) ) 343 if ( inConfig.hasKey( "foreground" ) )
344 globalConfig.writeEntry( "Text", inConfig.readEntry( "foreground", " " ) ); 344 globalConfig.writeEntry( "Text", inConfig.readEntry( "foreground", " " ) );
345 if ( inConfig.hasKey( "background" ) ) 345 if ( inConfig.hasKey( "background" ) )
346 globalConfig.writeEntry( "Background", inConfig.readEntry( "background", " " ) ); 346 globalConfig.writeEntry( "Background", inConfig.readEntry( "background", " " ) );
347 if ( inConfig.hasKey( "selectForeground" ) ) 347 if ( inConfig.hasKey( "selectForeground" ) )
348 globalConfig.writeEntry( "HighlightedText", inConfig.readEntry( "selectForeground", " " ) ); 348 globalConfig.writeEntry( "HighlightedText", inConfig.readEntry( "selectForeground", " " ) );
349 if ( inConfig.hasKey( "selectBackground" ) ) 349 if ( inConfig.hasKey( "selectBackground" ) )
350 globalConfig.writeEntry( "Highlight", inConfig.readEntry( "selectBackground", " " ) ); 350 globalConfig.writeEntry( "Highlight", inConfig.readEntry( "selectBackground", " " ) );
351 if ( inConfig.hasKey( "windowForeground" ) ) 351 if ( inConfig.hasKey( "windowForeground" ) )
352 globalConfig.writeEntry( "Text", inConfig.readEntry( "windowForeground", " " ) ); 352 globalConfig.writeEntry( "Text", inConfig.readEntry( "windowForeground", " " ) );
353 if ( inConfig.hasKey( "windowBackground" ) ) 353 if ( inConfig.hasKey( "windowBackground" ) )
354 globalConfig.writeEntry( "Base", inConfig.readEntry( "windowBackground", " " ) ); 354 globalConfig.writeEntry( "Base", inConfig.readEntry( "windowBackground", " " ) );
355 355
356 // Keep track of the current theme so that we can select the right one 356 // Keep track of the current theme so that we can select the right one
357 // in the KControl module. 357 // in the KControl module.
358 globalConfig.writeEntry ( "CurrentTheme", file ); 358 globalConfig.writeEntry ( "CurrentTheme", file );
359 359
360 globalConfig.write(); 360 globalConfig.write();
361#endif 361#endif
362} 362}
363 363
364OThemeBase::~OThemeBase() 364OThemeBase::~OThemeBase()
365{ 365{
366 int i; 366 int i;
367 for ( i = 0; i < WIDGETS; ++i ) { 367 for ( i = 0; i < WIDGETS; ++i ) {
368 if ( !duplicate[ i ] ) { 368 if ( !duplicate[ i ] ) {
369 if ( images[ i ] ) 369 if ( images[ i ] )
370 delete images[ i ]; 370 delete images[ i ];
371 if ( pixmaps[ i ] ) 371 if ( pixmaps[ i ] )
372 delete pixmaps[ i ]; 372 delete pixmaps[ i ];
373 } 373 }
374 if ( !pbDuplicate[ i ] && pbPixmaps[ i ] ) 374 if ( !pbDuplicate[ i ] && pbPixmaps[ i ] )
375 delete pbPixmaps[ i ]; 375 delete pbPixmaps[ i ];
376 if ( colors[ i ] ) 376 if ( colors[ i ] )
377 delete( colors[ i ] ); 377 delete( colors[ i ] );
378 if ( grLowColors[ i ] ) 378 if ( grLowColors[ i ] )
379 delete( grLowColors[ i ] ); 379 delete( grLowColors[ i ] );
380 if ( grHighColors[ i ] ) 380 if ( grHighColors[ i ] )
381 delete( grHighColors[ i ] ); 381 delete( grHighColors[ i ] );
382 } 382 }
383 delete cache; 383 delete cache;
384} 384}
385 385
386QImage* OThemeBase::loadImage( QString &name ) 386QImage* OThemeBase::loadImage( QString &name )
387{ 387{
388 QImage * image = new QImage; 388 QImage * image = new QImage;
389 QString path = configFilePath + "/pixmaps/" + name; 389 QString path = configFilePath + "/pixmaps/" + name;
390 image->load( path ); 390 image->load( path );
391 if ( !image->isNull() ) 391 if ( !image->isNull() )
392 return ( image ); 392 return ( image );
393 qDebug ( "OThemeBase: Unable to load image %s\n", name.ascii ( ) ); 393 qDebug ( "OThemeBase: Unable to load image %s\n", name.ascii ( ) );
394 delete image; 394 delete image;
395 return ( NULL ); 395 return ( NULL );
396} 396}
397 397
398OThemePixmap* OThemeBase::loadPixmap( QString &name ) 398OThemePixmap* OThemeBase::loadPixmap( QString &name )
399{ 399{
400 OThemePixmap * pixmap = new OThemePixmap( false ); 400 OThemePixmap * pixmap = new OThemePixmap( false );
401 QString path = configFilePath + "/pixmaps/" + name; 401 QString path = configFilePath + "/pixmaps/" + name;
402 pixmap->load( path ); 402 pixmap->load( path );
403 if ( !pixmap->isNull() ) 403 if ( !pixmap->isNull() )
404 return pixmap; 404 return pixmap;
405 qDebug ( "OThemeBase: Unable to load pixmap %s\n", name.ascii() ); 405 qDebug ( "OThemeBase: Unable to load pixmap %s\n", name.ascii() );
406 delete pixmap; 406 delete pixmap;
407 return ( NULL ); 407 return ( NULL );
408} 408}
409 409
410OThemePixmap* OThemeBase::scale( int w, int h, WidgetType widget ) 410OThemePixmap* OThemeBase::scale( int w, int h, WidgetType widget )
411{ 411{
412 if ( scaleHints[ widget ] == FullScale ) { 412 if ( scaleHints[ widget ] == FullScale ) {
413 if ( !pixmaps[ widget ] || pixmaps[ widget ] ->width() != w || 413 if ( !pixmaps[ widget ] || pixmaps[ widget ] ->width() != w ||
414 pixmaps[ widget ] ->height() != h ) { 414 pixmaps[ widget ] ->height() != h ) {
415 OThemePixmap * cachePix = cache->pixmap( w, h, widget ); 415 OThemePixmap * cachePix = cache->pixmap( w, h, widget );
416 if ( cachePix ) { 416 if ( cachePix ) {
417 cachePix = new OThemePixmap( *cachePix ); 417 cachePix = new OThemePixmap( *cachePix );
418 if ( pixmaps[ widget ] ) 418 if ( pixmaps[ widget ] )
419 cache->insert( pixmaps[ widget ], OThemeCache::FullScale, 419 cache->insert( pixmaps[ widget ], OThemeCache::FullScale,
420 widget ); 420 widget );
421 else 421 else
422 qDebug( "We would have inserted a null pixmap!\n" ); 422 qDebug( "We would have inserted a null pixmap!\n" );
423 pixmaps[ widget ] = cachePix; 423 pixmaps[ widget ] = cachePix;
424 } 424 }
425 else { 425 else {
426 cache->insert( pixmaps[ widget ], OThemeCache::FullScale, widget ); 426 cache->insert( pixmaps[ widget ], OThemeCache::FullScale, widget );
427 QImage tmpImg = images[ widget ] ->smoothScale( w, h ); 427 QImage tmpImg = images[ widget ] ->smoothScale( w, h );
428 pixmaps[ widget ] = new OThemePixmap; 428 pixmaps[ widget ] = new OThemePixmap;
429 pixmaps[ widget ] ->convertFromImage( tmpImg ); 429 pixmaps[ widget ] ->convertFromImage( tmpImg );
430 if ( blends[ widget ] != 0.0 ) 430 if ( blends[ widget ] != 0.0 )
431 blend( widget ); 431 blend( widget );
432 } 432 }
433 } 433 }
434 } 434 }
435 else if ( scaleHints[ widget ] == HorizontalScale ) { 435 else if ( scaleHints[ widget ] == HorizontalScale ) {
436 if ( pixmaps[ widget ] ->width() != w ) { 436 if ( pixmaps[ widget ] ->width() != w ) {
437 OThemePixmap * cachePix = cache->horizontalPixmap( w, widget ); 437 OThemePixmap * cachePix = cache->horizontalPixmap( w, widget );
438 if ( cachePix ) { 438 if ( cachePix ) {
439 cachePix = new OThemePixmap( *cachePix ); 439 cachePix = new OThemePixmap( *cachePix );
440 if ( pixmaps[ widget ] ) 440 if ( pixmaps[ widget ] )
441 cache->insert( pixmaps[ widget ], OThemeCache::HorizontalScale, widget ); 441 cache->insert( pixmaps[ widget ], OThemeCache::HorizontalScale, widget );
442 else 442 else
443 qDebug ( "We would have inserted a null pixmap!\n" ); 443 qDebug ( "We would have inserted a null pixmap!\n" );
444 pixmaps[ widget ] = cachePix; 444 pixmaps[ widget ] = cachePix;
445 } 445 }
446 else { 446 else {
447 cache->insert( pixmaps[ widget ], OThemeCache::HorizontalScale, widget ); 447 cache->insert( pixmaps[ widget ], OThemeCache::HorizontalScale, widget );
448 QImage tmpImg = images[ widget ] -> 448 QImage tmpImg = images[ widget ] ->
449 smoothScale( w, images[ widget ] ->height() ); 449 smoothScale( w, images[ widget ] ->height() );
450 pixmaps[ widget ] = new OThemePixmap; 450 pixmaps[ widget ] = new OThemePixmap;
451 pixmaps[ widget ] ->convertFromImage( tmpImg ); 451 pixmaps[ widget ] ->convertFromImage( tmpImg );
452 if ( blends[ widget ] != 0.0 ) 452 if ( blends[ widget ] != 0.0 )
453 blend( widget ); 453 blend( widget );
454 } 454 }
455 } 455 }
456 } 456 }
457 else if ( scaleHints[ widget ] == VerticalScale ) { 457 else if ( scaleHints[ widget ] == VerticalScale ) {
458 if ( pixmaps[ widget ] ->height() != h ) { 458 if ( pixmaps[ widget ] ->height() != h ) {
459 OThemePixmap * cachePix = cache->verticalPixmap( w, widget ); 459 OThemePixmap * cachePix = cache->verticalPixmap( w, widget );
460 if ( cachePix ) { 460 if ( cachePix ) {
461 cachePix = new OThemePixmap( *cachePix ); 461 cachePix = new OThemePixmap( *cachePix );
462 if ( pixmaps[ widget ] ) 462 if ( pixmaps[ widget ] )
463 cache->insert( pixmaps[ widget ], OThemeCache::VerticalScale, widget ); 463 cache->insert( pixmaps[ widget ], OThemeCache::VerticalScale, widget );
464 else 464 else
465 qDebug ( "We would have inserted a null pixmap!\n" ); 465 qDebug ( "We would have inserted a null pixmap!\n" );
466 pixmaps[ widget ] = cachePix; 466 pixmaps[ widget ] = cachePix;
467 } 467 }
468 else { 468 else {
469 cache->insert( pixmaps[ widget ], OThemeCache::VerticalScale, widget ); 469 cache->insert( pixmaps[ widget ], OThemeCache::VerticalScale, widget );
470 QImage tmpImg = 470 QImage tmpImg =
471 images[ widget ] ->smoothScale( images[ widget ] ->width(), h ); 471 images[ widget ] ->smoothScale( images[ widget ] ->width(), h );
472 pixmaps[ widget ] = new OThemePixmap; 472 pixmaps[ widget ] = new OThemePixmap;
473 pixmaps[ widget ] ->convertFromImage( tmpImg ); 473 pixmaps[ widget ] ->convertFromImage( tmpImg );
474 if ( blends[ widget ] != 0.0 ) 474 if ( blends[ widget ] != 0.0 )
475 blend( widget ); 475 blend( widget );
476 } 476 }
477 } 477 }
478 } 478 }
479 // If blended tile here so the blend is scaled properly 479 // If blended tile here so the blend is scaled properly
480 else if ( scaleHints[ widget ] == TileScale && blends[ widget ] != 0.0 ) { 480 else if ( scaleHints[ widget ] == TileScale && blends[ widget ] != 0.0 ) {
481 if ( !pixmaps[ widget ] || pixmaps[ widget ] ->width() != w || 481 if ( !pixmaps[ widget ] || pixmaps[ widget ] ->width() != w ||
482 pixmaps[ widget ] ->height() != h ) { 482 pixmaps[ widget ] ->height() != h ) {
483 OThemePixmap * cachePix = cache->pixmap( w, h, widget ); 483 OThemePixmap * cachePix = cache->pixmap( w, h, widget );
484 if ( cachePix ) { 484 if ( cachePix ) {
485 cachePix = new OThemePixmap( *cachePix ); 485 cachePix = new OThemePixmap( *cachePix );
486 cache->insert( pixmaps[ widget ], OThemeCache::FullScale, widget ); 486 cache->insert( pixmaps[ widget ], OThemeCache::FullScale, widget );
487 pixmaps[ widget ] = cachePix; 487 pixmaps[ widget ] = cachePix;
488 } 488 }
489 else { 489 else {
490 cache->insert( pixmaps[ widget ], OThemeCache::FullScale, widget ); 490 cache->insert( pixmaps[ widget ], OThemeCache::FullScale, widget );
491 QPixmap tile; 491 QPixmap tile;
492 tile.convertFromImage( *images[ widget ] ); 492 tile.convertFromImage( *images[ widget ] );
493 pixmaps[ widget ] = new OThemePixmap; 493 pixmaps[ widget ] = new OThemePixmap;
494 pixmaps[ widget ] ->resize( w, h ); 494 pixmaps[ widget ] ->resize( w, h );
495 QPainter p( pixmaps[ widget ] ); 495 QPainter p( pixmaps[ widget ] );
496 p.drawTiledPixmap( 0, 0, w, h, tile ); 496 p.drawTiledPixmap( 0, 0, w, h, tile );
497 if ( blends[ widget ] != 0.0 ) 497 if ( blends[ widget ] != 0.0 )
498 blend( widget ); 498 blend( widget );
499 } 499 }
500 } 500 }
501 } 501 }
502 return ( pixmaps[ widget ] ); 502 return ( pixmaps[ widget ] );
503} 503}
504 504
505OThemePixmap* OThemeBase::scaleBorder( int w, int h, WidgetType widget ) 505OThemePixmap* OThemeBase::scaleBorder( int w, int h, WidgetType widget )
506{ 506{
507 OThemePixmap * pixmap = NULL; 507 OThemePixmap * pixmap = NULL;
508 if ( !pbPixmaps[ widget ] && !pbWidth[ widget ] ) 508 if ( !pbPixmaps[ widget ] && !pbWidth[ widget ] )
509 return ( NULL ); 509 return ( NULL );
510 pixmap = cache->pixmap( w, h, widget, true ); 510 pixmap = cache->pixmap( w, h, widget, true );
511 if ( pixmap ) { 511 if ( pixmap ) {
512 pixmap = new OThemePixmap( *pixmap ); 512 pixmap = new OThemePixmap( *pixmap );
513 } 513 }
514 else { 514 else {
515 pixmap = new OThemePixmap(); 515 pixmap = new OThemePixmap();
516 pixmap->resize( w, h ); 516 pixmap->resize( w, h );
517 QBitmap mask; 517 QBitmap mask;
518 mask.resize( w, h ); 518 mask.resize( w, h );
519 mask.fill( color0 ); 519 mask.fill( color0 );
520 QPainter mPainter; 520 QPainter mPainter;
521 mPainter.begin( &mask ); 521 mPainter.begin( &mask );
522 522
523 QPixmap *tmp = borderPixmap( widget ) ->border( OThemePixmap::TopLeft ); 523 QPixmap *tmp = borderPixmap( widget ) ->border( OThemePixmap::TopLeft );
524 const QBitmap *srcMask = tmp->mask(); 524 const QBitmap *srcMask = tmp->mask();
525 int bdWidth = tmp->width(); 525 int bdWidth = tmp->width();
526 526
527 bitBlt( pixmap, 0, 0, tmp, 0, 0, bdWidth, bdWidth, 527 bitBlt( pixmap, 0, 0, tmp, 0, 0, bdWidth, bdWidth,
528 Qt::CopyROP, false ); 528 Qt::CopyROP, false );
529 if ( srcMask ) 529 if ( srcMask )
530 bitBlt( &mask, 0, 0, srcMask, 0, 0, bdWidth, bdWidth, 530 bitBlt( &mask, 0, 0, srcMask, 0, 0, bdWidth, bdWidth,
531 Qt::CopyROP, false ); 531 Qt::CopyROP, false );
532 else 532 else
533 mPainter.fillRect( 0, 0, bdWidth, bdWidth, color1 ); 533 mPainter.fillRect( 0, 0, bdWidth, bdWidth, color1 );
534 534
535 535
536 tmp = borderPixmap( widget ) ->border( OThemePixmap::TopRight ); 536 tmp = borderPixmap( widget ) ->border( OThemePixmap::TopRight );
537 srcMask = tmp->mask(); 537 srcMask = tmp->mask();
538 bitBlt( pixmap, w - bdWidth, 0, tmp, 0, 0, bdWidth, 538 bitBlt( pixmap, w - bdWidth, 0, tmp, 0, 0, bdWidth,
539 bdWidth, Qt::CopyROP, false ); 539 bdWidth, Qt::CopyROP, false );
540 if ( srcMask ) 540 if ( srcMask )
541 bitBlt( &mask, w - bdWidth, 0, srcMask, 0, 0, bdWidth, 541 bitBlt( &mask, w - bdWidth, 0, srcMask, 0, 0, bdWidth,
542 bdWidth, Qt::CopyROP, false ); 542 bdWidth, Qt::CopyROP, false );
543 else 543 else
544 mPainter.fillRect( w - bdWidth, 0, bdWidth, bdWidth, color1 ); 544 mPainter.fillRect( w - bdWidth, 0, bdWidth, bdWidth, color1 );
545 545
546 tmp = borderPixmap( widget ) ->border( OThemePixmap::BottomLeft ); 546 tmp = borderPixmap( widget ) ->border( OThemePixmap::BottomLeft );
547 srcMask = tmp->mask(); 547 srcMask = tmp->mask();
548 bitBlt( pixmap, 0, h - bdWidth, tmp, 0, 0, bdWidth, 548 bitBlt( pixmap, 0, h - bdWidth, tmp, 0, 0, bdWidth,
549 bdWidth, Qt::CopyROP, false ); 549 bdWidth, Qt::CopyROP, false );
550 if ( srcMask ) 550 if ( srcMask )
551 bitBlt( &mask, 0, h - bdWidth, srcMask, 0, 0, bdWidth, 551 bitBlt( &mask, 0, h - bdWidth, srcMask, 0, 0, bdWidth,
552 bdWidth, Qt::CopyROP, false ); 552 bdWidth, Qt::CopyROP, false );
553 else 553 else
554 mPainter.fillRect( 0, h - bdWidth, bdWidth, bdWidth, color1 ); 554 mPainter.fillRect( 0, h - bdWidth, bdWidth, bdWidth, color1 );
555 555
556 tmp = borderPixmap( widget ) ->border( OThemePixmap::BottomRight ); 556 tmp = borderPixmap( widget ) ->border( OThemePixmap::BottomRight );
557 srcMask = tmp->mask(); 557 srcMask = tmp->mask();
558 bitBlt( pixmap, w - bdWidth, h - bdWidth, tmp, 0, 0, 558 bitBlt( pixmap, w - bdWidth, h - bdWidth, tmp, 0, 0,
559 bdWidth, bdWidth, Qt::CopyROP, false ); 559 bdWidth, bdWidth, Qt::CopyROP, false );
560 if ( srcMask ) 560 if ( srcMask )
561 bitBlt( &mask, w - bdWidth, h - bdWidth, srcMask, 0, 0, 561 bitBlt( &mask, w - bdWidth, h - bdWidth, srcMask, 0, 0,
562 bdWidth, bdWidth, Qt::CopyROP, false ); 562 bdWidth, bdWidth, Qt::CopyROP, false );
563 else 563 else
564 mPainter.fillRect( w - bdWidth, h - bdWidth, bdWidth, bdWidth, color1 ); 564 mPainter.fillRect( w - bdWidth, h - bdWidth, bdWidth, bdWidth, color1 );
565 565
566 QPainter p; 566 QPainter p;
567 p.begin( pixmap ); 567 p.begin( pixmap );
568 if ( w - bdWidth * 2 > 0 ) { 568 if ( w - bdWidth * 2 > 0 ) {
569 tmp = borderPixmap( widget ) ->border( OThemePixmap::Top ); 569 tmp = borderPixmap( widget ) ->border( OThemePixmap::Top );
570 srcMask = tmp->mask(); 570 srcMask = tmp->mask();
571 p.drawTiledPixmap( bdWidth, 0, w - bdWidth * 2, bdWidth, *tmp ); 571 p.drawTiledPixmap( bdWidth, 0, w - bdWidth * 2, bdWidth, *tmp );
572 if ( srcMask ) 572 if ( srcMask )
573 mPainter.drawTiledPixmap( bdWidth, 0, w - bdWidth * 2, bdWidth, *srcMask ); 573 mPainter.drawTiledPixmap( bdWidth, 0, w - bdWidth * 2, bdWidth, *srcMask );
574 else 574 else
575 mPainter.fillRect( bdWidth, 0, w - bdWidth * 2, bdWidth, color1 ); 575 mPainter.fillRect( bdWidth, 0, w - bdWidth * 2, bdWidth, color1 );
576 576
577 tmp = borderPixmap( widget ) ->border( OThemePixmap::Bottom ); 577 tmp = borderPixmap( widget ) ->border( OThemePixmap::Bottom );
578 srcMask = tmp->mask(); 578 srcMask = tmp->mask();
579 p.drawTiledPixmap( bdWidth, h - bdWidth, w - bdWidth * 2, bdWidth, 579 p.drawTiledPixmap( bdWidth, h - bdWidth, w - bdWidth * 2, bdWidth,
580 *tmp ); 580 *tmp );
581 if ( srcMask ) 581 if ( srcMask )
582 mPainter.drawTiledPixmap( bdWidth, h - bdWidth, w - bdWidth * 2, bdWidth, *srcMask ); 582 mPainter.drawTiledPixmap( bdWidth, h - bdWidth, w - bdWidth * 2, bdWidth, *srcMask );
583 else 583 else
584 mPainter.fillRect( bdWidth, h - bdWidth, w - bdWidth * 2, bdWidth, 584 mPainter.fillRect( bdWidth, h - bdWidth, w - bdWidth * 2, bdWidth,
585 color1 ); 585 color1 );
586 } 586 }
587 if ( h - bdWidth * 2 > 0 ) { 587 if ( h - bdWidth * 2 > 0 ) {
588 tmp = borderPixmap( widget ) ->border( OThemePixmap::Left ); 588 tmp = borderPixmap( widget ) ->border( OThemePixmap::Left );
589 srcMask = tmp->mask(); 589 srcMask = tmp->mask();
590 p.drawTiledPixmap( 0, bdWidth, bdWidth, h - bdWidth * 2, *tmp ); 590 p.drawTiledPixmap( 0, bdWidth, bdWidth, h - bdWidth * 2, *tmp );
591 if ( srcMask ) 591 if ( srcMask )
592 mPainter.drawTiledPixmap( 0, bdWidth, bdWidth, h - bdWidth * 2, *srcMask ); 592 mPainter.drawTiledPixmap( 0, bdWidth, bdWidth, h - bdWidth * 2, *srcMask );
593 else 593 else
594 mPainter.fillRect( 0, bdWidth, bdWidth, h - bdWidth * 2, color1 ); 594 mPainter.fillRect( 0, bdWidth, bdWidth, h - bdWidth * 2, color1 );
595 595
596 tmp = borderPixmap( widget ) ->border( OThemePixmap::Right ); 596 tmp = borderPixmap( widget ) ->border( OThemePixmap::Right );
597 srcMask = tmp->mask(); 597 srcMask = tmp->mask();
598 p.drawTiledPixmap( w - bdWidth, bdWidth, bdWidth, h - bdWidth * 2, 598 p.drawTiledPixmap( w - bdWidth, bdWidth, bdWidth, h - bdWidth * 2,
599 *tmp ); 599 *tmp );
600 if ( srcMask ) 600 if ( srcMask )
601 mPainter.drawTiledPixmap( w - bdWidth, bdWidth, bdWidth, h - bdWidth * 2, *srcMask ); 601 mPainter.drawTiledPixmap( w - bdWidth, bdWidth, bdWidth, h - bdWidth * 2, *srcMask );
602 else 602 else
603 mPainter.fillRect( w - bdWidth, bdWidth, bdWidth, h - bdWidth * 2, color1 ); 603 mPainter.fillRect( w - bdWidth, bdWidth, bdWidth, h - bdWidth * 2, color1 );
604 } 604 }
605 p.end(); 605 p.end();
606 mPainter.end(); 606 mPainter.end();
607 pixmap->setMask( mask ); 607 pixmap->setMask( mask );
608 cache->insert( pixmap, OThemeCache::FullScale, widget, true ); 608 cache->insert( pixmap, OThemeCache::FullScale, widget, true );
609 if ( !pixmap->mask() ) 609 if ( !pixmap->mask() )
610 qDebug ( "No mask for border pixmap!\n" ); 610 qDebug ( "No mask for border pixmap!\n" );
611 } 611 }
612 return ( pixmap ); 612 return ( pixmap );
613} 613}
614 614
615 615
616OThemePixmap* OThemeBase::blend( WidgetType widget ) 616OThemePixmap* OThemeBase::blend( WidgetType widget )
617{ 617{
618 OGfxEffect::GradientType g; 618 OGfxEffect::GradientType g;
619 switch ( gradients[ widget ] ) { 619 switch ( gradients[ widget ] ) {
620 case GrHorizontal: 620 case GrHorizontal:
621 g = OGfxEffect::HorizontalGradient; 621 g = OGfxEffect::HorizontalGradient;
622 break; 622 break;
623 case GrVertical: 623 case GrVertical:
624 g = OGfxEffect::VerticalGradient; 624 g = OGfxEffect::VerticalGradient;
625 break; 625 break;
626 case GrPyramid: 626 case GrPyramid:
627 g = OGfxEffect::PyramidGradient; 627 g = OGfxEffect::PyramidGradient;
628 break; 628 break;
629 case GrRectangle: 629 case GrRectangle:
630 g = OGfxEffect::RectangleGradient; 630 g = OGfxEffect::RectangleGradient;
631 break; 631 break;
632 case GrElliptic: 632 case GrElliptic:
633 g = OGfxEffect::EllipticGradient; 633 g = OGfxEffect::EllipticGradient;
634 break; 634 break;
635 default: 635 default:
636 g = OGfxEffect::DiagonalGradient; 636 g = OGfxEffect::DiagonalGradient;
637 break; 637 break;
638 } 638 }
639 OGfxEffect::blend( *pixmaps[ widget ], blends[ widget ], *grLowColors[ widget ], 639 OGfxEffect::blend( *pixmaps[ widget ], blends[ widget ], *grLowColors[ widget ],
640 g, false ); 640 g, false );
641 return ( pixmaps[ widget ] ); 641 return ( pixmaps[ widget ] );
642} 642}
643 643
644OThemePixmap* OThemeBase::gradient( int w, int h, WidgetType widget ) 644OThemePixmap* OThemeBase::gradient( int w, int h, WidgetType widget )
645{ 645{
646 if ( gradients[ widget ] == GrVertical ) { 646 if ( gradients[ widget ] == GrVertical ) {
647 if ( !pixmaps[ widget ] || pixmaps[ widget ] ->height() != h ) { 647 if ( !pixmaps[ widget ] || pixmaps[ widget ] ->height() != h ) {
648 OThemePixmap * cachePix = cache->verticalPixmap( h, widget ); 648 OThemePixmap * cachePix = cache->verticalPixmap( h, widget );
649 if ( cachePix ) { 649 if ( cachePix ) {
650 cachePix = new OThemePixmap( *cachePix ); 650 cachePix = new OThemePixmap( *cachePix );
651 if ( pixmaps[ widget ] ) 651 if ( pixmaps[ widget ] )
652 cache->insert( pixmaps[ widget ], OThemeCache::VerticalScale, 652 cache->insert( pixmaps[ widget ], OThemeCache::VerticalScale,
653 widget ); 653 widget );
654 pixmaps[ widget ] = cachePix; 654 pixmaps[ widget ] = cachePix;
655 } 655 }
656 else { 656 else {
657 if ( pixmaps[ widget ] ) 657 if ( pixmaps[ widget ] )
658 cache->insert( pixmaps[ widget ], OThemeCache::VerticalScale, 658 cache->insert( pixmaps[ widget ], OThemeCache::VerticalScale,
659 widget ); 659 widget );
660 pixmaps[ widget ] = new OThemePixmap; 660 pixmaps[ widget ] = new OThemePixmap;
661 pixmaps[ widget ] ->resize( w, h ); 661 pixmaps[ widget ] ->resize( w, h );
662 OGfxEffect::gradient( *pixmaps[ widget ], *grHighColors[ widget ], 662 OGfxEffect::gradient( *pixmaps[ widget ], *grHighColors[ widget ],
663 *grLowColors[ widget ], 663 *grLowColors[ widget ],
664 OGfxEffect::VerticalGradient ); 664 OGfxEffect::VerticalGradient );
665 } 665 }
666 } 666 }
667 } 667 }
668 else if ( gradients[ widget ] == GrHorizontal ) { 668 else if ( gradients[ widget ] == GrHorizontal ) {
669 if ( !pixmaps[ widget ] || pixmaps[ widget ] ->width() != w ) { 669 if ( !pixmaps[ widget ] || pixmaps[ widget ] ->width() != w ) {
670 OThemePixmap * cachePix = cache->horizontalPixmap( w, widget ); 670 OThemePixmap * cachePix = cache->horizontalPixmap( w, widget );
671 if ( cachePix ) { 671 if ( cachePix ) {
672 cachePix = new OThemePixmap( *cachePix ); 672 cachePix = new OThemePixmap( *cachePix );
673 if ( pixmaps[ widget ] ) 673 if ( pixmaps[ widget ] )
674 cache->insert( pixmaps[ widget ], 674 cache->insert( pixmaps[ widget ],
675 OThemeCache::HorizontalScale, widget ); 675 OThemeCache::HorizontalScale, widget );
676 pixmaps[ widget ] = cachePix; 676 pixmaps[ widget ] = cachePix;
677 } 677 }
678 else { 678 else {
679 if ( pixmaps[ widget ] ) 679 if ( pixmaps[ widget ] )
680 cache->insert( pixmaps[ widget ], 680 cache->insert( pixmaps[ widget ],
681 OThemeCache::HorizontalScale, widget ); 681 OThemeCache::HorizontalScale, widget );
682 pixmaps[ widget ] = new OThemePixmap; 682 pixmaps[ widget ] = new OThemePixmap;