summaryrefslogtreecommitdiff
path: root/noncore/styles/flat
Unidiff
Diffstat (limited to 'noncore/styles/flat') (more/less context) (show whitespace changes)
-rw-r--r--noncore/styles/flat/flat.cpp102
-rw-r--r--noncore/styles/flat/flat.h6
2 files changed, 91 insertions, 17 deletions
diff --git a/noncore/styles/flat/flat.cpp b/noncore/styles/flat/flat.cpp
index b6635c5..24366f6 100644
--- a/noncore/styles/flat/flat.cpp
+++ b/noncore/styles/flat/flat.cpp
@@ -15,29 +15,32 @@
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20 20
21#include "flat.h" 21#include <qtopia/qpeapplication.h>
22#include <qpe/qpeapplication.h>
23#include <qpushbutton.h> 22#include <qpushbutton.h>
24#include <qtoolbutton.h> 23#include <qtoolbutton.h>
25#include <qpainter.h> 24#include <qpainter.h>
26#include <qfontmetrics.h> 25#include <qfontmetrics.h>
27#include <qpalette.h> 26#include <qpalette.h>
28#include <qdrawutil.h> 27#include <qdrawutil.h>
29#include <qscrollbar.h> 28#include <qscrollbar.h>
30#include <qbutton.h> 29#include <qbutton.h>
31#include <qframe.h> 30#include <qframe.h>
32#include <qtabbar.h> 31#include <qtabbar.h>
33#include <qspinbox.h> 32#include <qspinbox.h>
34#include <qlineedit.h> 33#include <qlineedit.h>
34#include <qmap.h>
35 35
36#define INCLUDE_MENUITEM_DEF 36#define INCLUDE_MENUITEM_DEF
37#include <qmenudata.h> 37#include <qmenudata.h>
38#include <qpopupmenu.h>
39
40#include "flat.h"
38 41
39#define QCOORDARRLEN(x) sizeof(x)/(sizeof(QCOORD)*2) 42#define QCOORDARRLEN(x) sizeof(x)/(sizeof(QCOORD)*2)
40 43
41class SpinBoxHack : public QSpinBox 44class SpinBoxHack : public QSpinBox
42{ 45{
43public: 46public:
@@ -51,29 +54,43 @@ class FlatStylePrivate : public QObject
51{ 54{
52 Q_OBJECT 55 Q_OBJECT
53public: 56public:
54 FlatStylePrivate() : QObject() {} 57 FlatStylePrivate() : QObject() {}
55 58
56 bool eventFilter( QObject *o, QEvent *e ) { 59 bool eventFilter( QObject *o, QEvent *e ) {
57 if ( e->type() == QEvent::ParentPaletteChange && o->inherits( "QMenuBar" ) ) { 60 if ( e->type() == QEvent::ParentPaletteChange ) {
61 if ( o->inherits( "QMenuBar" ) ) {
58 QWidget *w = (QWidget *)o; 62 QWidget *w = (QWidget *)o;
59 if ( w->parentWidget() ) { 63 if ( w->parentWidget() ) {
60 QPalette p = w->parentWidget()->palette(); 64 QPalette p = w->parentWidget()->palette();
61 QColorGroup a = p.active(); 65 QColorGroup a = p.active();
62 a.setColor( QColorGroup::Light, a.foreground() ); 66 a.setColor( QColorGroup::Light, a.foreground() );
63 a.setColor( QColorGroup::Dark, a.foreground() ); 67 a.setColor( QColorGroup::Dark, a.foreground() );
64 p.setActive( a ); 68 p.setActive( a );
65 p.setInactive( a ); 69 p.setInactive( a );
66 w->setPalette( p ); 70 w->setPalette( p );
67 } 71 }
72 } else if ( o->inherits( "QHeader" ) ) {
73 QWidget *w = (QWidget *)o;
74 if ( w->parentWidget() ) {
75 QPalette p = w->parentWidget()->palette();
76 QColorGroup a = p.active();
77 a.setColor( QColorGroup::Light, a.button() );
78 p.setActive( a );
79 p.setInactive( a );
80 w->setPalette( p );
81 }
82 }
68 } 83 }
69 return FALSE; 84 return FALSE;
70 } 85 }
86
87 QMap<QFrame *,int> frameStyles;
71}; 88};
72 89
73FlatStyle::FlatStyle() : revItem(FALSE) 90FlatStyle::FlatStyle() : revItem(FALSE), fillBtnBorder(FALSE)
74{ 91{
75 setButtonMargin(3); 92 setButtonMargin(3);
76 setScrollBarExtent(13,13); 93 setScrollBarExtent(13,13);
77 setButtonDefaultIndicatorWidth(0); 94 setButtonDefaultIndicatorWidth(0);
78 d = new FlatStylePrivate; 95 d = new FlatStylePrivate;
79} 96}
@@ -98,13 +115,15 @@ void FlatStyle::polish ( QPalette & )
98} 115}
99 116
100void FlatStyle::polish( QWidget *w ) 117void FlatStyle::polish( QWidget *w )
101{ 118{
102 if ( w->inherits( "QFrame" ) ) { 119 if ( w->inherits( "QFrame" ) ) {
103 QFrame *f = (QFrame *)w; 120 QFrame *f = (QFrame *)w;
104 if ( f->frameShape() != QFrame::NoFrame ) 121 if ( f->frameShape() == QFrame::HLine || f->frameShape() == QFrame::VLine )
122 f->setFrameShadow( QFrame::Plain );
123 else if ( f->frameShape() != QFrame::NoFrame )
105 f->setFrameShape( QFrame::StyledPanel ); 124 f->setFrameShape( QFrame::StyledPanel );
106 f->setLineWidth( 1 ); 125 f->setLineWidth( 1 );
107 } 126 }
108 if ( w->inherits( "QSpinBox" ) ) 127 if ( w->inherits( "QSpinBox" ) )
109 ((SpinBoxHack*)w)->setFlatButtons( TRUE ); 128 ((SpinBoxHack*)w)->setFlatButtons( TRUE );
110 if ( w->inherits( "QMenuBar" ) ) { 129 if ( w->inherits( "QMenuBar" ) ) {
@@ -114,34 +133,46 @@ void FlatStyle::polish( QWidget *w )
114 a.setColor( QColorGroup::Light, a.foreground() ); 133 a.setColor( QColorGroup::Light, a.foreground() );
115 a.setColor( QColorGroup::Dark, a.foreground() ); 134 a.setColor( QColorGroup::Dark, a.foreground() );
116 p.setActive( a ); 135 p.setActive( a );
117 p.setInactive( a ); 136 p.setInactive( a );
118 w->setPalette( p ); 137 w->setPalette( p );
119 w->installEventFilter( d ); 138 w->installEventFilter( d );
139 } else if ( w->inherits( "QHeader" ) ) {
140 // make headers look flat
141 QPalette p = w->palette();
142 QColorGroup a = p.active();
143 a.setColor( QColorGroup::Light, a.button() );
144 p.setActive( a );
145 p.setInactive( a );
146 w->setPalette( p );
147 w->installEventFilter( d );
120 } 148 }
121} 149}
122 150
123void FlatStyle::unPolish( QWidget *w ) 151void FlatStyle::unPolish( QWidget *w )
124{ 152{
125 if ( w->inherits( "QFrame" ) ) { 153 if ( w->inherits( "QFrame" ) ) {
126 QFrame *f = (QFrame *)w; 154 QFrame *f = (QFrame *)w;
127 if ( f->frameShape() != QFrame::NoFrame ) 155 if ( f->frameShape() == QFrame::HLine || f->frameShape() == QFrame::VLine ) {
156 f->setFrameShadow( QFrame::Sunken );
157 } else if ( f->frameShape() != QFrame::NoFrame ) {
128 f->setFrameShape( QFrame::StyledPanel ); 158 f->setFrameShape( QFrame::StyledPanel );
129 f->setLineWidth( 2 ); 159 f->setLineWidth( 2 );
130 } 160 }
161 }
131 if ( w->inherits( "QSpinBox" ) ) 162 if ( w->inherits( "QSpinBox" ) )
132 ((SpinBoxHack*)w)->setFlatButtons( FALSE ); 163 ((SpinBoxHack*)w)->setFlatButtons( FALSE );
133 if ( w->inherits( "QMenuBar" ) ) { 164 if ( w->inherits("QMenuBar") || w->inherits("QHeader") ) {
134 w->unsetPalette(); 165 w->unsetPalette();
135 w->removeEventFilter( d ); 166 w->removeEventFilter( d );
136 } 167 }
137} 168}
138 169
139int FlatStyle::defaultFrameWidth() const 170int FlatStyle::defaultFrameWidth() const
140{ 171{
141 return 1; 172 return 2;
142} 173}
143 174
144void FlatStyle::drawItem( QPainter *p, int x, int y, int w, int h, 175void FlatStyle::drawItem( QPainter *p, int x, int y, int w, int h,
145 int flags, const QColorGroup &g, bool enabled, 176 int flags, const QColorGroup &g, bool enabled,
146 const QPixmap *pixmap, const QString& text, int len, 177 const QPixmap *pixmap, const QString& text, int len,
147 const QColor* penColor ) 178 const QColor* penColor )
@@ -168,22 +199,36 @@ void FlatStyle::drawPanel ( QPainter * p, int x, int y, int w, int h,
168 199
169void FlatStyle::drawButton( QPainter *p, int x, int y, int w, int h, 200void FlatStyle::drawButton( QPainter *p, int x, int y, int w, int h,
170 const QColorGroup &cg, bool /*sunken*/, const QBrush* fill ) 201 const QColorGroup &cg, bool /*sunken*/, const QBrush* fill )
171{ 202{
172 QPen oldPen = p->pen(); 203 QPen oldPen = p->pen();
173 204
205 int x2 = x+w-1;
206 int y2 = y+h-1;
207
208 if ( fillBtnBorder && btnBg != cg.color(QColorGroup::Button) ) {
209 p->setPen( btnBg );
210 p->drawLine( x, y, x2, y );
211 p->drawLine( x, y2, x2, y2 );
212 p->drawLine( x, y+1, x, y2-1 );
213 p->drawLine( x2, y+1, x2, y2-1 );
214 p->fillRect( x+1, y+1, 3, 3, btnBg );
215 p->fillRect( x+1, y2-3, 3, 3, btnBg );
216 p->fillRect( x2-3, y2-3, 3, 3, btnBg );
217 p->fillRect( x2-3, y+1, 3, 3, btnBg );
218 p->fillRect( x+2, y+2, w-4, h-4, fill?(*fill):cg.brush(QColorGroup::Button) );
219 } else {
220 p->fillRect( x+1, y+1, w-2, h-2, fill?(*fill):cg.brush(QColorGroup::Button) );
221 }
222
174 if ( h >= 10 ) { 223 if ( h >= 10 ) {
175 x++; y++; 224 x++; y++;
225 x2--; y2--;
176 w -= 2; h -= 2; 226 w -= 2; h -= 2;
177 } 227 }
178 228
179 p->fillRect( x+1, y+1, w-2, h-2, fill?(*fill):cg.brush(QColorGroup::Button) );
180
181 int x2 = x+w-1;
182 int y2 = y+h-1;
183
184 p->setPen( cg.foreground() ); 229 p->setPen( cg.foreground() );
185 230
186 if ( h < 10 ) { 231 if ( h < 10 ) {
187 p->setBrush( NoBrush ); 232 p->setBrush( NoBrush );
188 p->drawRect( x, y, w, h ); 233 p->drawRect( x, y, w, h );
189 } else { 234 } else {
@@ -222,18 +267,29 @@ void FlatStyle::drawBevelButton( QPainter *p, int x, int y, int w, int h,
222 p->drawRect( x, y, w, h ); 267 p->drawRect( x, y, w, h );
223} 268}
224 269
225void FlatStyle::drawToolButton( QPainter *p, int x, int y, int w, int h, 270void FlatStyle::drawToolButton( QPainter *p, int x, int y, int w, int h,
226 const QColorGroup &g, bool sunken, const QBrush* fill ) 271 const QColorGroup &g, bool sunken, const QBrush* fill )
227{ 272{
273 if ( p->device()->devType() == QInternal::Widget ) {
274 QWidget *w = (QWidget *)p->device();
275 if ( w->isA("QToolButton") ) {
276 QToolButton *btn = (QToolButton *)w;
277 if ( btn->parentWidget() ) {
278 btnBg = btn->parentWidget()->backgroundColor();
279 fillBtnBorder = TRUE;
280 }
281 }
282 }
228 QBrush fb( fill ? *fill : g.button() ); 283 QBrush fb( fill ? *fill : g.button() );
229 if ( sunken && fb == g.brush( QColorGroup::Button ) ) { 284 if ( sunken && fb == g.brush( QColorGroup::Button ) ) {
230 fb = g.buttonText(); 285 fb = g.buttonText();
231 revItem = TRUE;// ugh 286 revItem = TRUE;// ugh
232 } 287 }
233 drawButton( p, x, y, w, h, g, sunken, &fb ); 288 drawButton( p, x, y, w, h, g, sunken, &fb );
289 fillBtnBorder = FALSE;
234} 290}
235 291
236void FlatStyle::drawPushButton( QPushButton *btn, QPainter *p ) 292void FlatStyle::drawPushButton( QPushButton *btn, QPainter *p )
237{ 293{
238 QColorGroup g = btn->colorGroup(); 294 QColorGroup g = btn->colorGroup();
239 int x1, y1, x2, y2; 295 int x1, y1, x2, y2;
@@ -254,12 +310,17 @@ void FlatStyle::drawPushButton( QPushButton *btn, QPainter *p )
254 y1 += diw; 310 y1 += diw;
255 x2 -= diw; 311 x2 -= diw;
256 y2 -= diw; 312 y2 -= diw;
257 } 313 }
258 */ 314 */
259 315
316 if ( btn->parentWidget() ) {
317 btnBg = btn->parentWidget()->backgroundColor();
318 fillBtnBorder = TRUE;
319 }
320
260 bool clearButton = TRUE; 321 bool clearButton = TRUE;
261 if ( btn->isDown() ) { 322 if ( btn->isDown() ) {
262 drawButton( p, x1, y1, x2-x1+1, y2-y1+1, g, TRUE, 323 drawButton( p, x1, y1, x2-x1+1, y2-y1+1, g, TRUE,
263 &g.brush( QColorGroup::Text ) ); 324 &g.brush( QColorGroup::Text ) );
264 } else { 325 } else {
265 if ( btn->isToggleButton() && btn->isOn() && btn->isEnabled() ) { 326 if ( btn->isToggleButton() && btn->isOn() && btn->isEnabled() ) {
@@ -280,12 +341,13 @@ void FlatStyle::drawPushButton( QPushButton *btn, QPainter *p )
280 g.brush( QColorGroup::Button ) ); 341 g.brush( QColorGroup::Button ) );
281 if (btn->isDown()) 342 if (btn->isDown())
282 p->setBrushOrigin(p->brushOrigin() - QPoint(1,1)); 343 p->setBrushOrigin(p->brushOrigin() - QPoint(1,1));
283 } 344 }
284 */ 345 */
285 346
347 fillBtnBorder = FALSE;
286 if ( p->brush().style() != NoBrush ) 348 if ( p->brush().style() != NoBrush )
287 p->setBrush( NoBrush ); 349 p->setBrush( NoBrush );
288} 350}
289 351
290void FlatStyle::drawPushButtonLabel( QPushButton *btn, QPainter *p ) 352void FlatStyle::drawPushButtonLabel( QPushButton *btn, QPainter *p )
291{ 353{
@@ -586,13 +648,14 @@ void FlatStyle::drawScrollBarControls( QPainter* p, const QScrollBar* sb, int sl
586 648
587 649
588 p->setPen( g.foreground() ); 650 p->setPen( g.foreground() );
589 p->setBrush( g.brush( QColorGroup::Mid ) ); 651 p->setBrush( g.brush( QColorGroup::Mid ) );
590 if ( controls & SubPage ) 652 if ( controls & SubPage )
591 p->drawRect( subPageR.x(), subPageR.y(), subPageR.width(), subPageR.height() ); 653 p->drawRect( subPageR.x(), subPageR.y(), subPageR.width(), subPageR.height() );
592 if ( controls & AddPage && addPageR.y() < addPageR.bottom() ) 654 if ( controls & AddPage && addPageR.y() < addPageR.bottom() &&
655 addPageR.x() < addPageR.right() )
593 p->drawRect( addPageR.x(), addPageR.y(), addPageR.width(), addPageR.height() ); 656 p->drawRect( addPageR.x(), addPageR.y(), addPageR.width(), addPageR.height() );
594 if ( controls & Slider ) { 657 if ( controls & Slider ) {
595 QPoint bo = p->brushOrigin(); 658 QPoint bo = p->brushOrigin();
596 p->setBrushOrigin(sliderR.topLeft()); 659 p->setBrushOrigin(sliderR.topLeft());
597 p->setPen( g.foreground() ); 660 p->setPen( g.foreground() );
598 p->setBrush( g.button() ); 661 p->setBrush( g.button() );
@@ -781,12 +844,18 @@ static const int motifItemVMargin = 2; // menu item ver text margin
781 static const int motifArrowHMargin = 0;// arrow horizontal margin 844 static const int motifArrowHMargin = 0;// arrow horizontal margin
782 static const int motifTabSpacing = 12;// space between text and tab 845 static const int motifTabSpacing = 12;// space between text and tab
783 static const int motifCheckMarkHMargin = 1;// horiz. margins of check mark 846 static const int motifCheckMarkHMargin = 1;// horiz. margins of check mark
784 static const int windowsRightBorder= 8; // right border on windows 847 static const int windowsRightBorder= 8; // right border on windows
785static const int windowsCheckMarkWidth = 2; // checkmarks width on windows 848static const int windowsCheckMarkWidth = 2; // checkmarks width on windows
786 849
850void FlatStyle::polishPopupMenu ( QPopupMenu *m )
851{
852 QWindowsStyle::polishPopupMenu( m );
853 m->setLineWidth( 1 );
854}
855
787/*! \reimp 856/*! \reimp
788*/ 857*/
789int FlatStyle::extraPopupMenuItemWidth( bool checkable, int maxpmw, QMenuItem* mi, const QFontMetrics& /*fm*/ ) 858int FlatStyle::extraPopupMenuItemWidth( bool checkable, int maxpmw, QMenuItem* mi, const QFontMetrics& /*fm*/ )
790{ 859{
791#ifndef QT_NO_MENUDATA 860#ifndef QT_NO_MENUDATA
792 int w = 2*motifItemHMargin + 2*motifItemFrame; // a little bit of border can never harm 861 int w = 2*motifItemHMargin + 2*motifItemFrame; // a little bit of border can never harm
@@ -1005,24 +1074,25 @@ QStyle *FlatStyleImpl::style()
1005 flat = new FlatStyle(); 1074 flat = new FlatStyle();
1006 return flat; 1075 return flat;
1007} 1076}
1008 1077
1009QString FlatStyleImpl::name() const 1078QString FlatStyleImpl::name() const
1010{ 1079{
1011 return QString("Flat"); 1080 return qApp->translate("FlatStyle", "Flat", "Name of the style Flat");
1012} 1081}
1013 1082
1014QRESULT FlatStyleImpl::queryInterface( const QUuid &uuid, QUnknownInterface **iface ) 1083QRESULT FlatStyleImpl::queryInterface( const QUuid &uuid, QUnknownInterface **iface )
1015{ 1084{
1016 *iface = 0; 1085 *iface = 0;
1017 if ( uuid == IID_QUnknown ) 1086 if ( uuid == IID_QUnknown )
1018 *iface = this; 1087 *iface = this;
1019 else if ( uuid == IID_Style ) 1088 else if ( uuid == IID_Style )
1020 *iface = this; 1089 *iface = this;
1090 else
1091 return QS_FALSE;
1021 1092
1022 if ( *iface )
1023 (*iface)->addRef(); 1093 (*iface)->addRef();
1024 return QS_OK; 1094 return QS_OK;
1025} 1095}
1026 1096
1027Q_EXPORT_INTERFACE() 1097Q_EXPORT_INTERFACE()
1028{ 1098{
diff --git a/noncore/styles/flat/flat.h b/noncore/styles/flat/flat.h
index e446800..ebea95b 100644
--- a/noncore/styles/flat/flat.h
+++ b/noncore/styles/flat/flat.h
@@ -18,18 +18,19 @@
18** 18**
19**********************************************************************/ 19**********************************************************************/
20 20
21#ifndef FLATSTYLE_H 21#ifndef FLATSTYLE_H
22#define FLATSTYLE_H 22#define FLATSTYLE_H
23 23
24#include <qcolor.h>
24#include <qwindowsstyle.h> 25#include <qwindowsstyle.h>
25#include <qpe/styleinterface.h> 26#include <qpe/styleinterface.h>
26 27
27class FlatStylePrivate; 28class FlatStylePrivate;
28 29
29class Q_EXPORT FlatStyle : public QWindowsStyle 30class FlatStyle : public QWindowsStyle
30{ 31{
31public: 32public:
32 FlatStyle(); 33 FlatStyle();
33 virtual ~FlatStyle(); 34 virtual ~FlatStyle();
34 virtual void polish( QPalette &p ); 35 virtual void polish( QPalette &p );
35 virtual void polish( QWidget *w ); 36 virtual void polish( QWidget *w );
@@ -70,12 +71,13 @@ public:
70 void drawSliderMask( QPainter *p, int x, int y, int w, int h, 71 void drawSliderMask( QPainter *p, int x, int y, int w, int h,
71 Orientation, bool tickAbove, bool tickBelow ); 72 Orientation, bool tickAbove, bool tickBelow );
72 void drawSliderGrooveMask( QPainter *p, int x, int y, int w, int h, 73 void drawSliderGrooveMask( QPainter *p, int x, int y, int w, int h,
73 const QColorGroup& , QCOORD c, Orientation orient ); 74 const QColorGroup& , QCOORD c, Orientation orient );
74 void drawSliderGroove ( QPainter * p, int x, int y, int w, int h, const QColorGroup & g, QCOORD c, Orientation ); 75 void drawSliderGroove ( QPainter * p, int x, int y, int w, int h, const QColorGroup & g, QCOORD c, Orientation );
75 void drawTab( QPainter *, const QTabBar *, QTab *, bool selected ); 76 void drawTab( QPainter *, const QTabBar *, QTab *, bool selected );
77 void polishPopupMenu ( QPopupMenu * );
76 int extraPopupMenuItemWidth( bool checkable, int maxpmw, QMenuItem*, const QFontMetrics& ); 78 int extraPopupMenuItemWidth( bool checkable, int maxpmw, QMenuItem*, const QFontMetrics& );
77 int popupMenuItemHeight( bool checkable, QMenuItem*, const QFontMetrics& ); 79 int popupMenuItemHeight( bool checkable, QMenuItem*, const QFontMetrics& );
78 void drawPopupMenuItem( QPainter* p, bool checkable, int maxpmw, int tab, QMenuItem* mi, 80 void drawPopupMenuItem( QPainter* p, bool checkable, int maxpmw, int tab, QMenuItem* mi,
79 const QPalette& pal, 81 const QPalette& pal,
80 bool act, bool enabled, int x, int y, int w, int h); 82 bool act, bool enabled, int x, int y, int w, int h);
81 83
@@ -83,12 +85,14 @@ public:
83 QSize scrollBarExtent() const; 85 QSize scrollBarExtent() const;
84 void getButtonShift( int &x, int &y ); 86 void getButtonShift( int &x, int &y );
85 87
86private: 88private:
87 FlatStylePrivate *d; 89 FlatStylePrivate *d;
88 bool revItem; 90 bool revItem;
91 bool fillBtnBorder;
92 QColor btnBg;
89 // Disabled copy constructor and operator= 93 // Disabled copy constructor and operator=
90#if defined(Q_DISABLE_COPY) 94#if defined(Q_DISABLE_COPY)
91 FlatStyle( const FlatStyle & ); 95 FlatStyle( const FlatStyle & );
92 FlatStyle& operator=( const FlatStyle & ); 96 FlatStyle& operator=( const FlatStyle & );
93#endif 97#endif
94}; 98};