-rw-r--r-- | noncore/styles/liquid/liquid.cpp | 88 |
1 files changed, 82 insertions, 6 deletions
diff --git a/noncore/styles/liquid/liquid.cpp b/noncore/styles/liquid/liquid.cpp index 259f6af..4013981 100644 --- a/noncore/styles/liquid/liquid.cpp +++ b/noncore/styles/liquid/liquid.cpp @@ -1,129 +1,129 @@ /*- * Copyright (C)QPL 2001 Daniel M. Duley. All rights reserved. */ #ifndef INCLUDE_MENUITEM_DEF #define INCLUDE_MENUITEM_DEF #endif #include <qmenudata.h> #include "liquid.h" //#include "liquiddeco.h" #include <qapplication.h> #include <qpe/config.h> #include "effects.h" #include <qpalette.h> #include <qbitmap.h> #include <qtabbar.h> #include <qpopupmenu.h> #include <qobjectlist.h> #include <qimage.h> #include <qtimer.h> #include <qpixmapcache.h> #include <qradiobutton.h> #include <qcombobox.h> #include <qdrawutil.h> #include <qwidgetlist.h> #include <qtoolbutton.h> #include <qheader.h> #include <unistd.h> #include <qmenubar.h> - +#include <qprogressbar.h> #include <stdio.h> #include "htmlmasks.h" #include "embeddata.h" typedef void (QStyle::*QDrawMenuBarItemImpl) (QPainter *, int, int, int, int, QMenuItem *, QColorGroup &, bool, bool); QDrawMenuBarItemImpl qt_set_draw_menu_bar_impl(QDrawMenuBarItemImpl impl); void TransMenuHandler::stripePixmap(QPixmap &pix, const QColor &color) { QImage img(pix.convertToImage()); QImageEffect::fade(img, 0.9, color); int x, y; int r, g, b; for(y=0; y < img.height(); y+=3){ unsigned int *data = (unsigned int *) img.scanLine(y); for(x=0; x < img.width(); ++x){ r = qRed(data[x]); g = qGreen(data[x]); b = qBlue(data[x]); if(r-10) r-=10; if(g-10) g-=10; if(b-10) b-=10; data[x] = qRgb(r, g, b); } } pix.convertFromImage(img); } TransMenuHandler::TransMenuHandler(QObject *parent) : QObject(parent) { pixDict.setAutoDelete(true); reloadSettings(); } void TransMenuHandler::reloadSettings() { pixDict.clear(); Config config ( "qpe" ); config. setGroup ( "Liquid-Style" ); type = config. readNumEntry("Type", TransStippleBg); color = QColor ( config. readEntry("Color", QApplication::palette().active().button().name())); fgColor = QColor ( config. readEntry("TextColor", QApplication::palette().active().text().name())); opacity = config. readNumEntry("Opacity", 10); if ( opacity < -20 ) opacity = 20; else if ( opacity > 20 ) opacity = 20; shadowText = config. readBoolEntry("ShadowText", true); } bool TransMenuHandler::eventFilter(QObject *obj, QEvent *ev) { QWidget *p = (QWidget *)obj; if(ev->type() == QEvent::Show){ if(type == TransStippleBg || type == TransStippleBtn || type == Custom){ QApplication::syncX(); QPixmap *pix = new QPixmap; if(p->testWFlags(Qt::WType_Popup)){ QRect r(p->x(), p->y(), p->width(), p->height()); QRect deskR = QApplication::desktop()->rect(); if(r.right() > deskR.right() || r.bottom() > deskR.bottom()){ r.setBottom(deskR.bottom()); r.setRight(deskR.right()); } *pix = QPixmap::grabWindow(QApplication::desktop()-> winId(), r.x(), r.y(), r.width(), r.height()); } else{ // tear off menu pix->resize(p->width(), p->height()); pix->fill(Qt::black.rgb()); } if(type == TransStippleBg){ stripePixmap(*pix, p->colorGroup().background()); } else if(type == TransStippleBtn){ stripePixmap(*pix, p->colorGroup().button()); } else{ QPixmapEffect::fade(*pix, (((float)opacity)+80)*0.01, color); } pixDict.insert(p->winId(), pix); @@ -760,374 +760,433 @@ void LiquidStyle::polish(QPalette &appPal) adjustHSV(*pix, h, s, v); smallBevelFillDict.insert(c.rgb(), pix); } pagerHoverBrush.setColor(c); pagerHoverBrush.setPixmap(*pix); c = c.dark(120); pix = smallBevelFillDict.find(c.rgb()); // better be NULL ;-) if(!pix){ int h, s, v; c.hsv(&h, &s, &v); pix = new QPixmap(*smallBevelFillPix); adjustHSV(*pix, h, s, v); smallBevelFillDict.insert(c.rgb(), pix); } pagerBrush.setColor(c); pagerBrush.setPixmap(*pix); // background color stuff c = /*QColor ( config. readEntry ( "Background", ( Qt::lightGray ).name ( )));*/ appPal. color ( QPalette::Active, QColorGroup::Background ); c.hsv(&bH, &bS, &bV); c.light(120).hsv(&bHoverH, &bHoverS, &bHoverV); // FIXME? if(vsbSliderFillPix) delete vsbSliderFillPix; vsbSliderFillPix = new QPixmap(bevelFillPix->xForm(rMatrix)); adjustHSV(*vsbSliderFillPix, bH, bS, bV); // background brush QPixmap wallPaper(32, 32); wallPaper.fill(c.rgb()); painter.begin(&wallPaper); for(i=0; i < 32; i+=4){ painter.setPen(c.dark(100 + contrast)); painter.drawLine(0, i, 32, i); painter.setPen(c.dark(100 + 3 * contrast / 5 ) ); painter.drawLine(0, i+1, 32, i+1); }; painter.end(); bgBrush.setColor(c); bgBrush.setPixmap(wallPaper); appPal.setBrush(QColorGroup::Background, bgBrush); // lineedits c = /*QColor ( config. readEntry("Base", ( Qt::white). name ( )));*/ appPal. color ( QPalette::Active, QColorGroup::Base ); QPixmap basePix; basePix.resize(32, 32); basePix.fill(c.rgb()); painter.begin(&basePix); painter.setPen(c.dark(105)); for(i=0; i < 32; i+=4){ painter.drawLine(0, i, 32, i); painter.drawLine(0, i+1, 32, i+1); }; painter.end(); baseBrush.setColor(c); baseBrush.setPixmap(basePix); it.toFirst(); while ((w=it.current()) != 0 ){ ++it; if(w->inherits("QLineEdit")){ QPalette pal = w->palette(); pal.setBrush(QColorGroup::Base, baseBrush); w->setPalette(pal); } else if(w->inherits("QPushButton")){ applyCustomAttributes((QPushButton *)w); } } } void LiquidStyle::polish(QWidget *w) { if(w->inherits("QMenuBar")){ //((QFrame*)w)->setLineWidth(0); w->setBackgroundMode(QWidget::PaletteBackground); w->setBackgroundOrigin(QWidget::ParentOrigin); return; } if(w->inherits("QToolBar")){ w->installEventFilter(this); w->setBackgroundMode(QWidget::PaletteBackground); w->setBackgroundOrigin(QWidget::WidgetOrigin); return; } if(w->inherits("QPopupMenu")) w->setBackgroundMode(QWidget::NoBackground); else if(w-> testWFlags(Qt::WType_Popup) && !w->inherits("QListBox")) { w->installEventFilter(menuHandler); } if(w->isTopLevel()){ return; } - - - - if(w->inherits("QComboBox") || + if(w->inherits("QComboBox") || w->inherits("QProgressBar") || w->inherits("QLineEdit") || w->inherits("QRadioButton") || w->inherits("QCheckBox") || w->inherits("QScrollBar")) { w->installEventFilter(this); } if(w->inherits("QLineEdit")){ QPalette pal = w->palette(); pal.setBrush(QColorGroup::Base, baseBrush); w->setPalette(pal); } if(w->inherits("QPushButton")){ applyCustomAttributes((QPushButton *)w); w->installEventFilter(this); } if(w->inherits("QButton") || w-> inherits("QComboBox")){ w-> setBackgroundMode ( QWidget::PaletteBackground ); w->setBackgroundOrigin ( QWidget::ParentOrigin); } bool isViewport = qstrcmp(w->name(), "qt_viewport") == 0 || qstrcmp(w->name(), "qt_clipped_viewport") == 0; bool isViewportChild = w->parent() && ((qstrcmp(w->parent()->name(), "qt_viewport") == 0) || (qstrcmp(w->parent()->name(), "qt_clipped_viewport") == 0)); if(isViewport && w->parent() && qstrcmp(w->parent()->name(), "proxyview") == 0){ w->setBackgroundMode(QWidget::X11ParentRelative); return; } if(isViewportChild){ if(w->inherits("QButton") || w->inherits("QComboBox")){ if(w->parent()){ // heh, only way to test for KHTML children ;-) if(w->parent()->parent()){ if(w->parent()->parent()->parent() && w->parent()->parent()->parent()->inherits("KHTMLView")){ w->setAutoMask(true); w->setBackgroundMode(QWidget::NoBackground); } } } return; } } if(w->inherits("QHeader")){ w->setMouseTracking(true); w->installEventFilter(this); } if(w-> inherits("QToolButton")&&w->parent()->inherits("QToolBar")) { ((QToolButton*)w)->setAutoRaise (flatTBButtons); if ( flatTBButtons ) w->setBackgroundOrigin(QWidget::ParentOrigin); } if(w-> inherits("QToolBarSeparator")&&w->parent()->inherits("QToolBar")) { ((QFrame *) w)-> setFrameShape ( QFrame::NoFrame ); } if(w->ownPalette() && !w->inherits("QButton") && !w->inherits("QComboBox")){ return; } if(w->parent() && w->parent()->isWidgetType() && !((QWidget*)w->parent())-> palette().active().brush(QColorGroup::Background).pixmap()){ qWarning("No parent pixmap for child widget %s", w->className()); return; } if(!isViewport && !isViewportChild && !w->testWFlags(WType_Popup) && !( !w-> inherits("QLineEdit") && w-> parent() && w-> parent()-> isWidgetType ( ) && w-> parent()-> inherits ( "QMultiLineEdit" ))) { if(w->backgroundMode() == QWidget::PaletteBackground || w->backgroundMode() == QWidget::PaletteButton){ w->setBackgroundMode(w->parentWidget()->backgroundMode( )/*QWidget::X11ParentRelative*/); w->setBackgroundOrigin(QWidget::ParentOrigin); // w->setBackgroundMode(QWidget::NoBackground); } } if ( !w-> inherits("QFrame") || (((QFrame*) w)-> frameShape () == QFrame::NoFrame )) w-> setBackgroundOrigin ( QWidget::ParentOrigin ); else if ( w-> inherits("QFrame") ) w->setBackgroundOrigin ( QWidget::WidgetOrigin ); if ( w->parentWidget()->inherits ( "QWidgetStack" )) { w->setBackgroundOrigin ( QWidget::WidgetOrigin ); } } void LiquidStyle::unPolish(QWidget *w) { if(w->inherits("QMenuBar")){ ((QFrame *)w)->setLineWidth(1); w->setBackgroundMode(QWidget::PaletteBackground); return; } if(w->inherits("QPopupMenu")) w->setBackgroundMode(QWidget::PaletteButton); else if(w-> testWFlags(Qt::WType_Popup) && !w->inherits("QListBox")) { w->removeEventFilter(menuHandler); } if(w->isTopLevel()) return; // for viewport children, don't just check for NoBackground.... bool isViewportChild = w->parent() && ((qstrcmp(w->parent()->name(), "qt_viewport") == 0) || (qstrcmp(w->parent()->name(), "qt_clipped_viewport") == 0)); w->unsetPalette(); if(w->backgroundMode() == QWidget::X11ParentRelative || isViewportChild){ if(w->inherits("QPushButton")) w->setBackgroundMode(QWidget::PaletteButton); else w->setBackgroundMode(QWidget::PaletteBackground); } if(isViewportChild) w->setAutoMask(false); if(w->inherits("QPushButton")){ unapplyCustomAttributes((QPushButton *)w); w->removeEventFilter(this); } /* if(w->inherits("QPushButton") || w-> inherits("QComboBox")){ w-> setBackgroundMode ( PaletteBackground ); } */ if(w->inherits("QComboBox") || w->inherits("QLineEdit") || w->inherits("QRadioButton") || w->inherits("QCheckBox") || w->inherits("QScrollBar")) { w->removeEventFilter(this); } if(w->inherits("QButton") || w->inherits("QComboBox")){ if(w->parent() && w->parent()->inherits("KHTMLPart")){ w->setAutoMask(false); } } if(w->inherits("QToolBar")){ w->removeEventFilter(this); w->setBackgroundMode(QWidget::PaletteBackground); return; } if(w->inherits("QHeader")){ w->setMouseTracking(false); w->removeEventFilter(this); } } void LiquidStyle::polish(QApplication *app) { QWindowsStyle::polish(app); menuAni = app->isEffectEnabled(UI_AnimateMenu); menuFade = app->isEffectEnabled(UI_FadeMenu); if(menuAni) app->setEffectEnabled(UI_AnimateMenu, false); if(menuFade) app->setEffectEnabled(UI_FadeMenu, false); qt_set_draw_menu_bar_impl((QDrawMenuBarItemImpl) &LiquidStyle::drawMenuBarItem); Config config ( "qpe" ); config. setGroup ( "Liquid-Style" ); // if ( config. readBoolEntry ( "WinDecoration", true )) // QApplication::qwsSetDecoration ( new LiquidDecoration ( )); flatTBButtons = config. readBoolEntry ( "FlatToolButtons", false ); } void LiquidStyle::unPolish(QApplication *app) { QWindowsStyle::unPolish(app); app->setEffectEnabled(UI_AnimateMenu, menuAni); app->setEffectEnabled(UI_FadeMenu, menuFade); qt_set_draw_menu_bar_impl ( 0 ); // QApplication::qwsSetDecoration ( new QPEDecoration ( )); } + +/* !! HACK !! Beware + * + * TT forgot to make the QProgressBar widget styleable in Qt 2.x + * So the only way to customize the drawing, is to intercept the + * paint event - since we have to use protected functions, we need + * to derive a "hack" class from QProgressBar and do the painting + * in there. + * + * - sandman + */ + +class HackProgressBar : public QProgressBar { +public: + HackProgressBar ( ); + + void paint ( QPaintEvent *event, const QColorGroup &g, QPixmap *pix ) + { + QPainter p( this ); + + if ( !contentsRect().contains( event->rect() ) ) { + p.save(); + p.setClipRegion( event->region().intersect(frameRect()) ); + drawFrame( &p); + p.restore(); + } + if ( event->rect().intersects( contentsRect() )) { + p.setClipRegion( event->region().intersect( contentsRect() ) ); + + int x, y, w, h; + contentsRect ( ). rect ( &x, &y, &w, &h ); + + int prog = progress ( ); + int total = totalSteps ( ); + if ( prog < 0 ) + prog = 0; + if ( total <= 0 ) + total = 1; + int bw = w * prog / total; + if ( bw > w ) + bw = w; + + p.setPen(g.button().dark(130)); + p.drawRect(x, y, bw, h); + p.setPen(g.button().light(120)); + p.drawRect(x+1, y+1, bw-2, h-2); + + if(bw >= 4 && h >= 4 && pix) + p.drawTiledPixmap(x+2, y+2, bw-4, h-4, *pix); + + if ( progress ( )>= 0 && totalSteps ( ) > 0 ) { + QString pstr; + pstr. sprintf ( "%d%%", 100 * progress()/totalSteps ()); + p. setPen ( g.text());//g.highlightedText ( )); + p. drawText (x,y,w-1,h-1,AlignCenter,pstr); + } + } + } +}; + + + /* * This is a fun method ;-) Here's an overview. KToolBar grabs resize to * force everything to erase and repaint on resize. This is going away, I'm * trying to get shaped widgets to work right without masking. QPushButton, * QComboBox, and Panel applet handles capture mouse enter and leaves in order * to set the highlightwidget and repaint for mouse hovers. CheckBoxes and * RadioButtons need to do this differently. Qt buffers these in pixmaps and * caches them in QPixmapCache, which is bad for doing things like hover * because the style methods aren't called in paintEvents if everything * is cached. We use our own Paint event handler instead. Taskbuttons and * pager buttons draw into a pixmap buffer, so we handle those with palette * modifications. For QHeader, different header items are actually one widget * that draws multiple items, so we need to check which ID is hightlighted * and draw it. Finally, we also check enter and leave events for QLineEdit, * since if it's inside a combobox we want to highlight the combobox during * hovering in the edit. */ bool LiquidStyle::eventFilter(QObject *obj, QEvent *ev) { if(obj->inherits("QToolBar")){ if(ev->type() == QEvent::Resize){ const QObjectList *tbChildList = obj->children(); QObjectListIt it(*tbChildList); QObject *child; while((child = it.current()) != NULL){ ++it; if(child->isWidgetType()) ((QWidget *)child)->repaint(true); } } } else if(obj->inherits("QPushButton") || obj->inherits("QComboBox")){ QWidget *btn = (QWidget *)obj; if(ev->type() == QEvent::Enter){ if(btn->isEnabled()){ highlightWidget = btn; btn->repaint(false); } } else if(ev->type() == QEvent::Leave){ if(btn == highlightWidget){ highlightWidget = NULL; btn->repaint(false); } } } else if(obj->inherits("QToolButton")){ QToolButton *btn = (QToolButton *)btn; if(!btn->autoRaise()){ if(btn->isEnabled()){ highlightWidget = btn; btn->repaint(false); } } else if(ev->type() == QEvent::Leave){ QWidget *btn = (QWidget *)obj; if(btn == highlightWidget){ highlightWidget = NULL; btn->repaint(false); } } else highlightWidget = NULL; } else if(obj->inherits("QScrollBar")){ QScrollBar *sb = (QScrollBar *)obj; if(ev->type() == QEvent::Enter){ if(sb->isEnabled()){ highlightWidget = sb; sb->repaint(false); } } else if(ev->type() == QEvent::Leave){ if(sb == highlightWidget && !sb->draggingSlider()){ highlightWidget = NULL; sb->repaint(false); } } else if(ev->type() == QEvent::MouseButtonRelease){ QMouseEvent *me = (QMouseEvent *)ev; if(sb == highlightWidget && !sb->rect().contains(me->pos())){ highlightWidget = NULL; sb->repaint(false); } } } else if(obj->inherits("QLineEdit")){ if(obj->parent() && obj->parent()->inherits("QComboBox")){ QWidget *btn = (QComboBox *)obj->parent(); if(ev->type() == QEvent::Enter){ if (btn->isEnabled()){ highlightWidget = btn; btn->repaint(false); } } @@ -1147,193 +1206,210 @@ bool LiquidStyle::eventFilter(QObject *obj, QEvent *ev) QPainter p; p.begin(btn); QFontMetrics fm = btn->fontMetrics(); QSize lsz = fm.size(ShowPrefix, btn->text()); QSize sz = isRadio ? exclusiveIndicatorSize() : indicatorSize(); if(btn->hasFocus()){ QRect r = QRect(0, 0, btn->width(), btn->height()); p.setPen(btn->colorGroup().button().dark(140)); p.drawLine(r.x()+1, r.y(), r.right()-1, r.y()); p.drawLine(r.x(), r.y()+1, r.x(), r.bottom()-1); p.drawLine(r.right(), r.y()+1, r.right(), r.bottom()-1); p.drawLine(r.x()+1, r.bottom(), r.right()-1, r.bottom()); } int x = 0; int y = (btn->height()-lsz.height()+fm.height()-sz.height())/2; if(isRadio) drawExclusiveIndicator(&p, x, y, sz.width(), sz.height(), btn->colorGroup(), btn->isOn(), btn->isDown(), btn->isEnabled()); else drawIndicator(&p, x, y, sz.width(), sz.height(), btn->colorGroup(), btn->state(), btn->isDown(), btn->isEnabled()); x = sz.width() + 6; y = 0; drawItem(&p, sz.width()+6+1, 0, btn->width()-(sz.width()+6+1), btn->height(), AlignLeft|AlignVCenter|ShowPrefix, btn->colorGroup(), btn->isEnabled(), btn->pixmap(), btn->text()); p.end(); return(true); } // for hover, just redraw the indicator (not the text) else if((ev->type() == QEvent::Enter && btn->isEnabled()) || (ev->type() == QEvent::Leave && btn == highlightWidget)){ QButton *btn = (QButton *)obj; bool isRadio = obj->inherits("QRadioButton"); if(ev->type() == QEvent::Enter) highlightWidget = btn; else highlightWidget = NULL; QFontMetrics fm = btn->fontMetrics(); QSize lsz = fm.size(ShowPrefix, btn->text()); QSize sz = isRadio ? exclusiveIndicatorSize() : indicatorSize(); int x = 0; int y = (btn->height()-lsz.height()+fm.height()-sz.height())/2; //if(btn->autoMask()) // btn->erase(x+1, y+1, sz.width()-2, sz.height()-2); QPainter p; p.begin(btn); if(isRadio) drawExclusiveIndicator(&p, x, y, sz.width(), sz.height(), btn->colorGroup(), btn->isOn(), btn->isDown(), btn->isEnabled()); else drawIndicator(&p, x, y, sz.width(), sz.height(), btn->colorGroup(), btn->state(), btn->isDown(), btn->isEnabled()); p.end(); } } else if(obj->inherits("QHeader")){ QHeader *hw = (QHeader *)obj; if(ev->type() == QEvent::Enter){ currentHeader = hw; headerHoverID = -1; } else if(ev->type() == QEvent::Leave){ currentHeader = NULL; if(headerHoverID != -1){ hw->repaint(hw->sectionPos(headerHoverID), 0, hw->sectionSize(headerHoverID), hw->height()); } headerHoverID = -1; } else if(ev->type() == QEvent::MouseMove){ QMouseEvent *me = (QMouseEvent *)ev; int oldHeader = headerHoverID; headerHoverID = hw->sectionAt(me->x()); if(oldHeader != headerHoverID){ // reset old header if(oldHeader != -1){ hw->repaint(hw->sectionPos(oldHeader), 0, hw->sectionSize(oldHeader), hw->height()); } if(headerHoverID != -1){ hw->repaint(hw->sectionPos(headerHoverID), 0, hw->sectionSize(headerHoverID), hw->height()); } } } } - return(false); + else if (obj-> inherits( "QProgressBar" )) { + if ( ev->type() == QEvent::Paint ) { + HackProgressBar *p = (HackProgressBar *) obj; + const QColorGroup &g = p-> colorGroup ( ); + + QPixmap *pix = bevelFillDict.find(g.button().dark(120).rgb()); + if(!pix){ + int h, s, v; + g.button().dark(120).hsv(&h, &s, &v); + pix = new QPixmap(*bevelFillPix); + adjustHSV(*pix, h, s, v); + bevelFillDict.insert(g.button().dark(120).rgb(), pix); + } + p-> paint ((QPaintEvent *) ev, g, pix ); + return true; + } + } + return false ; } void LiquidStyle::drawButton(QPainter *p, int x, int y, int w, int h, const QColorGroup &g, bool sunken, const QBrush *) { drawRoundButton(p, sunken ? g.background() : g.button(), g.background(), x, y, w, h); } void LiquidStyle::drawToolButton(QPainter *p, int x, int y, int w, int h, const QColorGroup &g, bool sunken, const QBrush *) { if(p->device()->devType() != QInternal::Widget){ // drawing into a temp pixmap, don't use mask QColor c = sunken ? g.button() : g.background(); p->setPen(c.dark(130)); p->drawRect(x, y, w, h); p->setPen(c.light(105)); p->drawRect(x+1, y+1, w-2, h-2); // fill QPixmap *pix = bevelFillDict.find(c.rgb()); if(!pix){ int h, s, v; c.hsv(&h, &s, &v); pix = new QPixmap(*bevelFillPix); adjustHSV(*pix, h, s, v); bevelFillDict.insert(c.rgb(), pix); } p->drawTiledPixmap(x+2, y+2, w-4, h-4, *pix); } else{ drawClearBevel(p, x, y, w, h, sunken ? g.button() : highlightWidget == p->device() ? g.button().light(110) : g.background(), g.background()); } } void LiquidStyle::drawPushButton(QPushButton *btn, QPainter *p) { QRect r = btn->rect(); bool sunken = btn->isOn() || btn->isDown(); QColorGroup g = btn->colorGroup(); //int dw = buttonDefaultIndicatorWidth(); if(btn->hasFocus() || btn->isDefault()){ QColor c = btn->hasFocus() ? g.button().light(110) : g.background(); QPixmap *pix = bevelFillDict.find(c.rgb()); if(!pix){ int h, s, v; c.hsv(&h, &s, &v); pix = new QPixmap(*bevelFillPix); adjustHSV(*pix, h, s, v); bevelFillDict.insert(c.rgb(), pix); } p->setPen(c.dark(150)); p->drawLine(r.x()+1, r.y(), r.right()-1, r.y()); p->drawLine(r.x(), r.y()+1, r.x(), r.bottom()-1); p->drawLine(r.right(), r.y()+1, r.right(), r.bottom()-1); p->drawLine(r.x()+1, r.bottom(), r.right()-1, r.bottom()); p->drawTiledPixmap(r.x()+1, r.y()+1, r.width()-2, r.height()-2, *pix); } QColor newColor = btn == highlightWidget || sunken ? g.button().light(120) : g.button(); drawRoundButton(p, newColor, g.background(), r.x(), r.y(), r.width(), r.height(), !btn->autoMask(), sunken, btn->isDefault() || btn->autoDefault() || btn->hasFocus(), btn->autoMask()); } void LiquidStyle::drawPushButtonLabel(QPushButton *btn, QPainter *p) { int x1, y1, x2, y2, w, h; btn->rect().coords(&x1, &y1, &x2, &y2); w = btn->width(); h = btn->height(); bool act = btn->isOn() || btn->isDown(); if(act){ ++x1, ++y1; } // Draw iconset first, if any if ( btn->iconSet() && !btn->iconSet()->isNull() ) { QIconSet::Mode mode = btn->isEnabled() ? QIconSet::Normal : QIconSet::Disabled; if ( mode == QIconSet::Normal && btn->hasFocus() ) mode = QIconSet::Active; |