Diffstat (limited to 'noncore/styles/liquid/liquid.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/styles/liquid/liquid.cpp | 129 |
1 files changed, 68 insertions, 61 deletions
diff --git a/noncore/styles/liquid/liquid.cpp b/noncore/styles/liquid/liquid.cpp index 51814e7..77cf198 100644 --- a/noncore/styles/liquid/liquid.cpp +++ b/noncore/styles/liquid/liquid.cpp @@ -1,21 +1,21 @@ /*- * Copyright (C)QPL 2001 Daniel M. Duley. All rights reserved. */ // -// (c) 2002 Robert 'sandman' Griebl +// (c) 2002 Robert 'sandman' Griebl // #ifndef INCLUDE_MENUITEM_DEF #define INCLUDE_MENUITEM_DEF #endif #include "liquid.h" -#include "effects.h" +#include "effects.h" #include "htmlmasks.h" #include "embeddata.h" /* OPIE */ #include <opie2/odebug.h> #include <qpe/config.h> @@ -96,13 +96,13 @@ void TransMenuHandler::reloadSettings() 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; @@ -134,49 +134,49 @@ bool TransMenuHandler::eventFilter(QObject *obj, QEvent *ev) } else{ QPixmapEffect::fade(*pix, (((float)opacity)+80)*0.01, color); } pixDict.insert(p->winId(), pix); - - if ( !p->inherits("QPopupMenu")) + + if ( !p->inherits("QPopupMenu")) p->setBackgroundPixmap(*pix); - + QObjectList *ol = p-> queryList("QWidget"); for ( QObjectListIt it( *ol ); it. current ( ); ++it ) { QWidget *wid = (QWidget *) it.current ( ); - + wid-> setBackgroundPixmap(*pix); - wid-> setBackgroundOrigin(QWidget::ParentOrigin); + wid-> setBackgroundOrigin(QWidget::ParentOrigin); } delete ol; } } else if(ev->type() == QEvent::Hide){ if(type == TransStippleBg || type == TransStippleBtn || type == Custom){ -// owarn << "Deleting menu pixmap, width " << pixDict.find(p->winId())->width() << "" << oendl; +// owarn << "Deleting menu pixmap, width " << pixDict.find(p->winId())->width() << "" << oendl; pixDict.remove(p->winId()); - if ( !p->inherits("QPopupMenu")) + if ( !p->inherits("QPopupMenu")) p->setBackgroundMode(QWidget::PaletteBackground); QObjectList *ol = p-> queryList("QWidget"); for ( QObjectListIt it( *ol ); it. current ( ); ++it ) { QWidget *wid = (QWidget *) it.current ( ); - + wid-> setBackgroundMode( QWidget::PaletteBackground ); } delete ol; } } return(false); } - + LiquidStyle::LiquidStyle() :QWindowsStyle() { setName ( "LiquidStyle" ); @@ -496,13 +496,13 @@ void LiquidStyle::drawRoundButton(QPainter *painter, const QColor &c, QPixmap* LiquidStyle::processEmbedded(const char *label, int h, int s, int v, bool blend) { QImage img(qembed_findImage(label)); img.detach(); if(img.isNull()){ // shouldn't happen, been tested - owarn << "Invalid embedded label " << label << "" << oendl; + owarn << "Invalid embedded label " << label << "" << oendl; return(NULL); } if(img.depth() != 32) img = img.convertDepth(32); unsigned int *data = (unsigned int *)img.bits(); int total = img.width()*img.height(); @@ -596,16 +596,16 @@ QPixmap* LiquidStyle::getPixmap(BitmapData item) case Tab: pixmaps[Tab] = processEmbedded("tab", bH, bS, bV /*, true*/); break; case TabDown: pixmaps[TabDown] = processEmbedded("tab", btnH, btnS, btnV /*, true*/); - break; + break; case TabFocus: pixmaps[TabFocus] = processEmbedded("tab", btnHoverH, btnHoverS, btnHoverV /*, true*/); - break; + break; case CB: pixmaps[CB] = processEmbedded("checkbox", bH, bS, bV /*, true*/); break; case CBHover: pixmaps[CBHover] = processEmbedded("checkbox", btnHoverH, btnHoverS, btnHoverV /*, true*/); @@ -798,22 +798,22 @@ void LiquidStyle::polish(QWidget *w) 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") && + else if(w-> testWFlags(Qt::WType_Popup) && + !w->inherits("QListBox") && ( qstrcmp ( w-> name(), "automatic what's this? widget" ) != 0 )) { w->installEventFilter(menuHandler); } - + if(w->isTopLevel()){ return; } - + if(w->inherits("QRadioButton") || w->inherits("QCheckBox") || w->inherits("QProgressBar")) { w->installEventFilter(this); } if(w->inherits("QButton") || w-> inherits("QComboBox")){ w-> setBackgroundMode ( QWidget::PaletteBackground ); @@ -862,26 +862,26 @@ void LiquidStyle::polish(QWidget *w) 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()){ - owarn << "No parent pixmap for child widget " << w->className() << "" << oendl; + owarn << "No parent pixmap for child widget " << w->className() << "" << oendl; 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 ); + w-> setBackgroundOrigin ( QWidget::ParentOrigin ); else if ( w-> inherits("QFrame") ) w->setBackgroundOrigin ( QWidget::WidgetOrigin ); if ( w->parentWidget()->inherits ( "QWidgetStack" )) { w->setBackgroundOrigin ( QWidget::WidgetOrigin ); } @@ -894,13 +894,13 @@ void LiquidStyle::unPolish(QWidget *w) w->setBackgroundMode(QWidget::PaletteBackground); return; } if(w->inherits("QPopupMenu")) w->setBackgroundMode(QWidget::PaletteButton); - else if(w-> testWFlags(Qt::WType_Popup) && + else if(w-> testWFlags(Qt::WType_Popup) && !w->inherits("QListBox") && ( qstrcmp ( w-> name(), "automatic what's this? widget" ) != 0 )) { w->removeEventFilter(menuHandler); } if(w->isTopLevel()) @@ -956,51 +956,51 @@ void LiquidStyle::polish(QApplication *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 )) + +// 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 + * 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(); @@ -1028,14 +1028,14 @@ public: 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 ) { + + 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); } } @@ -1051,13 +1051,13 @@ public: */ class HackToolButton : public QToolButton { public: HackToolButton ( ); - + void paint ( QPaintEvent *ev ) { erase ( ev-> region ( )); QPainter p ( this ); style ( ). drawToolButton ( this, &p ); drawButtonLabel ( &p ); @@ -1095,13 +1095,13 @@ bool LiquidStyle::eventFilter(QObject *obj, QEvent *ev) } } } else if(obj->inherits("QToolButton")){ QToolButton *btn = (QToolButton *)obj; - if(ev->type() == QEvent::FocusIn ){ // && !btn-> autoRaise () + if(ev->type() == QEvent::FocusIn ){ // && !btn-> autoRaise () if(btn->isEnabled()){ highlightWidget = btn; btn->repaint(false); } } else if(ev->type() == QEvent::FocusOut ){ @@ -1135,13 +1135,13 @@ bool LiquidStyle::eventFilter(QObject *obj, QEvent *ev) 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 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 @@ -1190,25 +1190,25 @@ bool LiquidStyle::eventFilter(QObject *obj, QEvent *ev) } } 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 true; } - } + } return false ; } void LiquidStyle::drawButton(QPainter *p, int x, int y, int w, int h, const QColorGroup &g, bool sunken, const QBrush *) @@ -1300,21 +1300,25 @@ void LiquidStyle::drawPushButtonLabel(QPushButton *btn, QPainter *p) if ( btn->iconSet() && !btn->iconSet()->isNull() ) { QIconSet::Mode mode = btn->isEnabled() ? QIconSet::Normal : QIconSet::Disabled; if ( mode == QIconSet::Normal && btn->hasFocus() ) mode = QIconSet::Active; - QPixmap pixmap = btn->iconSet()->pixmap( QIconSet::Small, mode ); + QPixmap pixmap; + if ( mode == QIconSet::Disabled ) + pixmap = btn->iconSet()->pixmap( QIconSet::Automatic, mode ); + else + pixmap = btn->iconSet()->pixmap(); int pixw = pixmap.width(); int pixh = pixmap.height(); p->drawPixmap( x1+6, y1+h/2-pixh/2, pixmap ); x1 += pixw + 8; w -= pixw + 8; } - + if(act){ QFont font = btn->font(); font.setBold(true); p->setFont(font); QColor shadow(btn->colorGroup().button().dark(130)); drawItem( p, x1+1, y1+1, w, h, @@ -1402,25 +1406,25 @@ void LiquidStyle::drawComboButton(QPainter *painter, int x, int y, int w, int h, bool isActive = false; if (( painter->device()->devType() == QInternal::Widget ) && ( ( qApp-> focusWidget ( ) == painter-> device ( )) || ( edit && - ((QWidget *) painter-> device ( ))-> inherits ( "QComboBox" ) && + ((QWidget *) painter-> device ( ))-> inherits ( "QComboBox" ) && ( qApp-> focusWidget ( ) == ((QComboBox *) painter->device())->lineEdit ( ) || qApp-> focusWidget ( ) == ((QComboBox *) painter->device())->listBox ( )) ) ) ) { isActive = true; } - + bool isMasked = false; if(painter->device()->devType() == QInternal::Widget) isMasked = ((QWidget*)painter->device())->autoMask(); - // TODO: Do custom code, don't just call drawRoundButton into a pixmap + // TODO: Do custom code, don't just call drawRoundButton into a pixmap QPixmap tmpPix(w, h); QPainter p(&tmpPix); drawRoundButton(&p, g.button(), g.background(), 0, 0, w, h, false, sunken, false, isMasked); if(!isActive){ @@ -1475,13 +1479,13 @@ QRect LiquidStyle::comboButtonRect(int x, int y, int w, int h) return(QRect(x+9, y+3, w - (h / 3) - 20, h-6)); } QRect LiquidStyle::comboButtonFocusRect(int /*x*/, int /*y*/, int /*w*/, int /*h*/) { return QRect ( ); - + // return(QRect(x+5, y+3, w-(h/3)-13, h-5)); } void LiquidStyle::drawScrollBarControls(QPainter *p, const QScrollBar *sb, int sliderStart, uint controls, uint activeControl) @@ -1630,28 +1634,28 @@ void LiquidStyle::drawScrollBarControls(QPainter *p, const QScrollBar *sb, if(controls & Slider){ if(sliderR.width() >= 16){ painter.drawPixmap(sliderR.x(), sliderR.y()+1, *getPixmap(HSBSliderTop)); painter.drawTiledPixmap(sliderR.x()+8, sliderR.y()+1, sliderR.width()-16, 13, *getPixmap(HSBSliderMid)); - painter.drawPixmap(sliderR.right()-8, sliderR.y()+1, + painter.drawPixmap(sliderR.right()-8, sliderR.y()+1, *getPixmap(HSBSliderBtm)); } else if(sliderR.width() >= 8){ int m = sliderR.width()/2; painter.drawPixmap(sliderR.x(), sliderR.y()+1, *getPixmap(HSBSliderTop), 0, 0, m, 13); - painter.drawPixmap(sliderR.right()-8, sliderR.y()+1, + painter.drawPixmap(sliderR.right()-8, sliderR.y()+1, *getPixmap(HSBSliderBtm), 8-m, 0, m, 13); } else{ painter.setPen(g.button().dark(210)); drawRoundRect(&painter, sliderR.x(), sliderR.y()+1, sliderR.width(), 13); painter.drawTiledPixmap(sliderR.x()+1, sliderR.y()+2, - sliderR.width()-2, 11, + sliderR.width()-2, 11, *getPixmap(HSBSliderMid), 0, 1); } } painter.setPen(g.mid()); painter.drawLine(bgR.x(), bgR.y(), bgR.right(), bgR.y()); painter.drawLine(bgR.x(), bgR.bottom(), bgR.right(), bgR.bottom()); @@ -1973,36 +1977,36 @@ void LiquidStyle::drawArrow(QPainter *p, Qt::ArrowType type, bool on, int x, p->drawLineSegments(a); } void LiquidStyle::drawMenuBarItem(QPainter *p, int x, int y, int w, int h, QMenuItem *mi, QColorGroup &g, bool /*enabled*/, bool active ) -{ +{ if(active){ - x -= 2; // Bug in Qt/E + x -= 2; // Bug in Qt/E y -= 2; w += 2; h += 2; } - + QWidget *parent = (QWidget *)p->device(); p->setBrushOrigin(parent->pos()); parent->erase(x, y, w, h); - + if(menuHandler->useShadowText()){ QColor shadow; if(p->device() && p->device()->devType() == QInternal::Widget && ((QWidget *)p->device())->inherits("QMenuBar")){ shadow = ((QMenuBar*)p->device())->isTopLevel() ? g.button().dark(130) : g.background().dark(130); } else shadow = g.background().dark(130); QPixmap *dummy = 0; - + if ( mi-> pixmap ( ) && !mi-> pixmap ( )-> isNull ( )) { dummy = new QPixmap ( mi-> pixmap ( )-> size ( )); QBitmap dummy_mask ( dummy-> size ( )); dummy_mask. fill ( color1 ); dummy-> setMask ( dummy_mask ); } @@ -2152,13 +2156,17 @@ static const int windowsRightBorder = 12; return; } if(mi->iconSet()) { QIconSet::Mode mode = dis? QIconSet::Disabled : QIconSet::Normal; if (!dis) mode = QIconSet::Active; - QPixmap pixmap = mi->iconSet()->pixmap(QIconSet::Small, mode); + QPixmap pixmap; + if ( mode == QIconSet::Disabled ) + pixmap = mi->iconSet()->pixmap( QIconSet::Automatic, mode ); + else + pixmap = mi->iconSet()->pixmap(); int pixw = pixmap.width(); int pixh = pixmap.height(); QRect cr(x, y, checkcol, h); QRect pmr(0, 0, pixw, pixh); pmr.moveCenter( cr.center() ); p->setPen(itemg.highlightedText()); @@ -2233,14 +2241,13 @@ int LiquidStyle::popupMenuItemHeight(bool /*checkable*/, QMenuItem *mi, int h = 0; if (mi->pixmap()) h = mi->pixmap()->height(); if (mi->iconSet()) - h = QMAX(mi->iconSet()-> - pixmap(QIconSet::Small, QIconSet::Normal).height(), h); + h = QMAX(mi->iconSet()->pixmap().height(), h); h = QMAX(fm.height() + 4, h); // we want a minimum size of 18 h = QMAX(h, 18); @@ -2427,13 +2434,13 @@ void LiquidStyle::drawPanel(QPainter *p, int x, int y, int w, int h, p->setPen(g.light()); p->drawLine(x, y2, x2, y2); p->drawLine(x2, y, x2, y2); p->setPen(g.mid()); p->drawLine(x, y, x2, y); p->drawLine(x, y, x, y2); - + p->setPen(g.midlight()); p->drawLine(x+1, y2-1, x2-1, y2-1); p->drawLine(x2-1, y+1, x2-1, y2-1); p->setPen(g.dark()); p->drawLine(x+1, y+1, x2-1, y+1); p->drawLine(x+1, y+1, x+1, y2-1); @@ -2485,17 +2492,17 @@ void LiquidStyle::intensity(QPixmap &pix, float percent) int segColors = image.depth() > 8 ? 256 : image.numColors(); unsigned char *segTbl = new unsigned char[segColors]; int pixels = image.depth() > 8 ? image.width()*image.height() : image.numColors(); unsigned int *data = image.depth() > 8 ? (unsigned int *)image.bits() : (unsigned int *)image.colorTable(); - + bool brighten = (percent >= 0); if(percent < 0) percent = -percent; - + if(brighten){ // keep overflow check out of loops for(i=0; i < segColors; ++i){ tmp = (int)(i*percent); if(tmp > 255) tmp = 255; segTbl[i] = tmp; @@ -2506,13 +2513,13 @@ void LiquidStyle::intensity(QPixmap &pix, float percent) tmp = (int)(i*percent); if(tmp < 0) tmp = 0; segTbl[i] = tmp; } } - + if(brighten){ // same here for(i=0; i < pixels; ++i){ r = qRed(data[i]); g = qGreen(data[i]); b = qBlue(data[i]); r = r + segTbl[r] > 255 ? 255 : r + segTbl[r]; |