summaryrefslogtreecommitdiff
path: root/noncore/styles/web
Unidiff
Diffstat (limited to 'noncore/styles/web') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/styles/web/webstyle.cpp126
-rw-r--r--noncore/styles/web/webstyle.h2
2 files changed, 124 insertions, 4 deletions
diff --git a/noncore/styles/web/webstyle.cpp b/noncore/styles/web/webstyle.cpp
index cd3cf08..7b58d89 100644
--- a/noncore/styles/web/webstyle.cpp
+++ b/noncore/styles/web/webstyle.cpp
@@ -34,24 +34,33 @@
34 34
35#include "webstyle.h" 35#include "webstyle.h"
36 36
37static const int _indicatorSize = 9; 37static const int _indicatorSize = 9;
38static QButton * _highlightedButton = 0; 38static QButton * _highlightedButton = 0;
39static const int _scrollBarExtent = 12; 39static const int _scrollBarExtent = 12;
40 40
41static QFrame * _currentFrame = 0; 41static QFrame * _currentFrame = 0;
42static int _savedFrameLineWidth; 42static int _savedFrameLineWidth;
43static int _savedFrameMidLineWidth; 43static int _savedFrameMidLineWidth;
44static ulong _savedFrameStyle; 44static ulong _savedFrameStyle;
45 45
46static const int ITEMFRAME = 1; // menu stuff
47static const int ITEMHMARGIN = 3;
48static const int ITEMVMARGIN = 0;
49
50static const int ARROWMARGIN = 6;
51static const int RIGHTBORDER = 10;
52static const int MINICONSIZE = 12;
53
54
46static QColor contrastingForeground(const QColor & fg, const QColor & bg) 55static QColor contrastingForeground(const QColor & fg, const QColor & bg)
47{ 56{
48 int h, s, vbg, vfg; 57 int h, s, vbg, vfg;
49 58
50 bg.hsv(&h, &s, &vbg); 59 bg.hsv(&h, &s, &vbg);
51 fg.hsv(&h, &s, &vfg); 60 fg.hsv(&h, &s, &vfg);
52 61
53 int diff(vbg - vfg); 62 int diff(vbg - vfg);
54 63
55 if ((diff > -72) && (diff < 72)) 64 if ((diff > -72) && (diff < 72))
56 { 65 {
57 return (vbg < 128) ? Qt::white : Qt::black; 66 return (vbg < 128) ? Qt::white : Qt::black;
@@ -960,37 +969,148 @@ WebStyle::drawSlider
960 if( o == Qt::Vertical ) 969 if( o == Qt::Vertical )
961 p->drawEllipse(x + w / 2 - sl / 2, y, sl, sl); 970 p->drawEllipse(x + w / 2 - sl / 2, y, sl, sl);
962 971
963 p->restore(); 972 p->restore();
964} 973}
965 974
966 void 975 void
967WebStyle::drawPopupMenuItem 976WebStyle::drawPopupMenuItem
968( 977(
969 QPainter * p, 978 QPainter * p,
970 bool checkable, 979 bool checkable,
971 int maxpmw, 980 int maxpmw,
972 int tab, 981 int tabwidth,
973 QMenuItem * mi, 982 QMenuItem * mi,
974 const QPalette & pal, 983 const QPalette & pal,
975 bool act, 984 bool act,
976 bool enabled, 985 bool enabled,
977 int x, 986 int x,
978 int y, 987 int y,
979 int w, 988 int w,
980 int h 989 int h
981) 990)
982{ 991{
983 // TODO 992 // TODO
984 QWindowsStyle::drawPopupMenuItem(p, checkable, maxpmw, tab, mi, pal, act, enabled, x, y, w, h); 993 //QWindowsStyle::drawPopupMenuItem(p, checkable, maxpmw, tab, mi, pal, act, enabled, x, y, w, h);
994 if ( !mi )
995 return;
996
997 QRect rect(x, y, w, h );
998 int x2, y2;
999 x2 = rect.right();
1000 y2 = rect.bottom();
1001 const QColorGroup& g = pal.active();
1002 QColorGroup itemg = !enabled ? pal.disabled() : pal.active();
1003
1004 if ( checkable || maxpmw ) maxpmw = QMAX(maxpmw, 20);
1005
1006 if (act && enabled )
1007 p->fillRect(x, y, w, h, g.highlight() );
1008 else
1009 p->fillRect(x, y, w, h, g.background() );
1010
1011 // draw seperator
1012 if (mi->isSeparator() ) {
1013 p->setPen( g.dark() );
1014 p->drawLine( x+8, y+1, x+w-8, y+1 );
1015
1016 p->setPen( g.mid() );
1017 p->drawLine( x+8, y, x+w-8, y );
1018 p->drawPoint(x+w,y+1);
1019
1020 p->setPen( g.midlight() );
1021 p->drawLine( x+8, y-1, x+w-8, y-1 );
1022 p->drawPoint(x+8, y );
1023 return;
1024 }
1025
1026 // draw icon
1027 QIconSet::Mode mode;
1028 if ( mi->iconSet() && !mi->isChecked() ) {
1029 if ( act )
1030 mode = enabled ? QIconSet::Active : QIconSet::Disabled;
1031 else
1032 mode = enabled ? QIconSet::Normal : QIconSet::Disabled;
1033 QPixmap pixmap;
1034 if ( mode == QIconSet::Disabled )
1035 pixmap = mi->iconSet()->pixmap( QIconSet::Automatic, mode );
1036 else
1037 pixmap = mi->iconSet()->pixmap();
1038 QRect pmrect(0, 0, pixmap.width(), pixmap.height() );
1039 QRect cr(x, y, maxpmw, h );
1040 pmrect.moveCenter( cr.center() );
1041 p->drawPixmap(pmrect.topLeft(), pixmap);
1042 }
1043
1044 // draw check
1045 if(mi->isChecked() ) {
1046 drawCheckMark(p, x, y, maxpmw, h, itemg, act, !enabled );
1047 }
1048
1049
1050 // draw text
1051 int xm = maxpmw + 2;
1052 int xp = x + xm;
1053 int tw = w -xm - 2;
1054
1055 p->setPen( enabled ? ( act ? g.highlightedText() : g.buttonText() ) :
1056 g.mid() );
1057
1058
1059 if ( mi->custom() ) {
1060 p->save();
1061 mi->custom()->paint(p, g, act, enabled,
1062 xp, y+1, tw, h-2 );
1063 p->restore();
1064 }else { // draw label
1065 QString text = mi->text();
1066 if (!text.isNull() ) {
1067 int t = text.find('\t');
1068 const int tflags = AlignVCenter | DontClip |
1069 ShowPrefix | SingleLine |
1070 AlignLeft;
1071
1072 if (t >= 0) {
1073 int tabx = x + w - tabwidth - RIGHTBORDER -
1074 ITEMHMARGIN - ITEMFRAME;
1075 p->drawText(tabx, y+ITEMVMARGIN, tabwidth,
1076 h-2*ITEMVMARGIN, tflags,
1077 text.mid(t+1) );
1078 text = text.left(t );
1079 }
1080
1081 // draw left label
1082 p->drawText(xp, y+ITEMVMARGIN,
1083 tw, h-2*ITEMVMARGIN,
1084 tflags, text, t);
1085 }else if ( mi->pixmap() ) { // pixmap as label
1086 QPixmap pixmap = *mi->pixmap();
1087 if ( pixmap.depth() == 1 )
1088 p->setBackgroundMode( OpaqueMode );
1089
1090 int dx = ((w-pixmap.width() ) /2 ) +
1091 ((w - pixmap.width()) %2 );
1092 p->drawPixmap(x+dx, y+ITEMFRAME, pixmap );
1093
1094 if ( pixmap.depth() == 1 )
1095 p->setBackgroundMode( TransparentMode );
1096 }
1097 }
1098
1099 if ( mi->popup() ) { // draw submenu arrow
1100 int dim = (h-2*ITEMFRAME) / 2;
1101 drawArrow( p, RightArrow, false,
1102 x+w-ARROWMARGIN-ITEMFRAME-dim,
1103 y+h/2-dim/2, dim, dim, g, enabled );
1104 }
985} 1105}
986 1106
987 void 1107 void
988WebStyle::drawFocusRect 1108WebStyle::drawFocusRect
989( 1109(
990 QPainter * p, 1110 QPainter * p,
991 const QRect & r, 1111 const QRect & r,
992 const QColorGroup & g, 1112 const QColorGroup & g,
993 const QColor * pen, 1113 const QColor * pen,
994 bool atBorder 1114 bool atBorder
995) 1115)
996{ 1116{
@@ -1159,25 +1279,25 @@ WebStyle::popupMenuItemHeight(bool, QMenuItem * i, const QFontMetrics & fm)
1159 1279
1160 int h = 0; 1280 int h = 0;
1161 1281
1162 if (0 != i->pixmap()) 1282 if (0 != i->pixmap())
1163 { 1283 {
1164 h = i->pixmap()->height(); 1284 h = i->pixmap()->height();
1165 } 1285 }
1166 1286
1167 if (0 != i->iconSet()) 1287 if (0 != i->iconSet())
1168 { 1288 {
1169 h = QMAX 1289 h = QMAX
1170 ( 1290 (
1171 i->iconSet()->pixmap(QIconSet::Small, QIconSet::Normal).height(), 1291 i->iconSet()->pixmap().height(),
1172 h 1292 h
1173 ); 1293 );
1174 } 1294 }
1175 1295
1176 h = QMAX(fm.height() + 4, h); 1296 h = QMAX(fm.height() + 4, h);
1177 1297
1178 h = QMAX(18, h); 1298 h = QMAX(18, h);
1179 1299
1180 return h; 1300 return h;
1181 1301
1182} 1302}
1183 1303
diff --git a/noncore/styles/web/webstyle.h b/noncore/styles/web/webstyle.h
index 83ab784..d6f153b 100644
--- a/noncore/styles/web/webstyle.h
+++ b/noncore/styles/web/webstyle.h
@@ -206,25 +206,25 @@ class WebStyle : public QWindowsStyle {
206 int h, 206 int h,
207 const QColorGroup &, 207 const QColorGroup &,
208 Orientation, 208 Orientation,
209 bool tickAbove, 209 bool tickAbove,
210 bool tickBelow 210 bool tickBelow
211 ); 211 );
212 212
213 void drawPopupMenuItem 213 void drawPopupMenuItem
214 ( 214 (
215 QPainter *, 215 QPainter *,
216 bool checkable, 216 bool checkable,
217 int maxpmw, 217 int maxpmw,
218 int tab, 218 int tabwidth,
219 QMenuItem *, 219 QMenuItem *,
220 const QPalette &, 220 const QPalette &,
221 bool act, 221 bool act,
222 bool enabled, 222 bool enabled,
223 int x, 223 int x,
224 int y, 224 int y,
225 int w, 225 int w,
226 int h 226 int h
227 ); 227 );
228 228
229 void drawFocusRect 229 void drawFocusRect
230 ( 230 (