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