-rw-r--r-- | noncore/styles/theme/othemebase.cpp | 14 |
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 | ||
38 | template class QIntCache<OThemePixmap> | 38 | template class QIntCache<OThemePixmap> |
39 | ; | 39 | ; |
40 | 40 | ||
41 | static const char *widgetEntries[] = | 41 | static 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) |
65 | struct kthemeKeyData | 65 | struct kthemeKeyData |
66 | { | 66 | { |
67 | unsigned int id : | 67 | unsigned int id : |
68 | 6; | 68 | 6; |
69 | unsigned int width : | 69 | unsigned int width : |
70 | 12; | 70 | 12; |
71 | unsigned int height : | 71 | unsigned int height : |
72 | 12; | 72 | 12; |
73 | unsigned int border : | 73 | unsigned int border : |
74 | 1; | 74 | 1; |
75 | unsigned int mask : | 75 | unsigned int mask : |
76 | 1; | 76 | 1; |
77 | }; | 77 | }; |
78 | 78 | ||
79 | union kthemeKey{ | 79 | union kthemeKey{ |
80 | kthemeKeyData data; | 80 | kthemeKeyData data; |
81 | unsigned int cacheKey; | 81 | unsigned int cacheKey; |
82 | }; | 82 | }; |
83 | 83 | ||
84 | class MyConfig : public Config | ||
85 | { | ||
86 | public: | ||
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 | ||
97 | void OThemeBase::generateBorderPix( int i ) | 85 | void 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 | ||
195 | void OThemeBase::copyWidgetConfig( int sourceID, int destID, QString *pixnames, | 183 | void 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 | ||
255 | void OThemeBase::readConfig( Qt::GUIStyle /*style*/ ) | 243 | void 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 | ||
323 | OThemeBase::OThemeBase( const QString & configFile ) | 311 | OThemeBase::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 | ||
333 | void OThemeBase::applyConfigFile( const QString &/*file*/ ) | 321 | void 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 | ||
364 | OThemeBase::~OThemeBase() | 352 | OThemeBase::~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 | ||
386 | QImage* OThemeBase::loadImage( QString &name ) | 374 | QImage* 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 | ||
398 | OThemePixmap* OThemeBase::loadPixmap( QString &name ) | 386 | OThemePixmap* 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 | ||
410 | OThemePixmap* OThemeBase::scale( int w, int h, WidgetType widget ) | 398 | OThemePixmap* 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 | ||
505 | OThemePixmap* OThemeBase::scaleBorder( int w, int h, WidgetType widget ) | 493 | OThemePixmap* 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 | ||
616 | OThemePixmap* OThemeBase::blend( WidgetType widget ) | 604 | OThemePixmap* 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 | ||
644 | OThemePixmap* OThemeBase::gradient( int w, int h, WidgetType widget ) | 632 | OThemePixmap* 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 | ||
770 | OThemePixmap* OThemeBase::scalePixmap( int w, int h, WidgetType widget ) | 758 | OThemePixmap* 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 | ||
779 | QColorGroup* OThemeBase::makeColorGroup( QColor &fg, QColor &bg, | 767 | QColorGroup* 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 | ||
796 | static QColor strToColor ( const QString &str ) | 784 | static 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 | ||
813 | void OThemeBase::applyMiscResourceGroup( Config *config ) | 801 | void 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 | ||
862 | void OThemeBase::readMiscResourceGroup() | 850 | void OThemeBase::readMiscResourceGroup() |
863 | {} | 851 | {} |
864 | 852 | ||
865 | void OThemeBase::applyResourceGroup( Config *config, int i, QString *copyfrom, QString *pixnames, QString *brdnames ) | 853 | void 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 | ||
997 | void OThemeBase::readResourceGroup( int i, QString *copyfrom, QString *pixnames, QString *brdnames, | 985 | void 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 | ||
1086 | OThemePixmap::OThemePixmap( bool timer ) | 1074 | OThemePixmap::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 | ||
1100 | OThemePixmap::OThemePixmap( const OThemePixmap &p ) | 1088 | OThemePixmap::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 | ||
1119 | OThemePixmap::~OThemePixmap() | 1107 | OThemePixmap::~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 | ||
1129 | OThemeCache::OThemeCache( int maxSize, QObject *parent, const char *name ) | 1117 | OThemeCache::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 | ||
1138 | void OThemeCache::flushTimeout() | 1126 | void 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 | ||
1149 | OThemePixmap* OThemeCache::pixmap( int w, int h, int widgetID, bool border, | 1137 | OThemePixmap* 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 | ||
1167 | OThemePixmap* OThemeCache::horizontalPixmap( int w, int widgetID ) | 1155 | OThemePixmap* 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 | ||
1182 | OThemePixmap* OThemeCache::verticalPixmap( int h, int widgetID ) | 1170 | OThemePixmap* 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 | ||
1197 | bool OThemeCache::insert( OThemePixmap *pixmap, ScaleHint scale, int widgetID, | 1185 | bool 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" |