author | leseb <leseb> | 2002-07-02 21:23:40 (UTC) |
---|---|---|
committer | leseb <leseb> | 2002-07-02 21:23:40 (UTC) |
commit | d83f58a1a4a314a3ef8b25dd78432488922a9e31 (patch) (unidiff) | |
tree | 353b815ff13bb34594fa8db4d15233ed6b8c27e4 | |
parent | 2481ac4013794f95c53580f99b4b761142e4ee8f (diff) | |
download | opie-d83f58a1a4a314a3ef8b25dd78432488922a9e31.zip opie-d83f58a1a4a314a3ef8b25dd78432488922a9e31.tar.gz opie-d83f58a1a4a314a3ef8b25dd78432488922a9e31.tar.bz2 |
Fix QToolButton drawing
-rw-r--r-- | noncore/styles/theme/othemestyle.cpp | 8 | ||||
-rw-r--r-- | noncore/styles/theme/othemestyle.h | 6 |
2 files changed, 14 insertions, 0 deletions
diff --git a/noncore/styles/theme/othemestyle.cpp b/noncore/styles/theme/othemestyle.cpp index 61127b8..d97b026 100644 --- a/noncore/styles/theme/othemestyle.cpp +++ b/noncore/styles/theme/othemestyle.cpp | |||
@@ -1,823 +1,831 @@ | |||
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 | 18 | ||
19 | #include "othemestyle.h" | 19 | #include "othemestyle.h" |
20 | #include "othemebase.h" | 20 | #include "othemebase.h" |
21 | #include <qpe/qpeapplication.h> | 21 | #include <qpe/qpeapplication.h> |
22 | #include <qbitmap.h> | 22 | #include <qbitmap.h> |
23 | #define INCLUDE_MENUITEM_DEF | 23 | #define INCLUDE_MENUITEM_DEF |
24 | #include <qmenudata.h> | 24 | #include <qmenudata.h> |
25 | #include <qpopupmenu.h> | 25 | #include <qpopupmenu.h> |
26 | #include <qtabbar.h> | 26 | #include <qtabbar.h> |
27 | #include <qglobal.h> | 27 | #include <qglobal.h> |
28 | 28 | ||
29 | #include <limits.h> | 29 | #include <limits.h> |
30 | #include <stdio.h> | 30 | #include <stdio.h> |
31 | 31 | ||
32 | #define QCOORDARRLEN(x) sizeof(x)/(sizeof(QCOORD)*2) | 32 | #define QCOORDARRLEN(x) sizeof(x)/(sizeof(QCOORD)*2) |
33 | 33 | ||
34 | OThemeStyle::OThemeStyle( const QString &configFile ) | 34 | OThemeStyle::OThemeStyle( const QString &configFile ) |
35 | : OThemeBase( configFile ) | 35 | : OThemeBase( configFile ) |
36 | { | 36 | { |
37 | setScrollBarExtent( getSBExtent(), getSBExtent() ); | 37 | setScrollBarExtent( getSBExtent(), getSBExtent() ); |
38 | setButtonDefaultIndicatorWidth( 0 ); // We REALLY should support one, see drawPushButton() below! | 38 | setButtonDefaultIndicatorWidth( 0 ); // We REALLY should support one, see drawPushButton() below! |
39 | } | 39 | } |
40 | 40 | ||
41 | OThemeStyle::~OThemeStyle() | 41 | OThemeStyle::~OThemeStyle() |
42 | {} | 42 | {} |
43 | 43 | ||
44 | void OThemeStyle::polish( QApplication * /*app*/ ) | 44 | void OThemeStyle::polish( QApplication * /*app*/ ) |
45 | {} | 45 | {} |
46 | 46 | ||
47 | void OThemeStyle::polish( QPalette &p ) | 47 | void OThemeStyle::polish( QPalette &p ) |
48 | { | 48 | { |
49 | oldPalette = p; | 49 | oldPalette = p; |
50 | 50 | ||
51 | QColor bg = oldPalette. color ( QPalette::Normal, QColorGroup::Background ); | 51 | QColor bg = oldPalette. color ( QPalette::Normal, QColorGroup::Background ); |
52 | 52 | ||
53 | if ( bgcolor. isValid ( )) | 53 | if ( bgcolor. isValid ( )) |
54 | bg = bgcolor; | 54 | bg = bgcolor; |
55 | 55 | ||
56 | if ( isColor ( Background )) | 56 | if ( isColor ( Background )) |
57 | bg = colorGroup ( oldPalette. active ( ), Background )-> background ( ); | 57 | bg = colorGroup ( oldPalette. active ( ), Background )-> background ( ); |
58 | 58 | ||
59 | p = QPalette ( bg, bg ); | 59 | p = QPalette ( bg, bg ); |
60 | 60 | ||
61 | if ( isPixmap( Background ) ) | 61 | if ( isPixmap( Background ) ) |
62 | p. setBrush ( QColorGroup::Background, QBrush ( bg, *uncached ( Background ))); | 62 | p. setBrush ( QColorGroup::Background, QBrush ( bg, *uncached ( Background ))); |
63 | 63 | ||
64 | if ( fgcolor. isValid ( )) { | 64 | if ( fgcolor. isValid ( )) { |
65 | p. setColor ( QColorGroup::Foreground, fgcolor ); | 65 | p. setColor ( QColorGroup::Foreground, fgcolor ); |
66 | p. setColor ( QColorGroup::ButtonText, fgcolor ); | 66 | p. setColor ( QColorGroup::ButtonText, fgcolor ); |
67 | } | 67 | } |
68 | if ( selfgcolor. isValid ( )) | 68 | if ( selfgcolor. isValid ( )) |
69 | p. setColor ( QColorGroup::HighlightedText, selfgcolor ); | 69 | p. setColor ( QColorGroup::HighlightedText, selfgcolor ); |
70 | if ( selbgcolor. isValid ( )) | 70 | if ( selbgcolor. isValid ( )) |
71 | p. setColor ( QColorGroup::Highlight, selbgcolor ); | 71 | p. setColor ( QColorGroup::Highlight, selbgcolor ); |
72 | if ( winfgcolor. isValid ( )) | 72 | if ( winfgcolor. isValid ( )) |
73 | p. setColor ( QColorGroup::Text, winfgcolor ); | 73 | p. setColor ( QColorGroup::Text, winfgcolor ); |
74 | if ( winbgcolor. isValid ( )) | 74 | if ( winbgcolor. isValid ( )) |
75 | p. setColor ( QColorGroup::Base, winbgcolor ); | 75 | p. setColor ( QColorGroup::Base, winbgcolor ); |
76 | 76 | ||
77 | } | 77 | } |
78 | 78 | ||
79 | 79 | ||
80 | void OThemeStyle::unPolish( QApplication *app ) | 80 | void OThemeStyle::unPolish( QApplication *app ) |
81 | { | 81 | { |
82 | app->setPalette( oldPalette, true ); | 82 | app->setPalette( oldPalette, true ); |
83 | } | 83 | } |
84 | 84 | ||
85 | void OThemeStyle::polish( QWidget *w ) | 85 | void OThemeStyle::polish( QWidget *w ) |
86 | { | 86 | { |
87 | if ( !w->isTopLevel() ) { | 87 | if ( !w->isTopLevel() ) { |
88 | if ( w->inherits( "QGroupBox" ) | 88 | if ( w->inherits( "QGroupBox" ) |
89 | || w->inherits( "QTabWidget" ) ) { | 89 | || w->inherits( "QTabWidget" ) ) { |
90 | w->setAutoMask( TRUE ); | 90 | w->setAutoMask( TRUE ); |
91 | return ; | 91 | return ; |
92 | } | 92 | } |
93 | if ( w->inherits( "QLabel" ) | 93 | if ( w->inherits( "QLabel" ) |
94 | || w->inherits( "QSlider" ) | 94 | || w->inherits( "QSlider" ) |
95 | || w->inherits( "QButton" ) | 95 | || w->inherits( "QButton" ) |
96 | || w->inherits( "QProgressBar" ) | 96 | || w->inherits( "QProgressBar" ) |
97 | ) { | 97 | ) { |
98 | w->setBackgroundOrigin( QWidget::ParentOrigin ); | 98 | w->setBackgroundOrigin( QWidget::ParentOrigin ); |
99 | } | 99 | } |
100 | } | 100 | } |
101 | if ( w->inherits( "QPopupMenu" ) ) { | 101 | if ( w->inherits( "QPopupMenu" ) ) { |
102 | popupPalette = w->palette(); | 102 | popupPalette = w->palette(); |
103 | if ( isColor( MenuItem ) || isColor( MenuItemDown ) ) { | 103 | if ( isColor( MenuItem ) || isColor( MenuItemDown ) ) { |
104 | QPalette newPal( w->palette() ); | 104 | QPalette newPal( w->palette() ); |
105 | w->setPalettePropagation( QWidget::SamePalette ); | 105 | w->setPalettePropagation( QWidget::SamePalette ); |
106 | if ( isColor( MenuItem ) ) { | 106 | if ( isColor( MenuItem ) ) { |
107 | newPal.setNormal( *colorGroup( newPal.normal(), MenuItem ) ); | 107 | newPal.setNormal( *colorGroup( newPal.normal(), MenuItem ) ); |
108 | newPal.setDisabled( *colorGroup( newPal.normal(), MenuItem ) ); | 108 | newPal.setDisabled( *colorGroup( newPal.normal(), MenuItem ) ); |
109 | } | 109 | } |
110 | if ( isColor( MenuItemDown ) ) | 110 | if ( isColor( MenuItemDown ) ) |
111 | newPal.setActive( *colorGroup( newPal.active(), MenuItemDown ) ); | 111 | newPal.setActive( *colorGroup( newPal.active(), MenuItemDown ) ); |
112 | w->setPalette( newPal ); | 112 | w->setPalette( newPal ); |
113 | } | 113 | } |
114 | } | 114 | } |
115 | if ( w->inherits( "QCheckBox" ) ) { | 115 | if ( w->inherits( "QCheckBox" ) ) { |
116 | if ( isColor( IndicatorOff ) || isColor( IndicatorOn ) ) { | 116 | if ( isColor( IndicatorOff ) || isColor( IndicatorOn ) ) { |
117 | QPalette newPal( w->palette() ); | 117 | QPalette newPal( w->palette() ); |
118 | w->setPalettePropagation( QWidget::SamePalette ); | 118 | w->setPalettePropagation( QWidget::SamePalette ); |
119 | if ( isColor( IndicatorOff ) ) { | 119 | if ( isColor( IndicatorOff ) ) { |
120 | newPal.setNormal( *colorGroup( newPal.normal(), IndicatorOff ) ); | 120 | newPal.setNormal( *colorGroup( newPal.normal(), IndicatorOff ) ); |
121 | newPal.setDisabled( *colorGroup( newPal.normal(), IndicatorOff ) ); | 121 | newPal.setDisabled( *colorGroup( newPal.normal(), IndicatorOff ) ); |
122 | } | 122 | } |
123 | if ( isColor( IndicatorOn ) ) | 123 | if ( isColor( IndicatorOn ) ) |
124 | newPal.setActive( *colorGroup( newPal.active(), IndicatorOn ) ); | 124 | newPal.setActive( *colorGroup( newPal.active(), IndicatorOn ) ); |
125 | w->setPalette( newPal ); | 125 | w->setPalette( newPal ); |
126 | } | 126 | } |
127 | } | 127 | } |
128 | if ( w->inherits( "QRadioButton" ) ) { | 128 | if ( w->inherits( "QRadioButton" ) ) { |
129 | if ( isColor( ExIndicatorOff ) || isColor( ExIndicatorOn ) ) { | 129 | if ( isColor( ExIndicatorOff ) || isColor( ExIndicatorOn ) ) { |
130 | QPalette newPal( w->palette() ); | 130 | QPalette newPal( w->palette() ); |
131 | w->setPalettePropagation( QWidget::SamePalette ); | 131 | w->setPalettePropagation( QWidget::SamePalette ); |
132 | if ( isColor( ExIndicatorOff ) ) { | 132 | if ( isColor( ExIndicatorOff ) ) { |
133 | newPal.setNormal( *colorGroup( newPal.normal(), ExIndicatorOff ) ); | 133 | newPal.setNormal( *colorGroup( newPal.normal(), ExIndicatorOff ) ); |
134 | newPal.setDisabled( *colorGroup( newPal.normal(), | 134 | newPal.setDisabled( *colorGroup( newPal.normal(), |
135 | ExIndicatorOff ) ); | 135 | ExIndicatorOff ) ); |
136 | } | 136 | } |
137 | if ( isColor( ExIndicatorOn ) ) | 137 | if ( isColor( ExIndicatorOn ) ) |
138 | newPal.setActive( *colorGroup( newPal.active(), ExIndicatorOn ) ); | 138 | newPal.setActive( *colorGroup( newPal.active(), ExIndicatorOn ) ); |
139 | w->setPalette( newPal ); | 139 | w->setPalette( newPal ); |
140 | } | 140 | } |
141 | } | 141 | } |
142 | } | 142 | } |
143 | 143 | ||
144 | void OThemeStyle::unPolish( QWidget* w ) | 144 | void OThemeStyle::unPolish( QWidget* w ) |
145 | { | 145 | { |
146 | if ( !w->isTopLevel() ) { | 146 | if ( !w->isTopLevel() ) { |
147 | if ( w->inherits( "QGroupBox" ) | 147 | if ( w->inherits( "QGroupBox" ) |
148 | || w->inherits( "QTabWidget" ) ) { | 148 | || w->inherits( "QTabWidget" ) ) { |
149 | w->setAutoMask( FALSE ); | 149 | w->setAutoMask( FALSE ); |
150 | return ; | 150 | return ; |
151 | } | 151 | } |
152 | if ( w->inherits( "QLabel" ) | 152 | if ( w->inherits( "QLabel" ) |
153 | || w->inherits( "QSlider" ) | 153 | || w->inherits( "QSlider" ) |
154 | || w->inherits( "QButton" ) | 154 | || w->inherits( "QButton" ) |
155 | || w->inherits( "QProgressBar" ) | 155 | || w->inherits( "QProgressBar" ) |
156 | ) { | 156 | ) { |
157 | w->setBackgroundOrigin( QWidget::WidgetOrigin ); | 157 | w->setBackgroundOrigin( QWidget::WidgetOrigin ); |
158 | } | 158 | } |
159 | } | 159 | } |
160 | if ( w->inherits( "QPopupMenu" ) ) | 160 | if ( w->inherits( "QPopupMenu" ) ) |
161 | w->unsetPalette(); | 161 | w->unsetPalette(); |
162 | if ( w->inherits( "QCheckBox" ) ) | 162 | if ( w->inherits( "QCheckBox" ) ) |
163 | w->unsetPalette(); | 163 | w->unsetPalette(); |
164 | if ( w->inherits( "QRadioButton" ) ) | 164 | if ( w->inherits( "QRadioButton" ) ) |
165 | w->unsetPalette(); | 165 | w->unsetPalette(); |
166 | } | 166 | } |
167 | 167 | ||
168 | void OThemeStyle::drawBaseButton( QPainter *p, int x, int y, int w, int h, | 168 | void OThemeStyle::drawBaseButton( QPainter *p, int x, int y, int w, int h, |
169 | const QColorGroup &g, bool sunken, bool | 169 | const QColorGroup &g, bool sunken, bool |
170 | rounded, WidgetType type, const QBrush * ) | 170 | rounded, WidgetType type, const QBrush * ) |
171 | { | 171 | { |
172 | int offset = borderPixmap( type ) ? 0 : decoWidth( type ); | 172 | int offset = borderPixmap( type ) ? 0 : decoWidth( type ); |
173 | QPen oldPen = p->pen(); | 173 | QPen oldPen = p->pen(); |
174 | 174 | ||
175 | // handle reverse bevel here since it uses decowidth differently | 175 | // handle reverse bevel here since it uses decowidth differently |
176 | if ( gradientHint( type ) == GrReverseBevel ) { | 176 | if ( gradientHint( type ) == GrReverseBevel ) { |
177 | int i; | 177 | int i; |
178 | bitBlt( p->device(), x, y, scalePixmap( w, h, type ), 0, 0, w, h, | 178 | bitBlt( p->device(), x, y, scalePixmap( w, h, type ), 0, 0, w, h, |
179 | Qt::CopyROP, true ); | 179 | Qt::CopyROP, true ); |
180 | p->setPen( g.text() ); | 180 | p->setPen( g.text() ); |
181 | for ( i = 0; i < borderWidth( type ); ++i, ++x, ++y, w -= 2, h -= 2 ) | 181 | for ( i = 0; i < borderWidth( type ); ++i, ++x, ++y, w -= 2, h -= 2 ) |
182 | p->drawRect( x, y, w, h ); | 182 | p->drawRect( x, y, w, h ); |
183 | } | 183 | } |
184 | // same with KDE style borders | 184 | // same with KDE style borders |
185 | else if ( !borderPixmap( type ) && shade() == KDE ) { | 185 | else if ( !borderPixmap( type ) && shade() == KDE ) { |
186 | qDrawWinButton( p, x, y, w, h, g, sunken ); | 186 | qDrawWinButton( p, x, y, w, h, g, sunken ); |
187 | if ( isPixmap( type ) ) | 187 | if ( isPixmap( type ) ) |
188 | p->drawTiledPixmap( x + 4, y + 4, w - 6, h - 6, | 188 | p->drawTiledPixmap( x + 4, y + 4, w - 6, h - 6, |
189 | *scalePixmap( w - 6, h - 6, | 189 | *scalePixmap( w - 6, h - 6, |
190 | type ) ); | 190 | type ) ); |
191 | else | 191 | else |
192 | p->fillRect( x + 4, y + 4, w - 6, h - offset * 6, | 192 | p->fillRect( x + 4, y + 4, w - 6, h - offset * 6, |
193 | g.brush( QColorGroup::Button ) ); | 193 | g.brush( QColorGroup::Button ) ); |
194 | 194 | ||
195 | } | 195 | } |
196 | else { | 196 | else { |
197 | if ( ( w - offset * 2 ) > 0 && ( h - offset * 2 ) > 0 ) { | 197 | if ( ( w - offset * 2 ) > 0 && ( h - offset * 2 ) > 0 ) { |
198 | if ( isPixmap( type ) ) | 198 | if ( isPixmap( type ) ) |
199 | if ( rounded ) | 199 | if ( rounded ) |
200 | p->drawTiledPixmap( x, y, w, h, *scalePixmap( w, h, type ) ); | 200 | p->drawTiledPixmap( x, y, w, h, *scalePixmap( w, h, type ) ); |
201 | else | 201 | else |
202 | p->drawTiledPixmap( x + offset, y + offset, w - offset * 2, | 202 | p->drawTiledPixmap( x + offset, y + offset, w - offset * 2, |
203 | h - offset * 2, | 203 | h - offset * 2, |
204 | *scalePixmap( w - offset * 2, h - offset * 2, | 204 | *scalePixmap( w - offset * 2, h - offset * 2, |
205 | type ) ); | 205 | type ) ); |
206 | else | 206 | else |
207 | p->fillRect( x + offset, y + offset, w - offset * 2, h - offset * 2, | 207 | p->fillRect( x + offset, y + offset, w - offset * 2, h - offset * 2, |
208 | g.brush( QColorGroup::Button ) ); | 208 | g.brush( QColorGroup::Button ) ); |
209 | } | 209 | } |
210 | if ( borderPixmap( type ) ) | 210 | if ( borderPixmap( type ) ) |
211 | bitBlt( p->device(), x, y, scaleBorder( w, h, type ), 0, 0, w, h, | 211 | bitBlt( p->device(), x, y, scaleBorder( w, h, type ), 0, 0, w, h, |
212 | Qt::CopyROP, false ); | 212 | Qt::CopyROP, false ); |
213 | else | 213 | else |
214 | drawShade( p, x, y, w, h, g, sunken, rounded, | 214 | drawShade( p, x, y, w, h, g, sunken, rounded, |
215 | highlightWidth( type ), borderWidth( type ), shade() ); | 215 | highlightWidth( type ), borderWidth( type ), shade() ); |
216 | } | 216 | } |
217 | p->setPen( oldPen ); | 217 | p->setPen( oldPen ); |
218 | } | 218 | } |
219 | 219 | ||
220 | void OThemeStyle::drawButton( QPainter *p, int x, int y, int w, int h, | 220 | void OThemeStyle::drawButton( QPainter *p, int x, int y, int w, int h, |
221 | const QColorGroup &g, bool sunken, | 221 | const QColorGroup &g, bool sunken, |
222 | const QBrush *fill ) | 222 | const QBrush *fill ) |
223 | { | 223 | { |
224 | drawBaseButton( p, x, y, w, h, g, sunken, roundButton(), sunken ? | 224 | drawBaseButton( p, x, y, w, h, g, sunken, roundButton(), sunken ? |
225 | PushButtonDown : PushButton, fill ); | 225 | PushButtonDown : PushButton, fill ); |
226 | } | 226 | } |
227 | 227 | ||
228 | void OThemeStyle::drawPushButton( QPushButton* btn, QPainter *p ) | 228 | void OThemeStyle::drawPushButton( QPushButton* btn, QPainter *p ) |
229 | { | 229 | { |
230 | bool sunken = btn->isOn() || btn->isDown(); | 230 | bool sunken = btn->isOn() || btn->isDown(); |
231 | int diw = buttonDefaultIndicatorWidth(); | 231 | int diw = buttonDefaultIndicatorWidth(); |
232 | drawBaseButton( p, diw, diw, btn->width() - 2 * diw, btn->height() - 2 * diw, | 232 | drawBaseButton( p, diw, diw, btn->width() - 2 * diw, btn->height() - 2 * diw, |
233 | *colorGroup( btn->colorGroup(), sunken ? PushButtonDown : | 233 | *colorGroup( btn->colorGroup(), sunken ? PushButtonDown : |
234 | PushButton ), sunken, roundButton(), | 234 | PushButton ), sunken, roundButton(), |
235 | sunken ? PushButtonDown : PushButton, NULL ); | 235 | sunken ? PushButtonDown : PushButton, NULL ); |
236 | // TODO if diw, draw fancy default button indicator | 236 | // TODO if diw, draw fancy default button indicator |
237 | } | 237 | } |
238 | 238 | ||
239 | void OThemeStyle::drawBaseMask( QPainter *p, int x, int y, int w, int h, | 239 | void OThemeStyle::drawBaseMask( QPainter *p, int x, int y, int w, int h, |
240 | bool round ) | 240 | bool round ) |
241 | { | 241 | { |
242 | // round edge fills | 242 | // round edge fills |
243 | static const QCOORD btm_left_fill[] = { | 243 | static const QCOORD btm_left_fill[] = { |
244 | 0, 0, 1, 0, 2, 0, 3, 0, 4, 0, 0, 1, 1, 1, 2, 1, 3, 1, 4, 1, | 244 | 0, 0, 1, 0, 2, 0, 3, 0, 4, 0, 0, 1, 1, 1, 2, 1, 3, 1, 4, 1, |
245 | 1, 2, 2, 2, 3, 2, 4, 2, 2, 3, 3, 3, 4, 3, 3, 4, 4, 4 | 245 | 1, 2, 2, 2, 3, 2, 4, 2, 2, 3, 3, 3, 4, 3, 3, 4, 4, 4 |
246 | }; | 246 | }; |
247 | 247 | ||
248 | static const QCOORD btm_right_fill[] = { | 248 | static const QCOORD btm_right_fill[] = { |
249 | 0, 0, 1, 0, 2, 0, 3, 0, 4, 0, 0, 1, 1, 1, 2, 1, 3, 1, 4, | 249 | 0, 0, 1, 0, 2, 0, 3, 0, 4, 0, 0, 1, 1, 1, 2, 1, 3, 1, 4, |
250 | 1, 0, 2, 1, 2, 2, 2, 3, 2, 0, 3, 1, 3, 2, 3, 0, 4, 1, 4 | 250 | 1, 0, 2, 1, 2, 2, 2, 3, 2, 0, 3, 1, 3, 2, 3, 0, 4, 1, 4 |
251 | }; | 251 | }; |
252 | 252 | ||
253 | static const QCOORD top_left_fill[] = { | 253 | static const QCOORD top_left_fill[] = { |
254 | 3, 0, 4, 0, 2, 1, 3, 1, 4, 1, 1, 2, 2, 2, 3, 2, 4, 2, 0, 3, | 254 | 3, 0, 4, 0, 2, 1, 3, 1, 4, 1, 1, 2, 2, 2, 3, 2, 4, 2, 0, 3, |
255 | 1, 3, 2, 3, 3, 3, 4, 3, 0, 4, 1, 4, 2, 4, 3, 4, 4, 4 | 255 | 1, 3, 2, 3, 3, 3, 4, 3, 0, 4, 1, 4, 2, 4, 3, 4, 4, 4 |
256 | }; | 256 | }; |
257 | 257 | ||
258 | static const QCOORD top_right_fill[] = { | 258 | static const QCOORD top_right_fill[] = { |
259 | 0, 0, 1, 0, 0, 1, 1, 1, 2, 1, 0, 2, 1, 2, 2, 2, 3, 2, 0, | 259 | 0, 0, 1, 0, 0, 1, 1, 1, 2, 1, 0, 2, 1, 2, 2, 2, 3, 2, 0, |
260 | 3, 1, 3, 2, 3, 3, 3, 4, 3, 0, 4, 1, 4, 2, 4, 3, 4, 4, 4 | 260 | 3, 1, 3, 2, 3, 3, 3, 4, 3, 0, 4, 1, 4, 2, 4, 3, 4, 4, 4 |
261 | }; | 261 | }; |
262 | 262 | ||
263 | QBrush fillBrush( color1, SolidPattern ); | 263 | QBrush fillBrush( color1, SolidPattern ); |
264 | p->setPen( color1 ); | 264 | p->setPen( color1 ); |
265 | if ( round && w > 19 && h > 19 ) { | 265 | if ( round && w > 19 && h > 19 ) { |
266 | int x2 = x + w - 1; | 266 | int x2 = x + w - 1; |
267 | int y2 = y + h - 1; | 267 | int y2 = y + h - 1; |
268 | QPointArray a( QCOORDARRLEN( top_left_fill ), top_left_fill ); | 268 | QPointArray a( QCOORDARRLEN( top_left_fill ), top_left_fill ); |
269 | a.translate( 1, 1 ); | 269 | a.translate( 1, 1 ); |
270 | p->drawPoints( a ); | 270 | p->drawPoints( a ); |
271 | a.setPoints( QCOORDARRLEN( btm_left_fill ), btm_left_fill ); | 271 | a.setPoints( QCOORDARRLEN( btm_left_fill ), btm_left_fill ); |
272 | a.translate( 1, h - 6 ); | 272 | a.translate( 1, h - 6 ); |
273 | p->drawPoints( a ); | 273 | p->drawPoints( a ); |
274 | a.setPoints( QCOORDARRLEN( top_right_fill ), top_right_fill ); | 274 | a.setPoints( QCOORDARRLEN( top_right_fill ), top_right_fill ); |
275 | a.translate( w - 6, 1 ); | 275 | a.translate( w - 6, 1 ); |
276 | p->drawPoints( a ); | 276 | p->drawPoints( a ); |
277 | a.setPoints( QCOORDARRLEN( btm_right_fill ), btm_right_fill ); | 277 | a.setPoints( QCOORDARRLEN( btm_right_fill ), btm_right_fill ); |
278 | a.translate( w - 6, h - 6 ); | 278 | a.translate( w - 6, h - 6 ); |
279 | p->drawPoints( a ); | 279 | p->drawPoints( a ); |
280 | 280 | ||
281 | p->fillRect( x + 6, y, w - 12, h, fillBrush ); | 281 | p->fillRect( x + 6, y, w - 12, h, fillBrush ); |
282 | p->fillRect( x, y + 6, x + 6, h - 12, fillBrush ); | 282 | p->fillRect( x, y + 6, x + 6, h - 12, fillBrush ); |
283 | p->fillRect( x2 - 6, y + 6, x2, h - 12, fillBrush ); | 283 | p->fillRect( x2 - 6, y + 6, x2, h - 12, fillBrush ); |
284 | p->drawLine( x + 6, y, x2 - 6, y ); | 284 | p->drawLine( x + 6, y, x2 - 6, y ); |
285 | p->drawLine( x + 6, y2, x2 - 6, y2 ); | 285 | p->drawLine( x + 6, y2, x2 - 6, y2 ); |
286 | p->drawLine( x, y + 6, x, y2 - 6 ); | 286 | p->drawLine( x, y + 6, x, y2 - 6 ); |
287 | p->drawLine( x2, y + 6, x2, y2 - 6 ); | 287 | p->drawLine( x2, y + 6, x2, y2 - 6 ); |
288 | 288 | ||
289 | } | 289 | } |
290 | else | 290 | else |
291 | p->fillRect( x, y, w, h, fillBrush ); | 291 | p->fillRect( x, y, w, h, fillBrush ); |
292 | } | 292 | } |
293 | 293 | ||
294 | void OThemeStyle::drawButtonMask( QPainter *p, int x, int y, int w, int h ) | 294 | void OThemeStyle::drawButtonMask( QPainter *p, int x, int y, int w, int h ) |
295 | { | 295 | { |
296 | drawBaseMask( p, x, y, w, h, roundButton() ); | 296 | drawBaseMask( p, x, y, w, h, roundButton() ); |
297 | } | 297 | } |
298 | 298 | ||
299 | void OThemeStyle::drawComboButtonMask( QPainter *p, int x, int y, int w, int h ) | 299 | void OThemeStyle::drawComboButtonMask( QPainter *p, int x, int y, int w, int h ) |
300 | { | 300 | { |
301 | drawBaseMask( p, x, y, w, h, roundComboBox() ); | 301 | drawBaseMask( p, x, y, w, h, roundComboBox() ); |
302 | } | 302 | } |
303 | 303 | ||
304 | void OThemeStyle::drawBevelButton( QPainter *p, int x, int y, int w, int h, | 304 | void OThemeStyle::drawBevelButton( QPainter *p, int x, int y, int w, int h, |
305 | const QColorGroup &g, bool sunken, | 305 | const QColorGroup &g, bool sunken, |
306 | const QBrush * ) | 306 | const QBrush * ) |
307 | { | 307 | { |
308 | WidgetType type = sunken ? BevelDown : Bevel; | 308 | WidgetType type = sunken ? BevelDown : Bevel; |
309 | drawBaseButton( p, x, y, w, h, *colorGroup( g, type ), sunken, false, type ); | 309 | drawBaseButton( p, x, y, w, h, *colorGroup( g, type ), sunken, false, type ); |
310 | } | 310 | } |
311 | 311 | ||
312 | void OThemeStyle::drawToolButton( QPainter *p, int x, int y, int w, int h, | ||
313 | const QColorGroup &g, bool sunken, | ||
314 | const QBrush * ) | ||
315 | { | ||
316 | WidgetType type = sunken ? ToolButtonDown : ToolButton; | ||
317 | drawBaseButton( p, x, y, w, h, *colorGroup( g, type ), sunken, false, type ); | ||
318 | } | ||
319 | |||
312 | #if 0 | 320 | #if 0 |
313 | void OThemeStyle::drawKToolBarButton( QPainter *p, int x, int y, int w, int h, | 321 | void OThemeStyle::drawKToolBarButton( QPainter *p, int x, int y, int w, int h, |
314 | const QColorGroup &g, bool sunken, | 322 | const QColorGroup &g, bool sunken, |
315 | bool raised, bool enabled, bool popup, | 323 | bool raised, bool enabled, bool popup, |
316 | KToolButtonType type, const QString &btext, | 324 | KToolButtonType type, const QString &btext, |
317 | const QPixmap *pixmap, QFont *font, | 325 | const QPixmap *pixmap, QFont *font, |
318 | QWidget * ) | 326 | QWidget * ) |
319 | { | 327 | { |
320 | QFont tmp_font( QString::fromLatin1( "Helvetica" ), 10 ); | 328 | QFont tmp_font( QString::fromLatin1( "Helvetica" ), 10 ); |
321 | if ( font ) | 329 | if ( font ) |
322 | tmp_font = *font; | 330 | tmp_font = *font; |
323 | QFontMetrics fm( tmp_font ); | 331 | QFontMetrics fm( tmp_font ); |
324 | WidgetType widget = sunken ? ToolButtonDown : ToolButton; | 332 | WidgetType widget = sunken ? ToolButtonDown : ToolButton; |
325 | 333 | ||
326 | drawBaseButton( p, x, y, w, h, *colorGroup( g, widget ), sunken, false, | 334 | drawBaseButton( p, x, y, w, h, *colorGroup( g, widget ), sunken, false, |
327 | widget ); | 335 | widget ); |
328 | int dx, dy; | 336 | int dx, dy; |
329 | if ( type == Icon ) { // icon only | 337 | if ( type == Icon ) { // icon only |
330 | if ( pixmap ) { | 338 | if ( pixmap ) { |
331 | dx = ( w - pixmap->width() ) / 2; | 339 | dx = ( w - pixmap->width() ) / 2; |
332 | dy = ( h - pixmap->height() ) / 2; | 340 | dy = ( h - pixmap->height() ) / 2; |
333 | if ( sunken ) { | 341 | if ( sunken ) { |
334 | ++dx; | 342 | ++dx; |
335 | ++dy; | 343 | ++dy; |
336 | } | 344 | } |
337 | p->drawPixmap( x + dx, y + dy, *pixmap ); | 345 | p->drawPixmap( x + dx, y + dy, *pixmap ); |
338 | } | 346 | } |
339 | } | 347 | } |
340 | else if ( type == IconTextRight ) { // icon and text (if any) | 348 | else if ( type == IconTextRight ) { // icon and text (if any) |
341 | if ( pixmap ) { | 349 | if ( pixmap ) { |
342 | dx = 4; | 350 | dx = 4; |
343 | dy = ( h - pixmap->height() ) / 2; | 351 | dy = ( h - pixmap->height() ) / 2; |
344 | if ( sunken ) { | 352 | if ( sunken ) { |
345 | ++dx; | 353 | ++dx; |
346 | ++dy; | 354 | ++dy; |
347 | } | 355 | } |
348 | p->drawPixmap( x + dx, y + dy, *pixmap ); | 356 | p->drawPixmap( x + dx, y + dy, *pixmap ); |
349 | } | 357 | } |
350 | if ( !btext.isNull() ) { | 358 | if ( !btext.isNull() ) { |
351 | int tf = AlignVCenter | AlignLeft; | 359 | int tf = AlignVCenter | AlignLeft; |
352 | if ( pixmap ) | 360 | if ( pixmap ) |
353 | dx = 4 + pixmap->width() + 2; | 361 | dx = 4 + pixmap->width() + 2; |
354 | else | 362 | else |
355 | dx = 4; | 363 | dx = 4; |
356 | dy = 0; | 364 | dy = 0; |
357 | if ( sunken ) { | 365 | if ( sunken ) { |
358 | ++dx; | 366 | ++dx; |
359 | ++dy; | 367 | ++dy; |
360 | } | 368 | } |
361 | if ( font ) | 369 | if ( font ) |
362 | p->setFont( *font ); | 370 | p->setFont( *font ); |
363 | if ( raised ) | 371 | if ( raised ) |
364 | p->setPen( KGlobalSettings::toolBarHighlightColor() ); | 372 | p->setPen( KGlobalSettings::toolBarHighlightColor() ); |
365 | p->drawText( x + dx, y + dy, w - dx, h, tf, btext ); | 373 | p->drawText( x + dx, y + dy, w - dx, h, tf, btext ); |
366 | } | 374 | } |
367 | } | 375 | } |
368 | else if ( type == Text ) { // only text, even if there is a icon | 376 | else if ( type == Text ) { // only text, even if there is a icon |
369 | if ( !btext.isNull() ) { | 377 | if ( !btext.isNull() ) { |
370 | int tf = AlignTop | AlignLeft; | 378 | int tf = AlignTop | AlignLeft; |
371 | if ( !enabled ) | 379 | if ( !enabled ) |
372 | p->setPen( g.dark() ); | 380 | p->setPen( g.dark() ); |
373 | dx = ( w - fm.width( btext ) ) / 2; | 381 | dx = ( w - fm.width( btext ) ) / 2; |
374 | dy = ( h - fm.lineSpacing() ) / 2; | 382 | dy = ( h - fm.lineSpacing() ) / 2; |
375 | if ( sunken ) { | 383 | if ( sunken ) { |
376 | ++dx; | 384 | ++dx; |
377 | ++dy; | 385 | ++dy; |
378 | } | 386 | } |
379 | if ( font ) | 387 | if ( font ) |
380 | p->setFont( *font ); | 388 | p->setFont( *font ); |
381 | if ( raised ) | 389 | if ( raised ) |
382 | p->setPen( KGlobalSettings::toolBarHighlightColor() ); | 390 | p->setPen( KGlobalSettings::toolBarHighlightColor() ); |
383 | p->drawText( x + dx, y + dy, fm.width( btext ), fm.lineSpacing(), tf, btext ); | 391 | p->drawText( x + dx, y + dy, fm.width( btext ), fm.lineSpacing(), tf, btext ); |
384 | } | 392 | } |
385 | } | 393 | } |
386 | else if ( type == IconTextBottom ) { | 394 | else if ( type == IconTextBottom ) { |
387 | if ( pixmap ) { | 395 | if ( pixmap ) { |
388 | dx = ( w - pixmap->width() ) / 2; | 396 | dx = ( w - pixmap->width() ) / 2; |
389 | dy = ( h - fm.lineSpacing() - pixmap->height() ) / 2; | 397 | dy = ( h - fm.lineSpacing() - pixmap->height() ) / 2; |
390 | if ( sunken ) { | 398 | if ( sunken ) { |
391 | ++dx; | 399 | ++dx; |
392 | ++dy; | 400 | ++dy; |
393 | } | 401 | } |
394 | p->drawPixmap( x + dx, y + dy, *pixmap ); | 402 | p->drawPixmap( x + dx, y + dy, *pixmap ); |
395 | } | 403 | } |
396 | if ( !btext.isNull() ) { | 404 | if ( !btext.isNull() ) { |
397 | int tf = AlignBottom | AlignHCenter; | 405 | int tf = AlignBottom | AlignHCenter; |
398 | dx = ( w - fm.width( btext ) ) / 2; | 406 | dx = ( w - fm.width( btext ) ) / 2; |
399 | dy = h - fm.lineSpacing() - 4; | 407 | dy = h - fm.lineSpacing() - 4; |
400 | if ( sunken ) { | 408 | if ( sunken ) { |
401 | ++dx; | 409 | ++dx; |
402 | ++dy; | 410 | ++dy; |
403 | } | 411 | } |
404 | if ( font ) | 412 | if ( font ) |
405 | p->setFont( *font ); | 413 | p->setFont( *font ); |
406 | if ( raised ) | 414 | if ( raised ) |
407 | p->setPen( KGlobalSettings::toolBarHighlightColor() ); | 415 | p->setPen( KGlobalSettings::toolBarHighlightColor() ); |
408 | p->drawText( x + dx, y + dy, fm.width( btext ), fm.lineSpacing(), tf, btext ); | 416 | p->drawText( x + dx, y + dy, fm.width( btext ), fm.lineSpacing(), tf, btext ); |
409 | } | 417 | } |
410 | } | 418 | } |
411 | if ( popup ) { | 419 | if ( popup ) { |
412 | if ( enabled ) | 420 | if ( enabled ) |
413 | qDrawArrow ( p, DownArrow, WindowsStyle, false, w - 5, h - 5, 0, 0, | 421 | qDrawArrow ( p, DownArrow, WindowsStyle, false, w - 5, h - 5, 0, 0, |
414 | g, true ); | 422 | g, true ); |
415 | else | 423 | else |
416 | qDrawArrow ( p, DownArrow, WindowsStyle, false, w - 5, h - 5, | 424 | qDrawArrow ( p, DownArrow, WindowsStyle, false, w - 5, h - 5, |
417 | 0, 0, g, false ); | 425 | 0, 0, g, false ); |
418 | } | 426 | } |
419 | } | 427 | } |
420 | 428 | ||
421 | void OThemeStyle::drawKBarHandle( QPainter *p, int x, int y, int w, int h, | 429 | void OThemeStyle::drawKBarHandle( QPainter *p, int x, int y, int w, int h, |
422 | const QColorGroup &g, KToolBarPos, QBrush * ) | 430 | const QColorGroup &g, KToolBarPos, QBrush * ) |
423 | { | 431 | { |
424 | if ( w > h ) | 432 | if ( w > h ) |
425 | drawBaseButton( p, x, y, w, h, *colorGroup( g, HBarHandle ), false, false, | 433 | drawBaseButton( p, x, y, w, h, *colorGroup( g, HBarHandle ), false, false, |
426 | HBarHandle ); | 434 | HBarHandle ); |
427 | else | 435 | else |
428 | drawBaseButton( p, x, y, w, h, *colorGroup( g, VBarHandle ), false, false, | 436 | drawBaseButton( p, x, y, w, h, *colorGroup( g, VBarHandle ), false, false, |
429 | VBarHandle ); | 437 | VBarHandle ); |
430 | } | 438 | } |
431 | 439 | ||
432 | void OThemeStyle::drawKToolBar( QPainter *p, int x, int y, int w, int h, | 440 | void OThemeStyle::drawKToolBar( QPainter *p, int x, int y, int w, int h, |
433 | const QColorGroup &g, KToolBarPos, QBrush * ) | 441 | const QColorGroup &g, KToolBarPos, QBrush * ) |
434 | { | 442 | { |
435 | drawBaseButton( p, x, y, w, h, *colorGroup( g, ToolBar ), false, false, | 443 | drawBaseButton( p, x, y, w, h, *colorGroup( g, ToolBar ), false, false, |
436 | ToolBar ); | 444 | ToolBar ); |
437 | } | 445 | } |
438 | #endif | 446 | #endif |
439 | 447 | ||
440 | QRect OThemeStyle::buttonRect( int x, int y, int w, int h ) | 448 | QRect OThemeStyle::buttonRect( int x, int y, int w, int h ) |
441 | { | 449 | { |
442 | int spacing = decoWidth( PushButton ) > decoWidth( PushButtonDown ) ? | 450 | int spacing = decoWidth( PushButton ) > decoWidth( PushButtonDown ) ? |
443 | decoWidth( PushButton ) : decoWidth( PushButtonDown ); | 451 | decoWidth( PushButton ) : decoWidth( PushButtonDown ); |
444 | return ( QRect( x + spacing, y + spacing, w - ( spacing * 2 ), h - ( spacing * 2 ) ) ); | 452 | return ( QRect( x + spacing, y + spacing, w - ( spacing * 2 ), h - ( spacing * 2 ) ) ); |
445 | } | 453 | } |
446 | 454 | ||
447 | void OThemeStyle::drawComboButton( QPainter *p, int x, int y, int w, int h, | 455 | void OThemeStyle::drawComboButton( QPainter *p, int x, int y, int w, int h, |
448 | const QColorGroup &g, bool sunken, bool, | 456 | const QColorGroup &g, bool sunken, bool, |
449 | bool, const QBrush * ) | 457 | bool, const QBrush * ) |
450 | { | 458 | { |
451 | WidgetType widget = sunken ? ComboBoxDown : ComboBox; | 459 | WidgetType widget = sunken ? ComboBoxDown : ComboBox; |
452 | drawBaseButton( p, x, y, w, h, *colorGroup( g, widget ), sunken, | 460 | drawBaseButton( p, x, y, w, h, *colorGroup( g, widget ), sunken, |
453 | roundComboBox(), widget ); | 461 | roundComboBox(), widget ); |
454 | if ( !sunken && isPixmap( ComboDeco ) ) | 462 | if ( !sunken && isPixmap( ComboDeco ) ) |
455 | p->drawPixmap( w - uncached( ComboDeco ) ->width() - | 463 | p->drawPixmap( w - uncached( ComboDeco ) ->width() - |
456 | decoWidth( ComboBox ) - 2, | 464 | decoWidth( ComboBox ) - 2, |
457 | y + ( h - uncached( ComboDeco ) -> | 465 | y + ( h - uncached( ComboDeco ) -> |
458 | height() ) / 2, *uncached( ComboDeco ) ); | 466 | height() ) / 2, *uncached( ComboDeco ) ); |
459 | else if ( sunken && isPixmap( ComboDecoDown ) ) | 467 | else if ( sunken && isPixmap( ComboDecoDown ) ) |
460 | p->drawPixmap( w - uncached( ComboDecoDown ) ->width() - | 468 | p->drawPixmap( w - uncached( ComboDecoDown ) ->width() - |
461 | decoWidth( ComboBoxDown ) - 2, | 469 | decoWidth( ComboBoxDown ) - 2, |
462 | y + ( h - uncached( ComboDecoDown ) -> | 470 | y + ( h - uncached( ComboDecoDown ) -> |
463 | height() ) / 2, *uncached( ComboDecoDown ) ); | 471 | height() ) / 2, *uncached( ComboDecoDown ) ); |
464 | else { | 472 | else { |
465 | qDrawArrow( p, Qt::DownArrow, Qt::MotifStyle, false, w - 15, y + 6, 10, | 473 | qDrawArrow( p, Qt::DownArrow, Qt::MotifStyle, false, w - 15, y + 6, 10, |
466 | h - 15, *colorGroup( g, widget ), true ); | 474 | h - 15, *colorGroup( g, widget ), true ); |
467 | qDrawShadeRect( p, w - 14, y + 7 + ( h - 15 ), 10, 3, *colorGroup( g, widget ) ); | 475 | qDrawShadeRect( p, w - 14, y + 7 + ( h - 15 ), 10, 3, *colorGroup( g, widget ) ); |
468 | } | 476 | } |
469 | } | 477 | } |
470 | 478 | ||
471 | void OThemeStyle::drawScrollBarControls( QPainter *p, const QScrollBar *sb, | 479 | void OThemeStyle::drawScrollBarControls( QPainter *p, const QScrollBar *sb, |
472 | int sliderStart, uint controls, | 480 | int sliderStart, uint controls, |
473 | uint activeControl ) | 481 | uint activeControl ) |
474 | { | 482 | { |
475 | int sliderMin, sliderMax, sliderLength, buttonDim; | 483 | int sliderMin, sliderMax, sliderLength, buttonDim; |
476 | QRect add | 484 | QRect add |
477 | , sub, addPage, subPage, slider; | 485 | , sub, addPage, subPage, slider; |
478 | int addX, addY, subX, subY; | 486 | int addX, addY, subX, subY; |
479 | bool horizontal = sb->orientation() == QScrollBar::Horizontal; | 487 | bool horizontal = sb->orientation() == QScrollBar::Horizontal; |
480 | int len = ( horizontal ) ? sb->width() : sb->height(); | 488 | int len = ( horizontal ) ? sb->width() : sb->height(); |
481 | int extent = ( horizontal ) ? sb->height() : sb->width(); | 489 | int extent = ( horizontal ) ? sb->height() : sb->width(); |
482 | int offset = decoWidth( horizontal ? HScrollGroove : VScrollGroove ); | 490 | int offset = decoWidth( horizontal ? HScrollGroove : VScrollGroove ); |
483 | QColorGroup g = sb->colorGroup(); | 491 | QColorGroup g = sb->colorGroup(); |
484 | 492 | ||
485 | scrollBarMetrics( sb, sliderMin, sliderMax, sliderLength, buttonDim ); | 493 | scrollBarMetrics( sb, sliderMin, sliderMax, sliderLength, buttonDim ); |
486 | if ( sliderStart > sliderMax ) | 494 | if ( sliderStart > sliderMax ) |
487 | sliderStart = sliderMax; | 495 | sliderStart = sliderMax; |
488 | 496 | ||
489 | int sliderEnd = sliderStart + sliderLength; | 497 | int sliderEnd = sliderStart + sliderLength; |
490 | int sliderWidth = extent - offset * 2; | 498 | int sliderWidth = extent - offset * 2; |
491 | 499 | ||
492 | // Scary button placement code >:-P Feel free to improve this if you | 500 | // Scary button placement code >:-P Feel free to improve this if you |
493 | // want. I get a headache just looking at it... (mosfet) | 501 | // want. I get a headache just looking at it... (mosfet) |
494 | if ( scrollBarLayout() == SBOpposite ) { | 502 | if ( scrollBarLayout() == SBOpposite ) { |
495 | if ( horizontal ) { | 503 | if ( horizontal ) { |
496 | subY = addY = ( extent - buttonDim ) / 2; | 504 | subY = addY = ( extent - buttonDim ) / 2; |
497 | subX = offset; | 505 | subX = offset; |
498 | addX = len - buttonDim - offset; | 506 | addX = len - buttonDim - offset; |
499 | } | 507 | } |
500 | else { | 508 | else { |
501 | subX = addX = ( extent - buttonDim ) / 2; | 509 | subX = addX = ( extent - buttonDim ) / 2; |
502 | subY = offset; | 510 | subY = offset; |
503 | addY = len - buttonDim - offset; | 511 | addY = len - buttonDim - offset; |
504 | } | 512 | } |
505 | sub.setRect( subX, subY, buttonDim, buttonDim ); | 513 | sub.setRect( subX, subY, buttonDim, buttonDim ); |
506 | add.setRect( addX, addY, buttonDim, buttonDim ); | 514 | add.setRect( addX, addY, buttonDim, buttonDim ); |
507 | if ( horizontal ) { | 515 | if ( horizontal ) { |
508 | subPage.setRect( sub.right() + 1, offset, | 516 | subPage.setRect( sub.right() + 1, offset, |
509 | sliderStart - sub.right() - 1 , sliderWidth ); | 517 | sliderStart - sub.right() - 1 , sliderWidth ); |
510 | addPage.setRect( sliderEnd, offset, addX - sliderEnd, sliderWidth ); | 518 | addPage.setRect( sliderEnd, offset, addX - sliderEnd, sliderWidth ); |
511 | slider.setRect( sliderStart, offset, sliderLength, sliderWidth ); | 519 | slider.setRect( sliderStart, offset, sliderLength, sliderWidth ); |
512 | } | 520 | } |
513 | else { | 521 | else { |
514 | subPage.setRect( offset, sub.bottom() + 1, sliderWidth, | 522 | subPage.setRect( offset, sub.bottom() + 1, sliderWidth, |
515 | sliderStart - sub.bottom() - 1 ); | 523 | sliderStart - sub.bottom() - 1 ); |
516 | addPage.setRect( offset, sliderEnd, sliderWidth, addY - sliderEnd ); | 524 | addPage.setRect( offset, sliderEnd, sliderWidth, addY - sliderEnd ); |
517 | slider.setRect( offset, sliderStart, sliderWidth, sliderLength ); | 525 | slider.setRect( offset, sliderStart, sliderWidth, sliderLength ); |
518 | } | 526 | } |
519 | } | 527 | } |
520 | else if ( horizontal ) { | 528 | else if ( horizontal ) { |
521 | subY = addY = ( extent - buttonDim ) / 2; | 529 | subY = addY = ( extent - buttonDim ) / 2; |
522 | if ( scrollBarLayout() == SBBottomLeft ) { | 530 | if ( scrollBarLayout() == SBBottomLeft ) { |
523 | subX = offset; | 531 | subX = offset; |
524 | addX = buttonDim + offset; | 532 | addX = buttonDim + offset; |
525 | subPage.setRect( buttonDim * 2, 0, sliderStart - 1, extent ); | 533 | subPage.setRect( buttonDim * 2, 0, sliderStart - 1, extent ); |
526 | addPage.setRect( sliderEnd, 0, len - sliderEnd, extent ); | 534 | addPage.setRect( sliderEnd, 0, len - sliderEnd, extent ); |
527 | slider.setRect( sliderStart, 0, sliderLength, extent ); | 535 | slider.setRect( sliderStart, 0, sliderLength, extent ); |
528 | } | 536 | } |
529 | else { | 537 | else { |
530 | subX = len - buttonDim - buttonDim - offset; | 538 | subX = len - buttonDim - buttonDim - offset; |
531 | addX = len - buttonDim - offset; | 539 | addX = len - buttonDim - offset; |
532 | subPage.setRect( offset + 1, offset, sliderStart - 1 , sliderWidth ); | 540 | subPage.setRect( offset + 1, offset, sliderStart - 1 , sliderWidth ); |
533 | addPage.setRect( sliderEnd, offset, subX - sliderEnd, sliderWidth ); | 541 | addPage.setRect( sliderEnd, offset, subX - sliderEnd, sliderWidth ); |
534 | slider.setRect( sliderStart, offset, sliderLength, sliderWidth ); | 542 | slider.setRect( sliderStart, offset, sliderLength, sliderWidth ); |
535 | } | 543 | } |
536 | sub.setRect( subX, subY, buttonDim, buttonDim ); | 544 | sub.setRect( subX, subY, buttonDim, buttonDim ); |
537 | add.setRect( addX, addY, buttonDim, buttonDim ); | 545 | add.setRect( addX, addY, buttonDim, buttonDim ); |
538 | } | 546 | } |
539 | else { // BottomLeft and BottomRight vertical bars are the same. | 547 | else { // BottomLeft and BottomRight vertical bars are the same. |
540 | subX = addX = ( extent - buttonDim ) / 2; | 548 | subX = addX = ( extent - buttonDim ) / 2; |
541 | subY = len - buttonDim - buttonDim - offset; | 549 | subY = len - buttonDim - buttonDim - offset; |
542 | addY = len - buttonDim - offset; | 550 | addY = len - buttonDim - offset; |
543 | subPage.setRect( offset, offset + 1, sliderWidth, | 551 | subPage.setRect( offset, offset + 1, sliderWidth, |
544 | sliderStart - offset - 1 ); | 552 | sliderStart - offset - 1 ); |
545 | addPage.setRect( offset, sliderEnd, sliderWidth, subY - sliderEnd ); | 553 | addPage.setRect( offset, sliderEnd, sliderWidth, subY - sliderEnd ); |
546 | slider.setRect( offset, sliderStart, sliderWidth, sliderLength ); | 554 | slider.setRect( offset, sliderStart, sliderWidth, sliderLength ); |
547 | sub.setRect( subX, subY, buttonDim, buttonDim ); | 555 | sub.setRect( subX, subY, buttonDim, buttonDim ); |
548 | add.setRect( addX, addY, buttonDim, buttonDim ); | 556 | add.setRect( addX, addY, buttonDim, buttonDim ); |
549 | } | 557 | } |
550 | // End of the button placement code | 558 | // End of the button placement code |
551 | 559 | ||
552 | bool active; | 560 | bool active; |
553 | if ( ( controls & QStyle::SubPage ) ) { | 561 | if ( ( controls & QStyle::SubPage ) ) { |
554 | drawScrollBarGroove( p, sb, horizontal, subPage, g ); | 562 | drawScrollBarGroove( p, sb, horizontal, subPage, g ); |
555 | } | 563 | } |
556 | if ( ( controls & QStyle::AddPage ) ) { | 564 | if ( ( controls & QStyle::AddPage ) ) { |
557 | drawScrollBarGroove( p, sb, horizontal, addPage, g ); | 565 | drawScrollBarGroove( p, sb, horizontal, addPage, g ); |
558 | } | 566 | } |
559 | if ( controls & QStyle::AddLine ) { | 567 | if ( controls & QStyle::AddLine ) { |
560 | active = activeControl == QStyle::AddLine; | 568 | active = activeControl == QStyle::AddLine; |
561 | drawBaseButton( p, add.x(), add.y(), add.width(), add.height(), | 569 | drawBaseButton( p, add.x(), add.y(), add.width(), add.height(), |
562 | *colorGroup( g, active ? ScrollButtonDown : ScrollButton ), | 570 | *colorGroup( g, active ? ScrollButtonDown : ScrollButton ), |
563 | active, false, active ? ScrollButtonDown : ScrollButton ); | 571 | active, false, active ? ScrollButtonDown : ScrollButton ); |
564 | drawArrow( p, ( horizontal ) ? RightArrow : DownArrow, active, add.x() + 3, | 572 | drawArrow( p, ( horizontal ) ? RightArrow : DownArrow, active, add.x() + 3, |
565 | add.y() + 3, add.width() - 6, add.height() - 6, | 573 | add.y() + 3, add.width() - 6, add.height() - 6, |
566 | *colorGroup( g, active ? ScrollButtonDown : ScrollButton ) ); | 574 | *colorGroup( g, active ? ScrollButtonDown : ScrollButton ) ); |
567 | } | 575 | } |
568 | if ( controls & QStyle::SubLine ) { | 576 | if ( controls & QStyle::SubLine ) { |
569 | active = activeControl == QStyle::SubLine; | 577 | active = activeControl == QStyle::SubLine; |
570 | p->setPen( g.dark() ); | 578 | p->setPen( g.dark() ); |
571 | p->drawRect( sub ); | 579 | p->drawRect( sub ); |
572 | drawBaseButton( p, sub.x(), sub.y(), sub.width(), sub.height(), | 580 | drawBaseButton( p, sub.x(), sub.y(), sub.width(), sub.height(), |
573 | *colorGroup( g, active ? ScrollButtonDown : ScrollButton ), | 581 | *colorGroup( g, active ? ScrollButtonDown : ScrollButton ), |
574 | active, false, active ? ScrollButtonDown : ScrollButton ); | 582 | active, false, active ? ScrollButtonDown : ScrollButton ); |
575 | drawArrow( p, ( horizontal ) ? LeftArrow : UpArrow, active, sub.x() + 3, | 583 | drawArrow( p, ( horizontal ) ? LeftArrow : UpArrow, active, sub.x() + 3, |
576 | sub.y() + 3, sub.width() - 6, sub.height() - 6, | 584 | sub.y() + 3, sub.width() - 6, sub.height() - 6, |
577 | *colorGroup( g, active ? ScrollButtonDown : ScrollButton ) ); | 585 | *colorGroup( g, active ? ScrollButtonDown : ScrollButton ) ); |
578 | } | 586 | } |
579 | if ( controls & QStyle::Slider ) { | 587 | if ( controls & QStyle::Slider ) { |
580 | active = activeControl == QStyle::Slider; | 588 | active = activeControl == QStyle::Slider; |
581 | WidgetType widget = horizontal ? | 589 | WidgetType widget = horizontal ? |
582 | active ? HScrollBarSliderDown : HScrollBarSlider : | 590 | active ? HScrollBarSliderDown : HScrollBarSlider : |
583 | active ? VScrollBarSliderDown : VScrollBarSlider; | 591 | active ? VScrollBarSliderDown : VScrollBarSlider; |
584 | 592 | ||
585 | drawBaseButton( p, slider.x(), slider.y(), slider.width(), | 593 | drawBaseButton( p, slider.x(), slider.y(), slider.width(), |
586 | slider.height(), *colorGroup( g, widget ), active, false, | 594 | slider.height(), *colorGroup( g, widget ), active, false, |
587 | widget ); | 595 | widget ); |
588 | int spaceW = horizontal ? slider.width() - decoWidth( widget ) - 4 : | 596 | int spaceW = horizontal ? slider.width() - decoWidth( widget ) - 4 : |
589 | slider.width(); | 597 | slider.width(); |
590 | int spaceH = horizontal ? slider.height() : | 598 | int spaceH = horizontal ? slider.height() : |
591 | slider.height() - decoWidth( widget ) - 4; | 599 | slider.height() - decoWidth( widget ) - 4; |
592 | widget = active ? horizontal ? HScrollDecoDown : VScrollDecoDown : | 600 | widget = active ? horizontal ? HScrollDecoDown : VScrollDecoDown : |
593 | horizontal ? HScrollDeco : VScrollDeco; | 601 | horizontal ? HScrollDeco : VScrollDeco; |
594 | if ( isPixmap( widget ) ) { | 602 | if ( isPixmap( widget ) ) { |
595 | if ( spaceW >= uncached( widget ) ->width() && | 603 | if ( spaceW >= uncached( widget ) ->width() && |
596 | spaceH >= uncached( widget ) ->height() ) { | 604 | spaceH >= uncached( widget ) ->height() ) { |
597 | p->drawPixmap( slider.x() + ( slider.width() - | 605 | p->drawPixmap( slider.x() + ( slider.width() - |
598 | uncached( widget ) ->width() ) / 2, | 606 | uncached( widget ) ->width() ) / 2, |
599 | slider.y() + ( slider.height() - | 607 | slider.y() + ( slider.height() - |
600 | uncached( widget ) ->height() ) / 2, | 608 | uncached( widget ) ->height() ) / 2, |
601 | *uncached( widget ) ); | 609 | *uncached( widget ) ); |
602 | } | 610 | } |
603 | } | 611 | } |
604 | } | 612 | } |
605 | } | 613 | } |
606 | 614 | ||
607 | void OThemeStyle::drawScrollBarGroove( QPainter *p, const QScrollBar *sb, | 615 | void OThemeStyle::drawScrollBarGroove( QPainter *p, const QScrollBar *sb, |
608 | bool horizontal, QRect r, QColorGroup g ) | 616 | bool horizontal, QRect r, QColorGroup g ) |
609 | 617 | ||
610 | { | 618 | { |
611 | WidgetType widget = ( horizontal ) ? HScrollGroove : VScrollGroove; | 619 | WidgetType widget = ( horizontal ) ? HScrollGroove : VScrollGroove; |
612 | if ( !isPixmap( widget ) ) { | 620 | if ( !isPixmap( widget ) ) { |
613 | p->fillRect( r, colorGroup( g, widget ) ->brush( QColorGroup::Background ) ); | 621 | p->fillRect( r, colorGroup( g, widget ) ->brush( QColorGroup::Background ) ); |
614 | } | 622 | } |
615 | else { | 623 | else { |
616 | // If the groove is pixmapped we make a full-sized image (it gets | 624 | // If the groove is pixmapped we make a full-sized image (it gets |
617 | // cached) then bitBlt it to the appropriate rect. | 625 | // cached) then bitBlt it to the appropriate rect. |
618 | QPixmap buffer( sb->size() ); | 626 | QPixmap buffer( sb->size() ); |
619 | QPainter bPainter( &buffer ); | 627 | QPainter bPainter( &buffer ); |
620 | bPainter.drawTiledPixmap( 0, 0, buffer.width(), buffer.height(), | 628 | bPainter.drawTiledPixmap( 0, 0, buffer.width(), buffer.height(), |
621 | *scalePixmap( buffer.width(), buffer.height(), | 629 | *scalePixmap( buffer.width(), buffer.height(), |
622 | widget ) ); | 630 | widget ) ); |
623 | bitBlt( p->device(), r.x(), r.y(), &buffer, r.x(), r.y(), r.width(), | 631 | bitBlt( p->device(), r.x(), r.y(), &buffer, r.x(), r.y(), r.width(), |
624 | r.height(), Qt::CopyROP ); | 632 | r.height(), Qt::CopyROP ); |
625 | } | 633 | } |
626 | // Do the borders and frame | 634 | // Do the borders and frame |
627 | drawShade( p, sb->rect().x(), sb->rect().y(), sb->rect().width(), | 635 | drawShade( p, sb->rect().x(), sb->rect().y(), sb->rect().width(), |
628 | sb->rect().height(), *colorGroup( g, widget ), true, false, | 636 | sb->rect().height(), *colorGroup( g, widget ), true, false, |
629 | highlightWidth( widget ), borderWidth( widget ), shade() ); | 637 | highlightWidth( widget ), borderWidth( widget ), shade() ); |
630 | } | 638 | } |
631 | 639 | ||
632 | void OThemeStyle::scrollBarMetrics( const QScrollBar *sb, int &sliderMin, | 640 | void OThemeStyle::scrollBarMetrics( const QScrollBar *sb, int &sliderMin, |
633 | int &sliderMax, int &sliderLength, | 641 | int &sliderMax, int &sliderLength, |
634 | int &buttonDim ) | 642 | int &buttonDim ) |
635 | { | 643 | { |
636 | bool horizontal = sb->orientation() == QScrollBar::Horizontal; | 644 | bool horizontal = sb->orientation() == QScrollBar::Horizontal; |
637 | int offset = decoWidth( horizontal ? HScrollGroove : VScrollGroove ); | 645 | int offset = decoWidth( horizontal ? HScrollGroove : VScrollGroove ); |
638 | int maxlen; | 646 | int maxlen; |
639 | int len = horizontal ? sb->width() : sb->height(); | 647 | int len = horizontal ? sb->width() : sb->height(); |
640 | int extent = horizontal ? sb->height() : sb->width(); | 648 | int extent = horizontal ? sb->height() : sb->width(); |
641 | 649 | ||
642 | if ( len > ( extent - offset * 2 - 1 ) * 2 + offset * 2 ) | 650 | if ( len > ( extent - offset * 2 - 1 ) * 2 + offset * 2 ) |
643 | buttonDim = extent - offset * 2; | 651 | buttonDim = extent - offset * 2; |
644 | else | 652 | else |
645 | buttonDim = ( len - offset * 2 ) / 2 - 1; | 653 | buttonDim = ( len - offset * 2 ) / 2 - 1; |
646 | maxlen = len - offset * 2 - buttonDim * 2 - 1; | 654 | maxlen = len - offset * 2 - buttonDim * 2 - 1; |
647 | 655 | ||
648 | switch ( scrollBarLayout() ) { | 656 | switch ( scrollBarLayout() ) { |
649 | case SBBottomLeft: | 657 | case SBBottomLeft: |
650 | sliderMin = ( horizontal ) ? buttonDim * 2 + offset + 1 : offset + 1; | 658 | sliderMin = ( horizontal ) ? buttonDim * 2 + offset + 1 : offset + 1; |
651 | break; | 659 | break; |
652 | case SBBottomRight: | 660 | case SBBottomRight: |
653 | sliderMin = offset + 1; | 661 | sliderMin = offset + 1; |
654 | break; | 662 | break; |
655 | case SBOpposite: | 663 | case SBOpposite: |
656 | default: | 664 | default: |
657 | sliderMin = offset + buttonDim; | 665 | sliderMin = offset + buttonDim; |
658 | break; | 666 | break; |
659 | } | 667 | } |
660 | if ( sb->maxValue() == sb->minValue() ) | 668 | if ( sb->maxValue() == sb->minValue() ) |
661 | sliderLength = maxlen; | 669 | sliderLength = maxlen; |
662 | else | 670 | else |
663 | sliderLength = ( sb->pageStep() * maxlen ) / ( sb->maxValue() - | 671 | sliderLength = ( sb->pageStep() * maxlen ) / ( sb->maxValue() - |
664 | sb->minValue() + sb->pageStep() ); | 672 | sb->minValue() + sb->pageStep() ); |
665 | if ( sliderLength < 12 || ( sb->maxValue() - sb->minValue() ) > INT_MAX / 2 ) | 673 | if ( sliderLength < 12 || ( sb->maxValue() - sb->minValue() ) > INT_MAX / 2 ) |
666 | sliderLength = 12; | 674 | sliderLength = 12; |
667 | if ( sliderLength > maxlen ) | 675 | if ( sliderLength > maxlen ) |
668 | sliderLength = maxlen; | 676 | sliderLength = maxlen; |
669 | sliderMax = sliderMin + maxlen - sliderLength; | 677 | sliderMax = sliderMin + maxlen - sliderLength; |
670 | } | 678 | } |
671 | 679 | ||
672 | QStyle::ScrollControl OThemeStyle::scrollBarPointOver( const QScrollBar *sb, | 680 | QStyle::ScrollControl OThemeStyle::scrollBarPointOver( const QScrollBar *sb, |
673 | int sliderStart, | 681 | int sliderStart, |
674 | const QPoint &p ) | 682 | const QPoint &p ) |
675 | { | 683 | { |
676 | if ( !sb->rect().contains( p ) ) | 684 | if ( !sb->rect().contains( p ) ) |
677 | return ( QStyle::NoScroll ); | 685 | return ( QStyle::NoScroll ); |
678 | int sliderMin, sliderMax, sliderLength, buttonDim; | 686 | int sliderMin, sliderMax, sliderLength, buttonDim; |
679 | int pos = ( sb->orientation() == QScrollBar::Horizontal ) ? p.x() : p.y(); | 687 | int pos = ( sb->orientation() == QScrollBar::Horizontal ) ? p.x() : p.y(); |
680 | scrollBarMetrics( sb, sliderMin, sliderMax, sliderLength, buttonDim ); | 688 | scrollBarMetrics( sb, sliderMin, sliderMax, sliderLength, buttonDim ); |
681 | 689 | ||
682 | if ( scrollBarLayout() == SBOpposite ) { | 690 | if ( scrollBarLayout() == SBOpposite ) { |
683 | if ( pos < sliderMin ) | 691 | if ( pos < sliderMin ) |
684 | return QStyle::SubLine; | 692 | return QStyle::SubLine; |
685 | if ( pos < sliderStart ) | 693 | if ( pos < sliderStart ) |
686 | return SubPage; | 694 | return SubPage; |
687 | if ( pos < sliderStart + sliderLength ) | 695 | if ( pos < sliderStart + sliderLength ) |
688 | return QStyle::Slider; | 696 | return QStyle::Slider; |
689 | if ( pos < sliderMax + sliderLength ) | 697 | if ( pos < sliderMax + sliderLength ) |
690 | return QStyle::AddPage; | 698 | return QStyle::AddPage; |
691 | return QStyle::AddLine; | 699 | return QStyle::AddLine; |
692 | } | 700 | } |
693 | if ( scrollBarLayout() == SBBottomLeft && sb->orientation() == | 701 | if ( scrollBarLayout() == SBBottomLeft && sb->orientation() == |
694 | QScrollBar::Horizontal ) { | 702 | QScrollBar::Horizontal ) { |
695 | if ( pos <= buttonDim ) | 703 | if ( pos <= buttonDim ) |
696 | return ( QStyle::SubLine ); | 704 | return ( QStyle::SubLine ); |
697 | else if ( pos <= buttonDim * 2 ) | 705 | else if ( pos <= buttonDim * 2 ) |
698 | return ( QStyle::AddLine ); | 706 | return ( QStyle::AddLine ); |
699 | else if ( pos < sliderStart ) | 707 | else if ( pos < sliderStart ) |
700 | return ( QStyle::SubPage ); | 708 | return ( QStyle::SubPage ); |
701 | else if ( pos < sliderStart + sliderLength ) | 709 | else if ( pos < sliderStart + sliderLength ) |
702 | return ( QStyle::Slider ); | 710 | return ( QStyle::Slider ); |
703 | return ( AddPage ); | 711 | return ( AddPage ); |
704 | } | 712 | } |
705 | else { | 713 | else { |
706 | if ( pos < sliderStart ) | 714 | if ( pos < sliderStart ) |
707 | return QStyle::SubPage; | 715 | return QStyle::SubPage; |
708 | if ( pos < sliderStart + sliderLength ) | 716 | if ( pos < sliderStart + sliderLength ) |
709 | return QStyle::Slider; | 717 | return QStyle::Slider; |
710 | if ( pos < sliderMax + sliderLength ) | 718 | if ( pos < sliderMax + sliderLength ) |
711 | return QStyle::AddPage; | 719 | return QStyle::AddPage; |
712 | if ( pos < sliderMax + sliderLength + buttonDim ) | 720 | if ( pos < sliderMax + sliderLength + buttonDim ) |
713 | return QStyle::SubLine; | 721 | return QStyle::SubLine; |
714 | return QStyle::AddLine; | 722 | return QStyle::AddLine; |
715 | } | 723 | } |
716 | } | 724 | } |
717 | 725 | ||
718 | QSize OThemeStyle::exclusiveIndicatorSize() const | 726 | QSize OThemeStyle::exclusiveIndicatorSize() const |
719 | { | 727 | { |
720 | if ( isPixmap( ExIndicatorOn ) ) | 728 | if ( isPixmap( ExIndicatorOn ) ) |
721 | return ( uncached( ExIndicatorOn ) ->size() ); | 729 | return ( uncached( ExIndicatorOn ) ->size() ); |
722 | else | 730 | else |
723 | return ( QWindowsStyle::exclusiveIndicatorSize() ); | 731 | return ( QWindowsStyle::exclusiveIndicatorSize() ); |
724 | } | 732 | } |
725 | 733 | ||
726 | QSize OThemeStyle::indicatorSize() const | 734 | QSize OThemeStyle::indicatorSize() const |
727 | { | 735 | { |
728 | if ( isPixmap( IndicatorOn ) ) | 736 | if ( isPixmap( IndicatorOn ) ) |
729 | return ( uncached( IndicatorOn ) ->size() ); | 737 | return ( uncached( IndicatorOn ) ->size() ); |
730 | else | 738 | else |
731 | return ( QWindowsStyle::indicatorSize() ); | 739 | return ( QWindowsStyle::indicatorSize() ); |
732 | } | 740 | } |
733 | 741 | ||
734 | void OThemeStyle::drawExclusiveIndicator( QPainter* p, int x, int y, int w, | 742 | void OThemeStyle::drawExclusiveIndicator( QPainter* p, int x, int y, int w, |
735 | int h, const QColorGroup &g, bool on, | 743 | int h, const QColorGroup &g, bool on, |
736 | bool down, bool enabled ) | 744 | bool down, bool enabled ) |
737 | { | 745 | { |
738 | if ( isPixmap( ( on || down ) ? ExIndicatorOn : ExIndicatorOff ) ) { | 746 | if ( isPixmap( ( on || down ) ? ExIndicatorOn : ExIndicatorOff ) ) { |
739 | p->drawPixmap( x, y, *uncached( ( on || down ) ? ExIndicatorOn : | 747 | p->drawPixmap( x, y, *uncached( ( on || down ) ? ExIndicatorOn : |
740 | ExIndicatorOff ) ); | 748 | ExIndicatorOff ) ); |
741 | } | 749 | } |
742 | else { | 750 | else { |
743 | QWindowsStyle::drawExclusiveIndicator( p, x, y, w, h, | 751 | QWindowsStyle::drawExclusiveIndicator( p, x, y, w, h, |
744 | *colorGroup( g, ExIndicatorOn ), | 752 | *colorGroup( g, ExIndicatorOn ), |
745 | on, down, enabled ); | 753 | on, down, enabled ); |
746 | } | 754 | } |
747 | 755 | ||
748 | } | 756 | } |
749 | 757 | ||
750 | void OThemeStyle::drawIndicator( QPainter* p, int x, int y, int w, int h, | 758 | void OThemeStyle::drawIndicator( QPainter* p, int x, int y, int w, int h, |
751 | const QColorGroup &g, int state, bool down, | 759 | const QColorGroup &g, int state, bool down, |
752 | bool enabled ) | 760 | bool enabled ) |
753 | { | 761 | { |
754 | if ( isPixmap( ( down || state != QButton::Off ) ? | 762 | if ( isPixmap( ( down || state != QButton::Off ) ? |
755 | IndicatorOn : IndicatorOff ) ) { | 763 | IndicatorOn : IndicatorOff ) ) { |
756 | p->drawPixmap( x, y, *uncached( ( down || state != QButton::Off ) ? | 764 | p->drawPixmap( x, y, *uncached( ( down || state != QButton::Off ) ? |
757 | IndicatorOn : IndicatorOff ) ); | 765 | IndicatorOn : IndicatorOff ) ); |
758 | } | 766 | } |
759 | else { | 767 | else { |
760 | QWindowsStyle::drawIndicator( p, x, y, w, h, | 768 | QWindowsStyle::drawIndicator( p, x, y, w, h, |
761 | *colorGroup( g, IndicatorOn ), state, | 769 | *colorGroup( g, IndicatorOn ), state, |
762 | down, enabled ); | 770 | down, enabled ); |
763 | } | 771 | } |
764 | } | 772 | } |
765 | 773 | ||
766 | void OThemeStyle::drawExclusiveIndicatorMask( QPainter *p, int x, int y, int w, | 774 | void OThemeStyle::drawExclusiveIndicatorMask( QPainter *p, int x, int y, int w, |
767 | int h, bool on ) | 775 | int h, bool on ) |
768 | { | 776 | { |
769 | if ( isPixmap( ( on ) ? ExIndicatorOn : ExIndicatorOff ) ) { | 777 | if ( isPixmap( ( on ) ? ExIndicatorOn : ExIndicatorOff ) ) { |
770 | const QBitmap * mask = uncached( ( on ) ? ExIndicatorOn : ExIndicatorOff ) -> | 778 | const QBitmap * mask = uncached( ( on ) ? ExIndicatorOn : ExIndicatorOff ) -> |
771 | mask(); | 779 | mask(); |
772 | if ( mask ) { | 780 | if ( mask ) { |
773 | p->drawPixmap( x, y, *mask ); | 781 | p->drawPixmap( x, y, *mask ); |
774 | } | 782 | } |
775 | else | 783 | else |
776 | p->fillRect( x, y, w, h, QBrush( color1, SolidPattern ) ); | 784 | p->fillRect( x, y, w, h, QBrush( color1, SolidPattern ) ); |
777 | } | 785 | } |
778 | else | 786 | else |
779 | QWindowsStyle::drawExclusiveIndicatorMask( p, x, y, w, h, on ); | 787 | QWindowsStyle::drawExclusiveIndicatorMask( p, x, y, w, h, on ); |
780 | } | 788 | } |
781 | 789 | ||
782 | void OThemeStyle::drawIndicatorMask( QPainter *p, int x, int y, int w, int h, | 790 | void OThemeStyle::drawIndicatorMask( QPainter *p, int x, int y, int w, int h, |
783 | int state ) | 791 | int state ) |
784 | { | 792 | { |
785 | if ( isPixmap( ( state != QButton::Off ) ? IndicatorOn : IndicatorOff ) ) { | 793 | if ( isPixmap( ( state != QButton::Off ) ? IndicatorOn : IndicatorOff ) ) { |
786 | const QBitmap * mask = uncached( ( state != QButton::Off ) ? IndicatorOn : | 794 | const QBitmap * mask = uncached( ( state != QButton::Off ) ? IndicatorOn : |
787 | IndicatorOff ) ->mask(); | 795 | IndicatorOff ) ->mask(); |
788 | if ( mask ) | 796 | if ( mask ) |
789 | p->drawPixmap( x, y, *mask ); | 797 | p->drawPixmap( x, y, *mask ); |
790 | else | 798 | else |
791 | p->fillRect( x, y, w, h, QBrush( color1, SolidPattern ) ); | 799 | p->fillRect( x, y, w, h, QBrush( color1, SolidPattern ) ); |
792 | } | 800 | } |
793 | else | 801 | else |
794 | QWindowsStyle::drawIndicatorMask( p, x, y, w, h, state ); | 802 | QWindowsStyle::drawIndicatorMask( p, x, y, w, h, state ); |
795 | } | 803 | } |
796 | 804 | ||
797 | void OThemeStyle::drawSliderGroove( QPainter *p, int x, int y, int w, int h, | 805 | void OThemeStyle::drawSliderGroove( QPainter *p, int x, int y, int w, int h, |
798 | const QColorGroup& g, QCOORD c, | 806 | const QColorGroup& g, QCOORD c, |
799 | Orientation orient ) | 807 | Orientation orient ) |
800 | { | 808 | { |
801 | if ( roundSlider() ) | 809 | if ( roundSlider() ) |
802 | QWindowsStyle::drawSliderGroove( p, x, y, w, h, | 810 | QWindowsStyle::drawSliderGroove( p, x, y, w, h, |
803 | *colorGroup( g, SliderGroove ), | 811 | *colorGroup( g, SliderGroove ), |
804 | c, orient ); | 812 | c, orient ); |
805 | else | 813 | else |
806 | drawBaseButton( p, x, y, w, h, *colorGroup( g, SliderGroove ), true, | 814 | drawBaseButton( p, x, y, w, h, *colorGroup( g, SliderGroove ), true, |
807 | false, SliderGroove ); | 815 | false, SliderGroove ); |
808 | } | 816 | } |
809 | 817 | ||
810 | void OThemeStyle::drawSlider( QPainter *p, int x, int y, int w, int h, | 818 | void OThemeStyle::drawSlider( QPainter *p, int x, int y, int w, int h, |
811 | const QColorGroup &g, Orientation orient, | 819 | const QColorGroup &g, Orientation orient, |
812 | bool tickAbove, bool tickBelow ) | 820 | bool tickAbove, bool tickBelow ) |
813 | { | 821 | { |
814 | if ( isPixmap( Slider ) ) { | 822 | if ( isPixmap( Slider ) ) { |
815 | if ( orient == Qt::Horizontal ) | 823 | if ( orient == Qt::Horizontal ) |
816 | p->drawPixmap( x, y + ( h - uncached( Slider ) ->height() ) / 2, | 824 | p->drawPixmap( x, y + ( h - uncached( Slider ) ->height() ) / 2, |
817 | *uncached( Slider ) ); | 825 | *uncached( Slider ) ); |
818 | else | 826 | else |
819 | p->drawPixmap( x + ( w - uncached( Slider ) ->width() ) / 2, | 827 | p->drawPixmap( x + ( w - uncached( Slider ) ->width() ) / 2, |
820 | y, *uncached( Slider ) ); | 828 | y, *uncached( Slider ) ); |
821 | } | 829 | } |
822 | else { | 830 | else { |
823 | QWindowsStyle::drawSlider( p, x, y, w, h, *colorGroup( g, Slider ), | 831 | QWindowsStyle::drawSlider( p, x, y, w, h, *colorGroup( g, Slider ), |
diff --git a/noncore/styles/theme/othemestyle.h b/noncore/styles/theme/othemestyle.h index 02bec78..52445c4 100644 --- a/noncore/styles/theme/othemestyle.h +++ b/noncore/styles/theme/othemestyle.h | |||
@@ -1,365 +1,371 @@ | |||
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 | #ifndef __KTHEMESTYLE_H | 18 | #ifndef __KTHEMESTYLE_H |
19 | #define __KTHEMESTYLE_H | 19 | #define __KTHEMESTYLE_H |
20 | 20 | ||
21 | #include "othemebase.h" | 21 | #include "othemebase.h" |
22 | #include <qwindowdefs.h> | 22 | #include <qwindowdefs.h> |
23 | #include <qobject.h> | 23 | #include <qobject.h> |
24 | #include <qbutton.h> | 24 | #include <qbutton.h> |
25 | #include <qpushbutton.h> | 25 | #include <qpushbutton.h> |
26 | #include <qscrollbar.h> | 26 | #include <qscrollbar.h> |
27 | #include <qstring.h> | 27 | #include <qstring.h> |
28 | 28 | ||
29 | 29 | ||
30 | /** | 30 | /** |
31 | * KDE themed styles. | 31 | * KDE themed styles. |
32 | * | 32 | * |
33 | * It provides methods for | 33 | * It provides methods for |
34 | * drawing most widgets with user-specified borders, highlights, pixmaps, | 34 | * drawing most widgets with user-specified borders, highlights, pixmaps, |
35 | * etc. It also handles various other settings such as scrollbar types, | 35 | * etc. It also handles various other settings such as scrollbar types, |
36 | * rounded buttons, and shading types. For a full list of parameters this | 36 | * rounded buttons, and shading types. For a full list of parameters this |
37 | * class handles refer to the KDE theme configuration documentation. | 37 | * class handles refer to the KDE theme configuration documentation. |
38 | * | 38 | * |
39 | */ | 39 | */ |
40 | 40 | ||
41 | class OThemeStyle: public OThemeBase | 41 | class OThemeStyle: public OThemeBase |
42 | { | 42 | { |
43 | Q_OBJECT | 43 | Q_OBJECT |
44 | public: | 44 | public: |
45 | /** | 45 | /** |
46 | * Construct a new @ref OThemeStyle object. | 46 | * Construct a new @ref OThemeStyle object. |
47 | * | 47 | * |
48 | * @param configFile A KConfig file to use as the theme configuration. | 48 | * @param configFile A KConfig file to use as the theme configuration. |
49 | * Defaults to ~/.kderc. | 49 | * Defaults to ~/.kderc. |
50 | */ | 50 | */ |
51 | OThemeStyle( const QString &configFile = QString::null ); | 51 | OThemeStyle( const QString &configFile = QString::null ); |
52 | ~OThemeStyle(); | 52 | ~OThemeStyle(); |
53 | virtual void polish( QWidget* ); | 53 | virtual void polish( QWidget* ); |
54 | virtual void unPolish( QWidget* ); | 54 | virtual void unPolish( QWidget* ); |
55 | /** | 55 | /** |
56 | * By default this just sets the background brushes to the pixmapped | 56 | * By default this just sets the background brushes to the pixmapped |
57 | * background. | 57 | * background. |
58 | */ | 58 | */ |
59 | virtual void polish( QApplication *app ); | 59 | virtual void polish( QApplication *app ); |
60 | virtual void unPolish( QApplication* ); | 60 | virtual void unPolish( QApplication* ); |
61 | 61 | ||
62 | /// @internal | 62 | /// @internal |
63 | // to make it possible for derived classes to overload this function | 63 | // to make it possible for derived classes to overload this function |
64 | virtual void polish( QPalette& pal ); | 64 | virtual void polish( QPalette& pal ); |
65 | 65 | ||
66 | /** | 66 | /** |
67 | * This is a convenience method for drawing widgets with | 67 | * This is a convenience method for drawing widgets with |
68 | * borders, highlights, pixmaps, colors, etc... | 68 | * borders, highlights, pixmaps, colors, etc... |
69 | * You specify the widget type and it will draw it according to the | 69 | * You specify the widget type and it will draw it according to the |
70 | * config file settings. | 70 | * config file settings. |
71 | * | 71 | * |
72 | * @param p The QPainter to draw on. | 72 | * @param p The QPainter to draw on. |
73 | * @param g The color group to use. | 73 | * @param g The color group to use. |
74 | * @param rounded @p true if the widget is rounded, @p false if rectangular. | 74 | * @param rounded @p true if the widget is rounded, @p false if rectangular. |
75 | * @param type The widget type to paint. | 75 | * @param type The widget type to paint. |
76 | * @param fill An optional fill brush. Currently ignored (the config file | 76 | * @param fill An optional fill brush. Currently ignored (the config file |
77 | * is used instead). | 77 | * is used instead). |
78 | */ | 78 | */ |
79 | virtual void drawBaseButton( QPainter *p, int x, int y, int w, int h, | 79 | virtual void drawBaseButton( QPainter *p, int x, int y, int w, int h, |
80 | const QColorGroup &g, bool sunken = FALSE, | 80 | const QColorGroup &g, bool sunken = FALSE, |
81 | bool rounded = FALSE, WidgetType type = Bevel, | 81 | bool rounded = FALSE, WidgetType type = Bevel, |
82 | const QBrush *fill = 0 ); | 82 | const QBrush *fill = 0 ); |
83 | /** | 83 | /** |
84 | * Draw a mask with for widgets that may be rounded. | 84 | * Draw a mask with for widgets that may be rounded. |
85 | * | 85 | * |
86 | *Currently used | 86 | *Currently used |
87 | * by pushbuttons and comboboxes. | 87 | * by pushbuttons and comboboxes. |
88 | * | 88 | * |
89 | * @param p The QPainter to draw on. | 89 | * @param p The QPainter to draw on. |
90 | * @param rounded @p true if the widget is rounded, @p false if rectangular. | 90 | * @param rounded @p true if the widget is rounded, @p false if rectangular. |
91 | */ | 91 | */ |
92 | virtual void drawBaseMask( QPainter *p, int x, int y, int w, int h, | 92 | virtual void drawBaseMask( QPainter *p, int x, int y, int w, int h, |
93 | bool rounded ); | 93 | bool rounded ); |
94 | /** | 94 | /** |
95 | * Draw a pushbutton. | 95 | * Draw a pushbutton. |
96 | * | 96 | * |
97 | * This calls @ref drawBaseButton() with @p PushButton as the | 97 | * This calls @ref drawBaseButton() with @p PushButton as the |
98 | * widget type. | 98 | * widget type. |
99 | */ | 99 | */ |
100 | virtual void drawButton( QPainter *p, int x, int y, int w, int h, | 100 | virtual void drawButton( QPainter *p, int x, int y, int w, int h, |
101 | const QColorGroup &g, bool sunken = FALSE, | 101 | const QColorGroup &g, bool sunken = FALSE, |
102 | const QBrush *fill = 0 ); | 102 | const QBrush *fill = 0 ); |
103 | /** | 103 | /** |
104 | * Draw a bevel button. | 104 | * Draw a bevel button. |
105 | * | 105 | * |
106 | * This calls @ref drawBaseButton() with Bevel as the | 106 | * This calls @ref drawBaseButton() with Bevel as the |
107 | * widget type. | 107 | * widget type. |
108 | */ | 108 | */ |
109 | virtual void drawBevelButton( QPainter *p, int x, int y, int w, int h, | 109 | virtual void drawBevelButton( QPainter *p, int x, int y, int w, int h, |
110 | const QColorGroup &g, bool sunken = FALSE, | 110 | const QColorGroup &g, bool sunken = FALSE, |
111 | const QBrush *fill = 0 ); | 111 | const QBrush *fill = 0 ); |
112 | /** | ||
113 | * Draw a toolbar button. | ||
114 | */ | ||
115 | virtual void drawToolButton ( QPainter *p, int x, int y, int w, int h, | ||
116 | const QColorGroup &g, bool sunken = FALSE, | ||
117 | const QBrush *fill = 0 ); | ||
112 | #if 0 | 118 | #if 0 |
113 | /** | 119 | /** |
114 | * Draw a toolbar button. | 120 | * Draw a toolbar button. |
115 | */ | 121 | */ |
116 | virtual void drawKToolBarButton( QPainter *p, int x, int y, int w, int h, | 122 | virtual void drawKToolBarButton( QPainter *p, int x, int y, int w, int h, |
117 | const QColorGroup &g, bool sunken = false, | 123 | const QColorGroup &g, bool sunken = false, |
118 | bool raised = true, bool enabled = true, | 124 | bool raised = true, bool enabled = true, |
119 | bool popup = false, KToolButtonType type = Icon, | 125 | bool popup = false, KToolButtonType type = Icon, |
120 | const QString &btext = QString::null, | 126 | const QString &btext = QString::null, |
121 | const QPixmap *icon = NULL, | 127 | const QPixmap *icon = NULL, |
122 | QFont *font = NULL, QWidget *btn = NULL ); | 128 | QFont *font = NULL, QWidget *btn = NULL ); |
123 | /** | 129 | /** |
124 | * Draw the handle used in toolbars. | 130 | * Draw the handle used in toolbars. |
125 | */ | 131 | */ |
126 | void drawKBarHandle( QPainter *p, int x, int y, int w, int h, | 132 | void drawKBarHandle( QPainter *p, int x, int y, int w, int h, |
127 | const QColorGroup &g, | 133 | const QColorGroup &g, |
128 | KToolBarPos type, QBrush *fill = NULL ); | 134 | KToolBarPos type, QBrush *fill = NULL ); |
129 | 135 | ||
130 | /** | 136 | /** |
131 | * Draw a toolbar. | 137 | * Draw a toolbar. |
132 | */ | 138 | */ |
133 | void drawKToolBar( QPainter *p, int x, int y, int w, int h, | 139 | void drawKToolBar( QPainter *p, int x, int y, int w, int h, |
134 | const QColorGroup &g, KToolBarPos type, | 140 | const QColorGroup &g, KToolBarPos type, |
135 | QBrush *fill = NULL ); | 141 | QBrush *fill = NULL ); |
136 | #endif | 142 | #endif |
137 | /** | 143 | /** |
138 | * Return the space available in a pushbutton, taking configurable | 144 | * Return the space available in a pushbutton, taking configurable |
139 | * borders and highlights into account. | 145 | * borders and highlights into account. |
140 | */ | 146 | */ |
141 | virtual QRect buttonRect( int x, int y, int w, int h ); | 147 | virtual QRect buttonRect( int x, int y, int w, int h ); |
142 | /** | 148 | /** |
143 | * Draw an arrow in the style specified by the config file. | 149 | * Draw an arrow in the style specified by the config file. |
144 | */ | 150 | */ |
145 | virtual void drawArrow( QPainter *p, Qt::ArrowType type, bool down, | 151 | virtual void drawArrow( QPainter *p, Qt::ArrowType type, bool down, |
146 | int x, int y, int w, int h, const QColorGroup &g, | 152 | int x, int y, int w, int h, const QColorGroup &g, |
147 | bool enabled = true, const QBrush *fill = 0 ); | 153 | bool enabled = true, const QBrush *fill = 0 ); |
148 | /** | 154 | /** |
149 | * Return the size of the exclusive indicator pixmap if one is specified | 155 | * Return the size of the exclusive indicator pixmap if one is specified |
150 | * in the config file, otherwise it uses the base style's size. | 156 | * in the config file, otherwise it uses the base style's size. |
151 | */ | 157 | */ |
152 | virtual QSize exclusiveIndicatorSize() const; | 158 | virtual QSize exclusiveIndicatorSize() const; |
153 | /** | 159 | /** |
154 | * Draw an exclusive indicator widget. | 160 | * Draw an exclusive indicator widget. |
155 | * | 161 | * |
156 | * If a pixmap is specified in the | 162 | * If a pixmap is specified in the |
157 | * config file that is used, otherwise the base style's widget is drawn. | 163 | * config file that is used, otherwise the base style's widget is drawn. |
158 | */ | 164 | */ |
159 | virtual void drawExclusiveIndicator( QPainter* p, int x, int y, int w, | 165 | virtual void drawExclusiveIndicator( QPainter* p, int x, int y, int w, |
160 | int h, const QColorGroup &g, bool on, | 166 | int h, const QColorGroup &g, bool on, |
161 | bool down = FALSE, | 167 | bool down = FALSE, |
162 | bool enabled = TRUE ); | 168 | bool enabled = TRUE ); |
163 | /** | 169 | /** |
164 | * Set the mask of an exclusive indicator widget. | 170 | * Set the mask of an exclusive indicator widget. |
165 | * | 171 | * |
166 | * If a pixmap is specified | 172 | * If a pixmap is specified |
167 | * it is masked according to it's transparent pixels, otherwise the | 173 | * it is masked according to it's transparent pixels, otherwise the |
168 | * base style's mask is used. | 174 | * base style's mask is used. |
169 | */ | 175 | */ |
170 | virtual void drawExclusiveIndicatorMask( QPainter *p, int x, int y, int w, | 176 | virtual void drawExclusiveIndicatorMask( QPainter *p, int x, int y, int w, |
171 | int h, bool on ); | 177 | int h, bool on ); |
172 | /** | 178 | /** |
173 | * Set the mask of an indicator widget. | 179 | * Set the mask of an indicator widget. |
174 | * | 180 | * |
175 | * If a pixmap is specified | 181 | * If a pixmap is specified |
176 | * it is masked according to it's transparent pixels, otherwise the | 182 | * it is masked according to it's transparent pixels, otherwise the |
177 | * base style's mask is used. | 183 | * base style's mask is used. |
178 | */ | 184 | */ |
179 | virtual void drawIndicatorMask( QPainter *p, int x, int y, int w, int h, | 185 | virtual void drawIndicatorMask( QPainter *p, int x, int y, int w, int h, |
180 | int state ); | 186 | int state ); |
181 | /** | 187 | /** |
182 | * Set the mask for pushbuttons. | 188 | * Set the mask for pushbuttons. |
183 | */ | 189 | */ |
184 | virtual void drawButtonMask( QPainter *p, int x, int y, int w, int h ); | 190 | virtual void drawButtonMask( QPainter *p, int x, int y, int w, int h ); |
185 | /** | 191 | /** |
186 | * Set the mask for combo boxes. | 192 | * Set the mask for combo boxes. |
187 | */ | 193 | */ |
188 | virtual void drawComboButtonMask( QPainter *p, int x, int y, int w, int h ); | 194 | virtual void drawComboButtonMask( QPainter *p, int x, int y, int w, int h ); |
189 | /** | 195 | /** |
190 | * Return the size of the indicator pixmap if one is specified | 196 | * Return the size of the indicator pixmap if one is specified |
191 | * in the config file, otherwise it uses the base style's size. | 197 | * in the config file, otherwise it uses the base style's size. |
192 | */ | 198 | */ |
193 | virtual QSize indicatorSize() const; | 199 | virtual QSize indicatorSize() const; |
194 | /** | 200 | /** |
195 | * Draw an indicator widget. | 201 | * Draw an indicator widget. |
196 | * | 202 | * |
197 | * If a pixmap is specified in the | 203 | * If a pixmap is specified in the |
198 | * config file that is used, otherwise the base style's widget is drawn. | 204 | * config file that is used, otherwise the base style's widget is drawn. |
199 | */ | 205 | */ |
200 | virtual void drawIndicator( QPainter* p, int x, int y, int w, int h, | 206 | virtual void drawIndicator( QPainter* p, int x, int y, int w, int h, |
201 | const QColorGroup &g, int state, | 207 | const QColorGroup &g, int state, |
202 | bool down = FALSE, bool enabled = TRUE ); | 208 | bool down = FALSE, bool enabled = TRUE ); |
203 | /** | 209 | /** |
204 | * Draw a combobox. | 210 | * Draw a combobox. |
205 | */ | 211 | */ |
206 | virtual void drawComboButton( QPainter *p, int x, int y, int w, int h, | 212 | virtual void drawComboButton( QPainter *p, int x, int y, int w, int h, |
207 | const QColorGroup &g, bool sunken = FALSE, | 213 | const QColorGroup &g, bool sunken = FALSE, |
208 | bool editable = FALSE, bool enabled = TRUE, | 214 | bool editable = FALSE, bool enabled = TRUE, |
209 | const QBrush *fill = 0 ); | 215 | const QBrush *fill = 0 ); |
210 | /** | 216 | /** |
211 | * Draw a pushbutton. | 217 | * Draw a pushbutton. |
212 | */ | 218 | */ |
213 | virtual void drawPushButton( QPushButton* btn, QPainter *p ); | 219 | virtual void drawPushButton( QPushButton* btn, QPainter *p ); |
214 | /** | 220 | /** |
215 | * Return the amount of button content displacement specified by the | 221 | * Return the amount of button content displacement specified by the |
216 | * config file. | 222 | * config file. |
217 | */ | 223 | */ |
218 | virtual void getButtonShift( int &x, int &y ); | 224 | virtual void getButtonShift( int &x, int &y ); |
219 | /** | 225 | /** |
220 | * Return the frame width. | 226 | * Return the frame width. |
221 | */ | 227 | */ |
222 | virtual int defaultFrameWidth() const; | 228 | virtual int defaultFrameWidth() const; |
223 | /** | 229 | /** |
224 | * Calculate the metrics of the scrollbar controls according to the | 230 | * Calculate the metrics of the scrollbar controls according to the |
225 | * layout specified by the config file. | 231 | * layout specified by the config file. |
226 | */ | 232 | */ |
227 | virtual void scrollBarMetrics( const QScrollBar*, int&, int&, int&, int& ); | 233 | virtual void scrollBarMetrics( const QScrollBar*, int&, int&, int&, int& ); |
228 | /** | 234 | /** |
229 | * Draw a themed scrollbar. | 235 | * Draw a themed scrollbar. |
230 | */ | 236 | */ |
231 | virtual void drawScrollBarControls( QPainter*, const QScrollBar*, | 237 | virtual void drawScrollBarControls( QPainter*, const QScrollBar*, |
232 | int sliderStart, uint controls, | 238 | int sliderStart, uint controls, |
233 | uint activeControl ); | 239 | uint activeControl ); |
234 | /** | 240 | /** |
235 | * Return the control that the given point is over according to the | 241 | * Return the control that the given point is over according to the |
236 | * layout in the config file. | 242 | * layout in the config file. |
237 | */ | 243 | */ |
238 | virtual ScrollControl scrollBarPointOver( const QScrollBar*, | 244 | virtual ScrollControl scrollBarPointOver( const QScrollBar*, |
239 | int sliderStart, const QPoint& ); | 245 | int sliderStart, const QPoint& ); |
240 | /** | 246 | /** |
241 | * Return the configurable default slider length. | 247 | * Return the configurable default slider length. |
242 | */ | 248 | */ |
243 | virtual int sliderLength() const; | 249 | virtual int sliderLength() const; |
244 | /** | 250 | /** |
245 | * Draw a slider control. | 251 | * Draw a slider control. |
246 | */ | 252 | */ |
247 | virtual void drawSlider( QPainter *p, int x, int y, int w, int h, | 253 | virtual void drawSlider( QPainter *p, int x, int y, int w, int h, |
248 | const QColorGroup &g, Orientation, bool tickAbove, | 254 | const QColorGroup &g, Orientation, bool tickAbove, |
249 | bool tickBelow ); | 255 | bool tickBelow ); |
250 | /** | 256 | /** |
251 | * Draw a slider groove. | 257 | * Draw a slider groove. |
252 | */ | 258 | */ |
253 | void drawSliderGroove( QPainter *p, int x, int y, int w, int h, | 259 | void drawSliderGroove( QPainter *p, int x, int y, int w, int h, |
254 | const QColorGroup& g, QCOORD c, | 260 | const QColorGroup& g, QCOORD c, |
255 | Orientation ); | 261 | Orientation ); |
256 | /** | 262 | /** |
257 | * Draw the mask for a slider (both the control and groove. | 263 | * Draw the mask for a slider (both the control and groove. |
258 | */ | 264 | */ |
259 | virtual void drawSliderMask( QPainter *p, int x, int y, int w, int h, | 265 | virtual void drawSliderMask( QPainter *p, int x, int y, int w, int h, |
260 | Orientation, bool tickAbove, bool tickBelow ); | 266 | Orientation, bool tickAbove, bool tickBelow ); |
261 | // void drawSliderGrooveMask(QPainter *p,int x, int y, int w, int h, | 267 | // void drawSliderGrooveMask(QPainter *p,int x, int y, int w, int h, |
262 | // QCOORD c, Orientation ); | 268 | // QCOORD c, Orientation ); |
263 | /** | 269 | /** |
264 | * Convience method for drawing themed scrollbar grooves. | 270 | * Convience method for drawing themed scrollbar grooves. |
265 | * | 271 | * |
266 | * Since the | 272 | * Since the |
267 | * grooves may be a scaled pixmap you cannot just bitblt the pixmap at | 273 | * grooves may be a scaled pixmap you cannot just bitblt the pixmap at |
268 | * any offset. This generates a cached pixmap at full size if needed and | 274 | * any offset. This generates a cached pixmap at full size if needed and |
269 | * then copies the requested area. | 275 | * then copies the requested area. |
270 | * | 276 | * |
271 | * @param p The painter to draw on. | 277 | * @param p The painter to draw on. |
272 | * @param sb The scrollbar (usually given by drawScrollBarControls). | 278 | * @param sb The scrollbar (usually given by drawScrollBarControls). |
273 | * @param horizontal Is the scrollBar horizontal? | 279 | * @param horizontal Is the scrollBar horizontal? |
274 | * @param r The rectangle to fill. | 280 | * @param r The rectangle to fill. |
275 | * @param g The color group to use. | 281 | * @param g The color group to use. |
276 | */ | 282 | */ |
277 | virtual void drawScrollBarGroove( QPainter *p, const QScrollBar *sb, | 283 | virtual void drawScrollBarGroove( QPainter *p, const QScrollBar *sb, |
278 | bool horizontal, QRect r, QColorGroup g ); | 284 | bool horizontal, QRect r, QColorGroup g ); |
279 | /** | 285 | /** |
280 | * Draw a shaded rectangle using the given style. | 286 | * Draw a shaded rectangle using the given style. |
281 | * | 287 | * |
282 | * @param p The painter to draw on. | 288 | * @param p The painter to draw on. |
283 | * @param g The color group to use. | 289 | * @param g The color group to use. |
284 | * @param rounded Draws a rounded shape if true. Requires bWidth to be | 290 | * @param rounded Draws a rounded shape if true. Requires bWidth to be |
285 | * at least 1. | 291 | * at least 1. |
286 | * @param hWidth The highlight width. | 292 | * @param hWidth The highlight width. |
287 | * @param bWidth The border width. | 293 | * @param bWidth The border width. |
288 | * @param style The shading style to use. | 294 | * @param style The shading style to use. |
289 | */ | 295 | */ |
290 | virtual void drawShade( QPainter *p, int x, int y, int w, int h, | 296 | virtual void drawShade( QPainter *p, int x, int y, int w, int h, |
291 | const QColorGroup &g, bool sunken, bool rounded, | 297 | const QColorGroup &g, bool sunken, bool rounded, |
292 | int hWidth, int bWidth, ShadeStyle style ); | 298 | int hWidth, int bWidth, ShadeStyle style ); |
293 | /** | 299 | /** |
294 | * Draw the text for a pushbutton. | 300 | * Draw the text for a pushbutton. |
295 | */ | 301 | */ |
296 | virtual void drawPushButtonLabel( QPushButton *btn, QPainter *p ); | 302 | virtual void drawPushButtonLabel( QPushButton *btn, QPainter *p ); |
297 | /** | 303 | /** |
298 | * Draw a menubar. | 304 | * Draw a menubar. |
299 | */ | 305 | */ |
300 | #if 0 | 306 | #if 0 |
301 | 307 | ||
302 | void drawKMenuBar( QPainter *p, int x, int y, int w, int h, | 308 | void drawKMenuBar( QPainter *p, int x, int y, int w, int h, |
303 | const QColorGroup &g, bool macMode, | 309 | const QColorGroup &g, bool macMode, |
304 | QBrush *fill = NULL ); | 310 | QBrush *fill = NULL ); |
305 | #endif | 311 | #endif |
306 | /** | 312 | /** |
307 | * Draw a menubar item. | 313 | * Draw a menubar item. |
308 | */ | 314 | */ |
309 | #if 0 | 315 | #if 0 |
310 | 316 | ||
311 | virtual void drawKMenuItem( QPainter *p, int x, int y, int w, int h, | 317 | virtual void drawKMenuItem( QPainter *p, int x, int y, int w, int h, |
312 | const QColorGroup &g, bool active, | 318 | const QColorGroup &g, bool active, |
313 | QMenuItem *item, QBrush *fill = NULL ); | 319 | QMenuItem *item, QBrush *fill = NULL ); |
314 | #endif | 320 | #endif |
315 | /** | 321 | /** |
316 | * Return the width of the splitter as specified in the config file. | 322 | * Return the width of the splitter as specified in the config file. |
317 | */ | 323 | */ |
318 | virtual int splitterWidth() const; | 324 | virtual int splitterWidth() const; |
319 | /** | 325 | /** |
320 | * Draw a splitter widget. | 326 | * Draw a splitter widget. |
321 | */ | 327 | */ |
322 | virtual void drawSplitter( QPainter *p, int x, int y, int w, int h, | 328 | virtual void drawSplitter( QPainter *p, int x, int y, int w, int h, |
323 | const QColorGroup &g, Orientation ); | 329 | const QColorGroup &g, Orientation ); |
324 | /** | 330 | /** |
325 | * Draw a checkmark. | 331 | * Draw a checkmark. |
326 | */ | 332 | */ |
327 | virtual void drawCheckMark( QPainter *p, int x, int y, int w, int h, | 333 | virtual void drawCheckMark( QPainter *p, int x, int y, int w, int h, |
328 | const QColorGroup &g, bool act, bool dis ); | 334 | const QColorGroup &g, bool act, bool dis ); |
329 | /** | 335 | /** |
330 | * Draw a menu item. | 336 | * Draw a menu item. |
331 | * | 337 | * |
332 | * Note: This method manually handles applying | 338 | * Note: This method manually handles applying |
333 | * inactive menu backgrounds to the entire widget. | 339 | * inactive menu backgrounds to the entire widget. |
334 | */ | 340 | */ |
335 | virtual void drawPopupMenuItem( QPainter *p, bool checkable, int maxpmw, | 341 | virtual void drawPopupMenuItem( QPainter *p, bool checkable, int maxpmw, |
336 | int tab, QMenuItem *mi, const QPalette &pal, | 342 | int tab, QMenuItem *mi, const QPalette &pal, |
337 | bool act, bool enabled, int x, int y, int w, | 343 | bool act, bool enabled, int x, int y, int w, |
338 | int h ); | 344 | int h ); |
339 | int popupMenuItemHeight( bool checkable, QMenuItem *mi, | 345 | int popupMenuItemHeight( bool checkable, QMenuItem *mi, |
340 | const QFontMetrics &fm ); | 346 | const QFontMetrics &fm ); |
341 | /** | 347 | /** |
342 | * Draw the focus rectangle. | 348 | * Draw the focus rectangle. |
343 | */ | 349 | */ |
344 | void drawFocusRect( QPainter *p, const QRect &r, const QColorGroup &g, | 350 | void drawFocusRect( QPainter *p, const QRect &r, const QColorGroup &g, |
345 | const QColor *c = 0, bool atBorder = false ); | 351 | const QColor *c = 0, bool atBorder = false ); |
346 | /** | 352 | /** |
347 | * Draw a @ref KProgess bar. | 353 | * Draw a @ref KProgess bar. |
348 | */ | 354 | */ |
349 | // virtual void drawKProgressBlock(QPainter *p, int x, int y, int w, int h, | 355 | // virtual void drawKProgressBlock(QPainter *p, int x, int y, int w, int h, |
350 | // const QColorGroup &g, QBrush *fill); | 356 | // const QColorGroup &g, QBrush *fill); |
351 | /** | 357 | /** |
352 | * Return the background for @ref KProgress. | 358 | * Return the background for @ref KProgress. |
353 | */ | 359 | */ |
354 | // virtual void getKProgressBackground(const QColorGroup &g, QBrush &bg); | 360 | // virtual void getKProgressBackground(const QColorGroup &g, QBrush &bg); |
355 | virtual void tabbarMetrics( const QTabBar*, int&, int&, int& ); | 361 | virtual void tabbarMetrics( const QTabBar*, int&, int&, int& ); |
356 | virtual void drawTab( QPainter*, const QTabBar*, QTab*, bool selected ); | 362 | virtual void drawTab( QPainter*, const QTabBar*, QTab*, bool selected ); |
357 | virtual void drawTabMask( QPainter*, const QTabBar*, QTab*, bool selected ); | 363 | virtual void drawTabMask( QPainter*, const QTabBar*, QTab*, bool selected ); |
358 | protected: | 364 | protected: |
359 | QPalette oldPalette, popupPalette, indiPalette, exIndiPalette; | 365 | QPalette oldPalette, popupPalette, indiPalette, exIndiPalette; |
360 | 366 | ||
361 | class OThemeStylePrivate; | 367 | class OThemeStylePrivate; |
362 | OThemeStylePrivate *d; | 368 | OThemeStylePrivate *d; |
363 | }; | 369 | }; |
364 | 370 | ||
365 | #endif | 371 | #endif |