summaryrefslogtreecommitdiff
path: root/noncore/styles/liquid/liquid.cpp
Unidiff
Diffstat (limited to 'noncore/styles/liquid/liquid.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/styles/liquid/liquid.cpp7
1 files changed, 0 insertions, 7 deletions
diff --git a/noncore/styles/liquid/liquid.cpp b/noncore/styles/liquid/liquid.cpp
index daac22c..e6d8310 100644
--- a/noncore/styles/liquid/liquid.cpp
+++ b/noncore/styles/liquid/liquid.cpp
@@ -1059,106 +1059,102 @@ public:
1059 1059
1060 void paint ( QPaintEvent *ev ) 1060 void paint ( QPaintEvent *ev )
1061 { 1061 {
1062 erase ( ev-> region ( )); 1062 erase ( ev-> region ( ));
1063 QPainter p ( this ); 1063 QPainter p ( this );
1064 style ( ). drawToolButton ( this, &p ); 1064 style ( ). drawToolButton ( this, &p );
1065 drawButtonLabel ( &p ); 1065 drawButtonLabel ( &p );
1066 } 1066 }
1067}; 1067};
1068 1068
1069/* 1069/*
1070 * This is a fun method ;-) Here's an overview. KToolBar grabs resize to 1070 * This is a fun method ;-) Here's an overview. KToolBar grabs resize to
1071 * force everything to erase and repaint on resize. This is going away, I'm 1071 * force everything to erase and repaint on resize. This is going away, I'm
1072 * trying to get shaped widgets to work right without masking. QPushButton, 1072 * trying to get shaped widgets to work right without masking. QPushButton,
1073 * QComboBox, and Panel applet handles capture mouse enter and leaves in order 1073 * QComboBox, and Panel applet handles capture mouse enter and leaves in order
1074 * to set the highlightwidget and repaint for mouse hovers. CheckBoxes and 1074 * to set the highlightwidget and repaint for mouse hovers. CheckBoxes and
1075 * RadioButtons need to do this differently. Qt buffers these in pixmaps and 1075 * RadioButtons need to do this differently. Qt buffers these in pixmaps and
1076 * caches them in QPixmapCache, which is bad for doing things like hover 1076 * caches them in QPixmapCache, which is bad for doing things like hover
1077 * because the style methods aren't called in paintEvents if everything 1077 * because the style methods aren't called in paintEvents if everything
1078 * is cached. We use our own Paint event handler instead. Taskbuttons and 1078 * is cached. We use our own Paint event handler instead. Taskbuttons and
1079 * pager buttons draw into a pixmap buffer, so we handle those with palette 1079 * pager buttons draw into a pixmap buffer, so we handle those with palette
1080 * modifications. For QHeader, different header items are actually one widget 1080 * modifications. For QHeader, different header items are actually one widget
1081 * that draws multiple items, so we need to check which ID is hightlighted 1081 * that draws multiple items, so we need to check which ID is hightlighted
1082 * and draw it. Finally, we also check enter and leave events for QLineEdit, 1082 * and draw it. Finally, we also check enter and leave events for QLineEdit,
1083 * since if it's inside a combobox we want to highlight the combobox during 1083 * since if it's inside a combobox we want to highlight the combobox during
1084 * hovering in the edit. 1084 * hovering in the edit.
1085 */ 1085 */
1086bool LiquidStyle::eventFilter(QObject *obj, QEvent *ev) 1086bool LiquidStyle::eventFilter(QObject *obj, QEvent *ev)
1087{ 1087{
1088 if(obj->inherits("QToolBar")){ 1088 if(obj->inherits("QToolBar")){
1089 if(ev->type() == QEvent::Resize){ 1089 if(ev->type() == QEvent::Resize){
1090 const QObjectList *tbChildList = obj->children(); 1090 const QObjectList *tbChildList = obj->children();
1091 QObjectListIt it(*tbChildList); 1091 QObjectListIt it(*tbChildList);
1092 QObject *child; 1092 QObject *child;
1093 while((child = it.current()) != NULL){ 1093 while((child = it.current()) != NULL){
1094 ++it; 1094 ++it;
1095 if(child->isWidgetType()) 1095 if(child->isWidgetType())
1096 ((QWidget *)child)->repaint(true); 1096 ((QWidget *)child)->repaint(true);
1097 } 1097 }
1098 1098
1099 } 1099 }
1100 } 1100 }
1101 else if(obj->inherits("QToolButton")){ 1101 else if(obj->inherits("QToolButton")){
1102 QToolButton *btn = (QToolButton *)obj; 1102 QToolButton *btn = (QToolButton *)obj;
1103 if(ev->type() == QEvent::FocusIn ){ // && !btn-> autoRaise () 1103 if(ev->type() == QEvent::FocusIn ){ // && !btn-> autoRaise ()
1104 if(btn->isEnabled()){ 1104 if(btn->isEnabled()){
1105 highlightWidget = btn; 1105 highlightWidget = btn;
1106 btn->repaint(false); 1106 btn->repaint(false);
1107
1108 qDebug ( "TB FOCUS IN [%p]", btn );
1109 } 1107 }
1110 } 1108 }
1111 else if(ev->type() == QEvent::FocusOut ){ 1109 else if(ev->type() == QEvent::FocusOut ){
1112 if(btn == highlightWidget){ 1110 if(btn == highlightWidget){
1113 highlightWidget = NULL; 1111 highlightWidget = NULL;
1114 btn->repaint(false); 1112 btn->repaint(false);
1115
1116 qDebug ( "TB FOCUS OUT [%p]", btn );
1117 } 1113 }
1118 } 1114 }
1119 else if(ev->type() == QEvent::Paint) { 1115 else if(ev->type() == QEvent::Paint) {
1120 (( HackToolButton *) btn )-> paint ((QPaintEvent *) ev ); 1116 (( HackToolButton *) btn )-> paint ((QPaintEvent *) ev );
1121 return true; 1117 return true;
1122 } 1118 }
1123 } 1119 }
1124 else if(obj->inherits("QRadioButton") || obj->inherits("QCheckBox")){ 1120 else if(obj->inherits("QRadioButton") || obj->inherits("QCheckBox")){
1125 QButton *btn = (QButton *)obj; 1121 QButton *btn = (QButton *)obj;
1126 bool isRadio = obj->inherits("QRadioButton"); 1122 bool isRadio = obj->inherits("QRadioButton");
1127 if(ev->type() == QEvent::Paint){ 1123 if(ev->type() == QEvent::Paint){
1128 //if(btn->autoMask()) 1124 //if(btn->autoMask())
1129 btn->erase(); 1125 btn->erase();
1130 QPainter p; 1126 QPainter p;
1131 p.begin(btn); 1127 p.begin(btn);
1132 QFontMetrics fm = btn->fontMetrics(); 1128 QFontMetrics fm = btn->fontMetrics();
1133 QSize lsz = fm.size(ShowPrefix, btn->text()); 1129 QSize lsz = fm.size(ShowPrefix, btn->text());
1134 QSize sz = isRadio ? exclusiveIndicatorSize() 1130 QSize sz = isRadio ? exclusiveIndicatorSize()
1135 : indicatorSize(); 1131 : indicatorSize();
1136 1132
1137/* 1133/*
1138 if(btn->hasFocus()){ 1134 if(btn->hasFocus()){
1139 QRect r = QRect(0, 0, btn->width(), btn->height()); 1135 QRect r = QRect(0, 0, btn->width(), btn->height());
1140 p.setPen(btn->colorGroup().button().dark(140)); 1136 p.setPen(btn->colorGroup().button().dark(140));
1141 p.drawLine(r.x()+1, r.y(), r.right()-1, r.y()); 1137 p.drawLine(r.x()+1, r.y(), r.right()-1, r.y());
1142 p.drawLine(r.x(), r.y()+1, r.x(), r.bottom()-1); 1138 p.drawLine(r.x(), r.y()+1, r.x(), r.bottom()-1);
1143 p.drawLine(r.right(), r.y()+1, r.right(), r.bottom()-1); 1139 p.drawLine(r.right(), r.y()+1, r.right(), r.bottom()-1);
1144 p.drawLine(r.x()+1, r.bottom(), r.right()-1, r.bottom()); 1140 p.drawLine(r.x()+1, r.bottom(), r.right()-1, r.bottom());
1145 } 1141 }
1146*/ 1142*/
1147 int x = 0; 1143 int x = 0;
1148 int y = (btn->height()-lsz.height()+fm.height()-sz.height())/2; 1144 int y = (btn->height()-lsz.height()+fm.height()-sz.height())/2;
1149 if(isRadio) 1145 if(isRadio)
1150 drawExclusiveIndicator(&p, x, y, sz.width(), sz.height(), 1146 drawExclusiveIndicator(&p, x, y, sz.width(), sz.height(),
1151 btn->colorGroup(), btn->isOn(), 1147 btn->colorGroup(), btn->isOn(),
1152 btn->isDown(), btn->isEnabled()); 1148 btn->isDown(), btn->isEnabled());
1153 else 1149 else
1154 drawIndicator(&p, x, y, sz.width(), sz.height(), 1150 drawIndicator(&p, x, y, sz.width(), sz.height(),
1155 btn->colorGroup(), btn->state(), btn->isDown(), 1151 btn->colorGroup(), btn->state(), btn->isDown(),
1156 btn->isEnabled()); 1152 btn->isEnabled());
1157 x = sz.width() + 6; 1153 x = sz.width() + 6;
1158 y = 0; 1154 y = 0;
1159 drawItem(&p, sz.width()+6+1, 0, btn->width()-(sz.width()+6+1), 1155 drawItem(&p, sz.width()+6+1, 0, btn->width()-(sz.width()+6+1),
1160 btn->height(), AlignLeft|AlignVCenter|ShowPrefix, 1156 btn->height(), AlignLeft|AlignVCenter|ShowPrefix,
1161 btn->colorGroup(), btn->isEnabled(), 1157 btn->colorGroup(), btn->isEnabled(),
1162 btn->pixmap(), btn->text()); 1158 btn->pixmap(), btn->text());
1163 p.end(); 1159 p.end();
1164 return(true); 1160 return(true);
@@ -1202,101 +1198,98 @@ bool LiquidStyle::eventFilter(QObject *obj, QEvent *ev)
1202 1198
1203 QPixmap *pix = bevelFillDict.find(g.button().dark(120).rgb()); 1199 QPixmap *pix = bevelFillDict.find(g.button().dark(120).rgb());
1204 if(!pix){ 1200 if(!pix){
1205 int h, s, v; 1201 int h, s, v;
1206 g.button().dark(120).hsv(&h, &s, &v); 1202 g.button().dark(120).hsv(&h, &s, &v);
1207 pix = new QPixmap(*bevelFillPix); 1203 pix = new QPixmap(*bevelFillPix);
1208 adjustHSV(*pix, h, s, v); 1204 adjustHSV(*pix, h, s, v);
1209 bevelFillDict.insert(g.button().dark(120).rgb(), pix); 1205 bevelFillDict.insert(g.button().dark(120).rgb(), pix);
1210 } 1206 }
1211 p-> paint ((QPaintEvent *) ev, g, pix ); 1207 p-> paint ((QPaintEvent *) ev, g, pix );
1212 return true; 1208 return true;
1213 } 1209 }
1214 } 1210 }
1215 return false ; 1211 return false ;
1216} 1212}
1217 1213
1218void LiquidStyle::drawButton(QPainter *p, int x, int y, int w, int h, 1214void LiquidStyle::drawButton(QPainter *p, int x, int y, int w, int h,
1219 const QColorGroup &g, bool sunken, 1215 const QColorGroup &g, bool sunken,
1220 const QBrush *) 1216 const QBrush *)
1221{ 1217{
1222 drawRoundButton(p, sunken ? g.background() : g.button(), g.background(), 1218 drawRoundButton(p, sunken ? g.background() : g.button(), g.background(),
1223 x, y, w, h); 1219 x, y, w, h);
1224} 1220}
1225 1221
1226void LiquidStyle::drawToolButton(QPainter *p, int x, int y, int w, int h, 1222void LiquidStyle::drawToolButton(QPainter *p, int x, int y, int w, int h,
1227 const QColorGroup &g, bool sunken, 1223 const QColorGroup &g, bool sunken,
1228 const QBrush *) 1224 const QBrush *)
1229{ 1225{
1230 if(p->device()->devType() != QInternal::Widget){ 1226 if(p->device()->devType() != QInternal::Widget){
1231 // drawing into a temp pixmap, don't use mask 1227 // drawing into a temp pixmap, don't use mask
1232 QColor c = sunken ? g.button() : g.background(); 1228 QColor c = sunken ? g.button() : g.background();
1233 p->setPen(c.dark(130)); 1229 p->setPen(c.dark(130));
1234 p->drawRect(x, y, w, h); 1230 p->drawRect(x, y, w, h);
1235 p->setPen(c.light(105)); 1231 p->setPen(c.light(105));
1236 p->drawRect(x+1, y+1, w-2, h-2); 1232 p->drawRect(x+1, y+1, w-2, h-2);
1237 1233
1238 1234
1239 // fill 1235 // fill
1240 QPixmap *pix = bevelFillDict.find(c.rgb()); 1236 QPixmap *pix = bevelFillDict.find(c.rgb());
1241 if(!pix){ 1237 if(!pix){
1242 int h, s, v; 1238 int h, s, v;
1243 c.hsv(&h, &s, &v); 1239 c.hsv(&h, &s, &v);
1244 pix = new QPixmap(*bevelFillPix); 1240 pix = new QPixmap(*bevelFillPix);
1245 adjustHSV(*pix, h, s, v); 1241 adjustHSV(*pix, h, s, v);
1246 bevelFillDict.insert(c.rgb(), pix); 1242 bevelFillDict.insert(c.rgb(), pix);
1247 } 1243 }
1248 1244
1249 p->drawTiledPixmap(x+2, y+2, w-4, h-4, *pix); 1245 p->drawTiledPixmap(x+2, y+2, w-4, h-4, *pix);
1250 qDebug ( "DRAW TOOLBUTTON IN PIXMAP" );
1251 } 1246 }
1252 else{ 1247 else{
1253 qDebug ( "DRAW TOOLBUTTON sunken=%d/high=%p/device=%p", sunken, highlightWidget,p->device() );
1254
1255 drawClearBevel(p, x, y, w, h, sunken ? g.button() : 1248 drawClearBevel(p, x, y, w, h, sunken ? g.button() :
1256 highlightWidget == p->device() ? g.button().light(110) : 1249 highlightWidget == p->device() ? g.button().light(110) :
1257 g.background(), g.background()); 1250 g.background(), g.background());
1258 } 1251 }
1259} 1252}
1260 1253
1261void LiquidStyle::drawPushButton(QPushButton *btn, QPainter *p) 1254void LiquidStyle::drawPushButton(QPushButton *btn, QPainter *p)
1262{ 1255{
1263 QRect r = btn->rect(); 1256 QRect r = btn->rect();
1264 bool sunken = btn->isOn() || btn->isDown(); 1257 bool sunken = btn->isOn() || btn->isDown();
1265 QColorGroup g = btn->colorGroup(); 1258 QColorGroup g = btn->colorGroup();
1266 1259
1267 1260
1268 //int dw = buttonDefaultIndicatorWidth(); 1261 //int dw = buttonDefaultIndicatorWidth();
1269 if(btn->hasFocus() || btn->isDefault()){ 1262 if(btn->hasFocus() || btn->isDefault()){
1270 QColor c = btn->hasFocus() ? g.button().light(110) : g.background(); 1263 QColor c = btn->hasFocus() ? g.button().light(110) : g.background();
1271 QPixmap *pix = bevelFillDict.find(c.rgb()); 1264 QPixmap *pix = bevelFillDict.find(c.rgb());
1272 if(!pix){ 1265 if(!pix){
1273 int h, s, v; 1266 int h, s, v;
1274 c.hsv(&h, &s, &v); 1267 c.hsv(&h, &s, &v);
1275 pix = new QPixmap(*bevelFillPix); 1268 pix = new QPixmap(*bevelFillPix);
1276 adjustHSV(*pix, h, s, v); 1269 adjustHSV(*pix, h, s, v);
1277 bevelFillDict.insert(c.rgb(), pix); 1270 bevelFillDict.insert(c.rgb(), pix);
1278 } 1271 }
1279 p->setPen(c.dark(150)); 1272 p->setPen(c.dark(150));
1280 p->drawLine(r.x()+1, r.y(), r.right()-1, r.y()); 1273 p->drawLine(r.x()+1, r.y(), r.right()-1, r.y());
1281 p->drawLine(r.x(), r.y()+1, r.x(), r.bottom()-1); 1274 p->drawLine(r.x(), r.y()+1, r.x(), r.bottom()-1);
1282 p->drawLine(r.right(), r.y()+1, r.right(), r.bottom()-1); 1275 p->drawLine(r.right(), r.y()+1, r.right(), r.bottom()-1);
1283 p->drawLine(r.x()+1, r.bottom(), r.right()-1, r.bottom()); 1276 p->drawLine(r.x()+1, r.bottom(), r.right()-1, r.bottom());
1284 p->drawTiledPixmap(r.x()+1, r.y()+1, r.width()-2, r.height()-2, *pix); 1277 p->drawTiledPixmap(r.x()+1, r.y()+1, r.width()-2, r.height()-2, *pix);
1285 } 1278 }
1286 1279
1287 QColor newColor = btn == highlightWidget || sunken ? 1280 QColor newColor = btn == highlightWidget || sunken ?
1288 g.button().light(120) : g.button(); 1281 g.button().light(120) : g.button();
1289 1282
1290 drawRoundButton(p, newColor, g.background(), 1283 drawRoundButton(p, newColor, g.background(),
1291 r.x(), r.y(), r.width(), r.height(), !btn->autoMask(), 1284 r.x(), r.y(), r.width(), r.height(), !btn->autoMask(),
1292 sunken, btn->isDefault() || btn->autoDefault() || btn->hasFocus(), 1285 sunken, btn->isDefault() || btn->autoDefault() || btn->hasFocus(),
1293 btn->autoMask()); 1286 btn->autoMask());
1294} 1287}
1295 1288
1296void LiquidStyle::drawPushButtonLabel(QPushButton *btn, QPainter *p) 1289void LiquidStyle::drawPushButtonLabel(QPushButton *btn, QPainter *p)
1297{ 1290{
1298 int x1, y1, x2, y2, w, h; 1291 int x1, y1, x2, y2, w, h;
1299 btn->rect().coords(&x1, &y1, &x2, &y2); 1292 btn->rect().coords(&x1, &y1, &x2, &y2);
1300 w = btn->width(); 1293 w = btn->width();
1301 h = btn->height(); 1294 h = btn->height();
1302 1295