summaryrefslogtreecommitdiff
path: root/library/lightstyle.cpp
authordrw <drw>2005-04-14 18:29:44 (UTC)
committer drw <drw>2005-04-14 18:29:44 (UTC)
commit7a3b813cc3bfbb2f7c31f347c35405851e82aecf (patch) (unidiff)
treeb9d384b6d33e396a0219386b4bf695b092bb606d /library/lightstyle.cpp
parent5f600ec21480d1d040203407a1d2446781702230 (diff)
downloadopie-7a3b813cc3bfbb2f7c31f347c35405851e82aecf.zip
opie-7a3b813cc3bfbb2f7c31f347c35405851e82aecf.tar.gz
opie-7a3b813cc3bfbb2f7c31f347c35405851e82aecf.tar.bz2
Fix icon sizing for light and qpe styles
Diffstat (limited to 'library/lightstyle.cpp') (more/less context) (show whitespace changes)
-rw-r--r--library/lightstyle.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/library/lightstyle.cpp b/library/lightstyle.cpp
index 3bd1623..c5073ca 100644
--- a/library/lightstyle.cpp
+++ b/library/lightstyle.cpp
@@ -1035,247 +1035,251 @@ bool LightStyle::eventFilter(QObject *object, QEvent *event)
1035 1035
1036 QPalette pal = singleton->hoverWidget->palette(); 1036 QPalette pal = singleton->hoverWidget->palette();
1037 if (singleton->hoverWidget->ownPalette()) 1037 if (singleton->hoverWidget->ownPalette())
1038 singleton->savePalette = new QPalette(pal); 1038 singleton->savePalette = new QPalette(pal);
1039 1039
1040 singleton->hoverWidget->setPalette(singleton->hoverPalette); 1040 singleton->hoverWidget->setPalette(singleton->hoverPalette);
1041 1041
1042 break; 1042 break;
1043 } 1043 }
1044 1044
1045 case QEvent::Leave: 1045 case QEvent::Leave:
1046 { 1046 {
1047 if (object != singleton->hoverWidget) 1047 if (object != singleton->hoverWidget)
1048 break; 1048 break;
1049 1049
1050 if (singleton->savePalette) { 1050 if (singleton->savePalette) {
1051 singleton->hoverWidget->setPalette(*(singleton->savePalette)); 1051 singleton->hoverWidget->setPalette(*(singleton->savePalette));
1052 delete singleton->savePalette; 1052 delete singleton->savePalette;
1053 singleton->savePalette = 0; 1053 singleton->savePalette = 0;
1054 } else 1054 } else
1055 singleton->hoverWidget->unsetPalette(); 1055 singleton->hoverWidget->unsetPalette();
1056 1056
1057 singleton->hoverWidget = 0; 1057 singleton->hoverWidget = 0;
1058 1058
1059 break; 1059 break;
1060 } 1060 }
1061 1061
1062 default: 1062 default:
1063 { 1063 {
1064 ; 1064 ;
1065 } 1065 }
1066 } 1066 }
1067 1067
1068 return QWindowsStyle::eventFilter(object, event); 1068 return QWindowsStyle::eventFilter(object, event);
1069} 1069}
1070 1070
1071 1071
1072 static const int motifItemFrame = 1;// menu item frame width 1072 static const int motifItemFrame = 1;// menu item frame width
1073 static const int motifSepHeight = 2;// separator item height 1073 static const int motifSepHeight = 2;// separator item height
1074 static const int motifItemHMargin = 1;// menu item hor text margin 1074 static const int motifItemHMargin = 1;// menu item hor text margin
1075 static const int motifItemVMargin = 2;// menu item ver text margin 1075 static const int motifItemVMargin = 2;// menu item ver text margin
1076 static const int motifArrowHMargin = 0;// arrow horizontal margin 1076 static const int motifArrowHMargin = 0;// arrow horizontal margin
1077 static const int motifTabSpacing = 12;// space between text and tab 1077 static const int motifTabSpacing = 12;// space between text and tab
1078 static const int motifCheckMarkHMargin = 1;// horiz. margins of check mark 1078 static const int motifCheckMarkHMargin = 1;// horiz. margins of check mark
1079 static const int windowsRightBorder= 8; // right border on windows 1079 static const int windowsRightBorder= 8; // right border on windows
1080static const int windowsCheckMarkWidth = 2; // checkmarks width on windows 1080static const int windowsCheckMarkWidth = 2; // checkmarks width on windows
1081 1081
1082/*! \reimp 1082/*! \reimp
1083*/ 1083*/
1084int LightStyle::extraPopupMenuItemWidth( bool checkable, int maxpmw, QMenuItem* mi, const QFontMetrics& /*fm*/ ) 1084int LightStyle::extraPopupMenuItemWidth( bool checkable, int maxpmw, QMenuItem* mi, const QFontMetrics& /*fm*/ )
1085{ 1085{
1086#ifndef QT_NO_MENUDATA 1086#ifndef QT_NO_MENUDATA
1087 int w = 2*motifItemHMargin + 2*motifItemFrame; // a little bit of border can never harm 1087 int w = 2*motifItemHMargin + 2*motifItemFrame; // a little bit of border can never harm
1088 1088
1089 if ( mi->isSeparator() ) 1089 if ( mi->isSeparator() )
1090 return 10; // arbitrary 1090 return 10; // arbitrary
1091 else if ( mi->pixmap() ) 1091 else if ( mi->pixmap() )
1092 w += mi->pixmap()->width();// pixmap only 1092 w += mi->pixmap()->width();// pixmap only
1093 1093
1094 if ( !mi->text().isNull() ) { 1094 if ( !mi->text().isNull() ) {
1095 if ( mi->text().find('\t') >= 0 )// string contains tab 1095 if ( mi->text().find('\t') >= 0 )// string contains tab
1096 w += motifTabSpacing; 1096 w += motifTabSpacing;
1097 } 1097 }
1098 1098
1099 if ( maxpmw ) { // we have iconsets 1099 if ( maxpmw ) { // we have iconsets
1100 w += maxpmw; 1100 w += maxpmw;
1101 w += 6; // add a little extra border around the iconset 1101 w += 6; // add a little extra border around the iconset
1102 } 1102 }
1103 1103
1104 if ( checkable && maxpmw < windowsCheckMarkWidth ) { 1104 if ( checkable && maxpmw < windowsCheckMarkWidth ) {
1105 w += windowsCheckMarkWidth - maxpmw; // space for the checkmarks 1105 w += windowsCheckMarkWidth - maxpmw; // space for the checkmarks
1106 } 1106 }
1107 1107
1108 if ( maxpmw > 0 || checkable ) // we have a check-column ( iconsets or checkmarks) 1108 if ( maxpmw > 0 || checkable ) // we have a check-column ( iconsets or checkmarks)
1109 w += motifCheckMarkHMargin; // add space to separate the columns 1109 w += motifCheckMarkHMargin; // add space to separate the columns
1110 1110
1111 w += windowsRightBorder; // windows has a strange wide border on the right side 1111 w += windowsRightBorder; // windows has a strange wide border on the right side
1112 1112
1113 return w; 1113 return w;
1114#endif 1114#endif
1115} 1115}
1116 1116
1117/*! \reimp 1117/*! \reimp
1118*/ 1118*/
1119int LightStyle::popupMenuItemHeight( bool /*checkable*/, QMenuItem* mi, const QFontMetrics& fm ) 1119int LightStyle::popupMenuItemHeight( bool /*checkable*/, QMenuItem* mi, const QFontMetrics& fm )
1120{ 1120{
1121#ifndef QT_NO_MENUDATA 1121#ifndef QT_NO_MENUDATA
1122 int h = 0; 1122 int h = 0;
1123 if ( mi->isSeparator() ) // separator height 1123 if ( mi->isSeparator() ) // separator height
1124 h = motifSepHeight; 1124 h = motifSepHeight;
1125 else if ( mi->pixmap() ) // pixmap height 1125 else if ( mi->pixmap() ) // pixmap height
1126 h = mi->pixmap()->height() + 2*motifItemFrame; 1126 h = mi->pixmap()->height() + 2*motifItemFrame;
1127 else // text height 1127 else // text height
1128 h = fm.height() + 2*motifItemVMargin + 2*motifItemFrame; 1128 h = fm.height() + 2*motifItemVMargin + 2*motifItemFrame;
1129 1129
1130 if ( !mi->isSeparator() && mi->iconSet() != 0 ) { 1130 if ( !mi->isSeparator() && mi->iconSet() != 0 ) {
1131 h = QMAX( h, mi->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).height() + 2*motifItemFrame ); 1131 h = QMAX( h, mi->iconSet()->pixmap().height() + 2*motifItemFrame );
1132 } 1132 }
1133 if ( mi->custom() ) 1133 if ( mi->custom() )
1134 h = QMAX( h, mi->custom()->sizeHint().height() + 2*motifItemVMargin + 2*motifItemFrame ) - 1; 1134 h = QMAX( h, mi->custom()->sizeHint().height() + 2*motifItemVMargin + 2*motifItemFrame ) - 1;
1135 return h; 1135 return h;
1136#endif 1136#endif
1137} 1137}
1138 1138
1139void LightStyle::drawPopupMenuItem( QPainter* p, bool checkable, int maxpmw, int tab, QMenuItem* mi, 1139void LightStyle::drawPopupMenuItem( QPainter* p, bool checkable, int maxpmw, int tab, QMenuItem* mi,
1140 const QPalette& pal, 1140 const QPalette& pal,
1141 bool act, bool enabled, int x, int y, int w, int h) 1141 bool act, bool enabled, int x, int y, int w, int h)
1142{ 1142{
1143#ifndef QT_NO_MENUDATA 1143#ifndef QT_NO_MENUDATA
1144 const QColorGroup & g = pal.active(); 1144 const QColorGroup & g = pal.active();
1145 bool dis = !enabled; 1145 bool dis = !enabled;
1146 QColorGroup itemg = dis ? pal.disabled() : pal.active(); 1146 QColorGroup itemg = dis ? pal.disabled() : pal.active();
1147 1147
1148 if ( checkable ) 1148 if ( checkable )
1149 maxpmw = QMAX( maxpmw, 8 ); // space for the checkmarks 1149 maxpmw = QMAX( maxpmw, 8 ); // space for the checkmarks
1150 1150
1151 int checkcol = maxpmw; 1151 int checkcol = maxpmw;
1152 1152
1153 if ( mi && mi->isSeparator() ) { // draw separator 1153 if ( mi && mi->isSeparator() ) { // draw separator
1154 p->setPen( g.dark() ); 1154 p->setPen( g.dark() );
1155 p->drawLine( x, y, x+w, y ); 1155 p->drawLine( x, y, x+w, y );
1156 p->setPen( g.light() ); 1156 p->setPen( g.light() );
1157 p->drawLine( x, y+1, x+w, y+1 ); 1157 p->drawLine( x, y+1, x+w, y+1 );
1158 return; 1158 return;
1159 } 1159 }
1160 1160
1161 QBrush fill = act? g.brush( QColorGroup::Highlight ) : 1161 QBrush fill = act? g.brush( QColorGroup::Highlight ) :
1162 g.brush( QColorGroup::Button ); 1162 g.brush( QColorGroup::Button );
1163 p->fillRect( x, y, w, h, fill); 1163 p->fillRect( x, y, w, h, fill);
1164 1164
1165 if ( !mi ) 1165 if ( !mi )
1166 return; 1166 return;
1167 1167
1168 if ( mi->isChecked() ) { 1168 if ( mi->isChecked() ) {
1169 if ( act && !dis ) { 1169 if ( act && !dis ) {
1170 qDrawShadePanel( p, x, y, checkcol, h, 1170 qDrawShadePanel( p, x, y, checkcol, h,
1171 g, TRUE, 1, &g.brush( QColorGroup::Button ) ); 1171 g, TRUE, 1, &g.brush( QColorGroup::Button ) );
1172 } else { 1172 } else {
1173 qDrawShadePanel( p, x, y, checkcol, h, 1173 qDrawShadePanel( p, x, y, checkcol, h,
1174 g, TRUE, 1, &g.brush( QColorGroup::Midlight ) ); 1174 g, TRUE, 1, &g.brush( QColorGroup::Midlight ) );
1175 } 1175 }
1176 } else if ( !act ) { 1176 } else if ( !act ) {
1177 p->fillRect(x, y, checkcol , h, 1177 p->fillRect(x, y, checkcol , h,
1178 g.brush( QColorGroup::Button )); 1178 g.brush( QColorGroup::Button ));
1179 } 1179 }
1180 1180
1181 if ( mi->iconSet() ) { // draw iconset 1181 if ( mi->iconSet() ) { // draw iconset
1182 QIconSet::Mode mode = dis ? QIconSet::Disabled : QIconSet::Normal; 1182 QIconSet::Mode mode = dis ? QIconSet::Disabled : QIconSet::Normal;
1183 if (act && !dis ) 1183 if (act && !dis )
1184 mode = QIconSet::Active; 1184 mode = QIconSet::Active;
1185 QPixmap pixmap = mi->iconSet()->pixmap( QIconSet::Small, mode ); 1185 QPixmap pixmap;
1186 if ( mode == QIconSet::Disabled )
1187 pixmap = mi->iconSet()->pixmap( QIconSet::Automatic, mode );
1188 else
1189 pixmap = mi->iconSet()->pixmap();
1186 int pixw = pixmap.width(); 1190 int pixw = pixmap.width();
1187 int pixh = pixmap.height(); 1191 int pixh = pixmap.height();
1188 if ( act && !dis ) { 1192 if ( act && !dis ) {
1189 if ( !mi->isChecked() ) 1193 if ( !mi->isChecked() )
1190 qDrawShadePanel( p, x, y, checkcol, h, g, FALSE, 1, &g.brush( QColorGroup::Button ) ); 1194 qDrawShadePanel( p, x, y, checkcol, h, g, FALSE, 1, &g.brush( QColorGroup::Button ) );
1191 } 1195 }
1192 QRect cr( x, y, checkcol, h ); 1196 QRect cr( x, y, checkcol, h );
1193 QRect pmr( 0, 0, pixw, pixh ); 1197 QRect pmr( 0, 0, pixw, pixh );
1194 pmr.moveCenter( cr.center() ); 1198 pmr.moveCenter( cr.center() );
1195 p->setPen( itemg.text() ); 1199 p->setPen( itemg.text() );
1196 p->drawPixmap( pmr.topLeft(), pixmap ); 1200 p->drawPixmap( pmr.topLeft(), pixmap );
1197 1201
1198 QBrush fill = act? g.brush( QColorGroup::Highlight ) : 1202 QBrush fill = act? g.brush( QColorGroup::Highlight ) :
1199 g.brush( QColorGroup::Button ); 1203 g.brush( QColorGroup::Button );
1200 p->fillRect( x+checkcol + 1, y, w - checkcol - 1, h, fill); 1204 p->fillRect( x+checkcol + 1, y, w - checkcol - 1, h, fill);
1201 } else if ( checkable ) {// just "checking"... 1205 } else if ( checkable ) {// just "checking"...
1202 int mw = checkcol + motifItemFrame; 1206 int mw = checkcol + motifItemFrame;
1203 int mh = h - 2*motifItemFrame; 1207 int mh = h - 2*motifItemFrame;
1204 if ( mi->isChecked() ) { 1208 if ( mi->isChecked() ) {
1205 drawCheckMark( p, x + motifItemFrame + 2, 1209 drawCheckMark( p, x + motifItemFrame + 2,
1206 y+motifItemFrame, mw, mh, itemg, act, dis ); 1210 y+motifItemFrame, mw, mh, itemg, act, dis );
1207 } 1211 }
1208 } 1212 }
1209 1213
1210 p->setPen( act ? g.highlightedText() : g.buttonText() ); 1214 p->setPen( act ? g.highlightedText() : g.buttonText() );
1211 1215
1212 QColor discol; 1216 QColor discol;
1213 if ( dis ) { 1217 if ( dis ) {
1214 discol = itemg.text(); 1218 discol = itemg.text();
1215 p->setPen( discol ); 1219 p->setPen( discol );
1216 } 1220 }
1217 1221
1218 int xm = motifItemFrame + checkcol + motifItemHMargin; 1222 int xm = motifItemFrame + checkcol + motifItemHMargin;
1219 1223
1220 if ( mi->custom() ) { 1224 if ( mi->custom() ) {
1221 int m = motifItemVMargin; 1225 int m = motifItemVMargin;
1222 p->save(); 1226 p->save();
1223 if ( dis && !act ) { 1227 if ( dis && !act ) {
1224 p->setPen( g.light() ); 1228 p->setPen( g.light() );
1225 mi->custom()->paint( p, itemg, act, enabled, 1229 mi->custom()->paint( p, itemg, act, enabled,
1226 x+xm+1, y+m+1, w-xm-tab+1, h-2*m ); 1230 x+xm+1, y+m+1, w-xm-tab+1, h-2*m );
1227 p->setPen( discol ); 1231 p->setPen( discol );
1228 } 1232 }
1229 mi->custom()->paint( p, itemg, act, enabled, 1233 mi->custom()->paint( p, itemg, act, enabled,
1230 x+xm, y+m, w-xm-tab+1, h-2*m ); 1234 x+xm, y+m, w-xm-tab+1, h-2*m );
1231 p->restore(); 1235 p->restore();
1232 } 1236 }
1233 QString s = mi->text(); 1237 QString s = mi->text();
1234 if ( !s.isNull() ) { // draw text 1238 if ( !s.isNull() ) { // draw text
1235 int t = s.find( '\t' ); 1239 int t = s.find( '\t' );
1236 int m = motifItemVMargin; 1240 int m = motifItemVMargin;
1237 const int text_flags = AlignVCenter|ShowPrefix | DontClip | SingleLine; 1241 const int text_flags = AlignVCenter|ShowPrefix | DontClip | SingleLine;
1238 if ( t >= 0 ) { // draw tab text 1242 if ( t >= 0 ) { // draw tab text
1239 if ( dis && !act ) { 1243 if ( dis && !act ) {
1240 p->setPen( g.light() ); 1244 p->setPen( g.light() );
1241 p->drawText( x+w-tab-windowsRightBorder-motifItemHMargin-motifItemFrame+1, 1245 p->drawText( x+w-tab-windowsRightBorder-motifItemHMargin-motifItemFrame+1,
1242 y+m+1, tab, h-2*m, text_flags, s.mid( t+1 )); 1246 y+m+1, tab, h-2*m, text_flags, s.mid( t+1 ));
1243 p->setPen( discol ); 1247 p->setPen( discol );
1244 } 1248 }
1245 p->drawText( x+w-tab-windowsRightBorder-motifItemHMargin-motifItemFrame, 1249 p->drawText( x+w-tab-windowsRightBorder-motifItemHMargin-motifItemFrame,
1246 y+m, tab, h-2*m, text_flags, s.mid( t+1 ) ); 1250 y+m, tab, h-2*m, text_flags, s.mid( t+1 ) );
1247 } 1251 }
1248 if ( dis && !act ) { 1252 if ( dis && !act ) {
1249 p->setPen( g.light() ); 1253 p->setPen( g.light() );
1250 p->drawText( x+xm+1, y+m+1, w-xm+1, h-2*m, text_flags, s, t ); 1254 p->drawText( x+xm+1, y+m+1, w-xm+1, h-2*m, text_flags, s, t );
1251 p->setPen( discol ); 1255 p->setPen( discol );
1252 } 1256 }
1253 p->drawText( x+xm, y+m, w-xm-tab+1, h-2*m, text_flags, s, t ); 1257 p->drawText( x+xm, y+m, w-xm-tab+1, h-2*m, text_flags, s, t );
1254 } else if ( mi->pixmap() ) { // draw pixmap 1258 } else if ( mi->pixmap() ) { // draw pixmap
1255 QPixmap *pixmap = mi->pixmap(); 1259 QPixmap *pixmap = mi->pixmap();
1256 if ( pixmap->depth() == 1 ) 1260 if ( pixmap->depth() == 1 )
1257 p->setBackgroundMode( OpaqueMode ); 1261 p->setBackgroundMode( OpaqueMode );
1258 p->drawPixmap( x+xm, y+motifItemFrame, *pixmap ); 1262 p->drawPixmap( x+xm, y+motifItemFrame, *pixmap );
1259 if ( pixmap->depth() == 1 ) 1263 if ( pixmap->depth() == 1 )
1260 p->setBackgroundMode( TransparentMode ); 1264 p->setBackgroundMode( TransparentMode );
1261 } 1265 }
1262 if ( mi->popup() ) { // draw sub menu arrow 1266 if ( mi->popup() ) { // draw sub menu arrow
1263 int dim = (h-2*motifItemFrame) / 2; 1267 int dim = (h-2*motifItemFrame) / 2;
1264 if ( act ) { 1268 if ( act ) {
1265 if ( !dis ) 1269 if ( !dis )
1266 discol = white; 1270 discol = white;
1267 QColorGroup g2( discol, g.highlight(), 1271 QColorGroup g2( discol, g.highlight(),
1268 white, white, 1272 white, white,
1269 dis ? discol : white, 1273 dis ? discol : white,
1270 discol, white ); 1274 discol, white );
1271 drawArrow( p, RightArrow, FALSE, 1275 drawArrow( p, RightArrow, FALSE,
1272 x+w - motifArrowHMargin - motifItemFrame - dim, y+h/2-dim/2, 1276 x+w - motifArrowHMargin - motifItemFrame - dim, y+h/2-dim/2,
1273 dim, dim, g2, TRUE ); 1277 dim, dim, g2, TRUE );
1274 } else { 1278 } else {
1275 drawArrow( p, RightArrow, 1279 drawArrow( p, RightArrow,
1276 FALSE, 1280 FALSE,
1277 x+w - motifArrowHMargin - motifItemFrame - dim, y+h/2-dim/2, 1281 x+w - motifArrowHMargin - motifItemFrame - dim, y+h/2-dim/2,
1278 dim, dim, g, mi->isEnabled() ); 1282 dim, dim, g, mi->isEnabled() );
1279 } 1283 }
1280 } 1284 }
1281#endif 1285#endif