summaryrefslogtreecommitdiffstats
path: root/src/styles/qcompactstyle.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/styles/qcompactstyle.cpp')
-rw-r--r--src/styles/qcompactstyle.cpp111
1 files changed, 92 insertions, 19 deletions
diff --git a/src/styles/qcompactstyle.cpp b/src/styles/qcompactstyle.cpp
index 7c7e0f5..63c5be5 100644
--- a/src/styles/qcompactstyle.cpp
+++ b/src/styles/qcompactstyle.cpp
@@ -67,6 +67,12 @@ int QCompactStyle::pixelMetric( PixelMetric metric, QStyleControlElementData ceD
case PM_MaximumDragDistance:
ret = -1;
break;
+ case PM_MenuIndicatorFrameHBorder:
+ case PM_MenuIndicatorFrameVBorder:
+ case PM_MenuIconIndicatorFrameHBorder:
+ case PM_MenuIconIndicatorFrameVBorder:
+ ret = 0;
+ break;
default:
ret = QWindowsStyle::pixelMetric( metric, ceData, elementFlags, widget );
break;
@@ -189,13 +195,7 @@ void QCompactStyle::drawControl( ControlElement element, QPainter *p, QStyleCont
return;
if ( mi->isChecked() ) {
- if ( act && !dis ) {
- qDrawShadePanel( p, x, y, checkcol, h,
- g, TRUE, 1, &g.brush( QColorGroup::Button ) );
- } else {
- qDrawShadePanel( p, x, y, checkcol, h,
- g, TRUE, 1, &g.brush( QColorGroup::Midlight ) );
- }
+ drawPrimitive( PE_MenuItemIndicatorFrame, p, ceData, elementFlags, r, itemg, flags, opt );
} else if ( !act ) {
p->fillRect(x, y, checkcol , h,
g.brush( QColorGroup::Button ));
@@ -214,7 +214,7 @@ void QCompactStyle::drawControl( ControlElement element, QPainter *p, QStyleCont
int pixh = pixmap.height();
if ( act && !dis ) {
if ( !mi->isChecked() )
- qDrawShadePanel( p, x, y, checkcol, h, g, FALSE, 1, &g.brush( QColorGroup::Button ) );
+ drawPrimitive( PE_MenuItemIndicatorIconFrame, p, ceData, elementFlags, r, itemg, flags, opt );
}
QRect cr( x, y, checkcol, h );
QRect pmr( 0, 0, pixw, pixh );
@@ -226,18 +226,8 @@ void QCompactStyle::drawControl( ControlElement element, QPainter *p, QStyleCont
g.brush( QColorGroup::Button );
p->fillRect( x+checkcol + 1, y, w - checkcol - 1, h, fill);
} else if ( checkable ) { // just "checking"...
- int mw = checkcol + motifItemFrame;
- int mh = h - 2*motifItemFrame;
if ( mi->isChecked() ) {
-
- SFlags cflags = Style_Default;
- if (! dis)
- cflags |= Style_Enabled;
- if (act)
- cflags |= Style_On;
-
- drawPrimitive( PE_CheckMark, p, ceData, elementFlags, QRect(x + motifItemFrame + 2, y + motifItemFrame,
- mw, mh), itemg, cflags, opt );
+ drawPrimitive( PE_MenuItemIndicatorCheck, p, ceData, elementFlags, r, itemg, flags, opt );
}
}
@@ -319,4 +309,87 @@ void QCompactStyle::drawControl( ControlElement element, QPainter *p, QStyleCont
}
}
+/*! \reimp */
+void QCompactStyle::drawPrimitive( PrimitiveElement pe,
+ QPainter *p,
+ QStyleControlElementData ceData,
+ ControlElementFlags elementFlags,
+ const QRect &r,
+ const QColorGroup &cg,
+ SFlags flags,
+ const QStyleOption& opt ) const
+{
+ bool dis = !(flags & Style_Enabled);
+ bool act = flags & Style_Active;
+
+ int x, y, w, h;
+ r.rect( &x, &y, &w, &h );
+
+ switch (pe) {
+ case PE_MenuItemIndicatorFrame:
+ {
+ int checkcol = styleHint(SH_MenuIndicatorColumnWidth, ceData, elementFlags, opt, NULL, NULL);
+
+ if ( act && !dis ) {
+ qDrawShadePanel( p, x, y, checkcol, h, cg, TRUE, 1, &cg.brush( QColorGroup::Button ) );
+ } else {
+ qDrawShadePanel( p, x, y, checkcol, h, cg, TRUE, 1, &cg.brush( QColorGroup::Midlight ) );
+ }
+ }
+ break;
+ case PE_MenuItemIndicatorIconFrame:
+ {
+ int checkcol = styleHint(SH_MenuIndicatorColumnWidth, ceData, elementFlags, opt, NULL, NULL);
+
+ qDrawShadePanel( p, x, y, checkcol, h, cg, FALSE, 1, &cg.brush( QColorGroup::Button ) );
+ }
+ break;
+ case PE_MenuItemIndicatorCheck:
+ {
+ int checkcol = styleHint(SH_MenuIndicatorColumnWidth, ceData, elementFlags, opt, NULL, NULL);
+
+ int mw = checkcol + motifItemFrame;
+ int mh = h - 2*motifItemFrame;
+
+ SFlags cflags = Style_Default;
+ if (! dis) {
+ cflags |= Style_Enabled;
+ }
+ if (act) {
+ cflags |= Style_On;
+ }
+
+ drawPrimitive( PE_CheckMark, p, ceData, elementFlags, QRect(x + motifItemFrame + 2, y + motifItemFrame, mw, mh), cg, cflags, opt );
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+/*! \reimp */
+int QCompactStyle::styleHint(StyleHint sh, QStyleControlElementData ceData, ControlElementFlags elementFlags, const QStyleOption &opt, QStyleHintReturn *returnData, const QWidget *w) const
+{
+ int ret;
+
+ switch (sh) {
+ case SH_MenuIndicatorColumnWidth:
+ {
+ int maxpmw = opt.maxIconWidth();
+ bool checkable = (elementFlags & CEF_IsCheckable);
+
+ if ( checkable )
+ maxpmw = QMAX( maxpmw, 8 ); // space for the checkmarks
+
+ ret = maxpmw;
+ }
+ break;
+ default:
+ ret = QWindowsStyle::styleHint(sh, ceData, elementFlags, opt, returnData, w);
+ break;
+ }
+
+ return ret;
+}
+
#endif