-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,403 +1,391 @@ | |||
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() ) |