-rw-r--r-- | noncore/styles/web/webstyle.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/noncore/styles/web/webstyle.cpp b/noncore/styles/web/webstyle.cpp index 10d9791..cd3cf08 100644 --- a/noncore/styles/web/webstyle.cpp +++ b/noncore/styles/web/webstyle.cpp @@ -1,293 +1,293 @@ /* * Copyright (C) 2001 Rik Hemsley (rikkus) <rik@kde.org> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef INCLUDE_MENUITEM_DEF #define INCLUDE_MENUITEM_DEF #endif #include <qmenudata.h> #include <qpalette.h> #include <qbitmap.h> #include <qtabbar.h> #include <qpointarray.h> #include <qscrollbar.h> #include <qframe.h> #include <qpushbutton.h> #include <qdrawutil.h> #include <qpainter.h> #include "webstyle.h" -static const int _indicatorSize = 13; +static const int _indicatorSize = 9; static QButton * _highlightedButton = 0; static const int _scrollBarExtent = 12; static QFrame * _currentFrame = 0; static int _savedFrameLineWidth; static int _savedFrameMidLineWidth; static ulong _savedFrameStyle; static QColor contrastingForeground(const QColor & fg, const QColor & bg) { int h, s, vbg, vfg; bg.hsv(&h, &s, &vbg); fg.hsv(&h, &s, &vfg); int diff(vbg - vfg); if ((diff > -72) && (diff < 72)) { return (vbg < 128) ? Qt::white : Qt::black; } else { return fg; } } // Gotta keep it separated. static void scrollBarControlsMetrics ( const QScrollBar * sb, int sliderStart, int /* sliderMin */, int sliderMax, int sliderLength, int buttonDim, QRect & rSub, QRect & rAdd, QRect & rSubPage, QRect & rAddPage, QRect & rSlider ) { bool horizontal = sb->orientation() == QScrollBar::Horizontal; int len = horizontal ? sb->width() : sb->height(); int extent = horizontal ? sb->height() : sb->width(); QColorGroup g = sb->colorGroup(); if (sliderStart > sliderMax) sliderStart = sliderMax; int sliderEnd = sliderStart + sliderLength; int addX, addY; int subX, subY; int subPageX, subPageY, subPageW, subPageH; int addPageX, addPageY, addPageW, addPageH; int sliderX, sliderY, sliderW, sliderH; if (horizontal) { subY = 0; addY = 0; subX = 0; addX = buttonDim; subPageX = buttonDim * 2; subPageY = 0; subPageW = sliderStart - 1; subPageH = extent; addPageX = sliderEnd; addPageY = 0; addPageW = len - sliderEnd; addPageH = extent; sliderX = sliderStart; sliderY = 0; sliderW = sliderLength; sliderH = extent; } else { subX = 0; addX = 0; subY = len - buttonDim * 2; addY = len - buttonDim; subPageX = 0; subPageY = 0; subPageW = extent; subPageH = sliderStart; addPageX = 0; addPageY = sliderEnd; addPageW = extent; addPageH = subY - sliderEnd; sliderX = 0; sliderY = sliderStart; sliderW = extent; sliderH = sliderLength; } rSub .setRect( subX, subY, buttonDim, buttonDim); rAdd .setRect( addX, addY, buttonDim, buttonDim); rSubPage .setRect(subPageX, subPageY, subPageW, subPageH); rAddPage .setRect(addPageX, addPageY, addPageW, addPageH); rSlider .setRect( sliderX, sliderY, sliderW, sliderH); } // Rounded rects my way. static void drawFunkyRect ( QPainter * p, int x, int y, int w, int h, bool small ) { p->translate(x, y); if (small) { p->drawLine( 2, 0, w - 3, 0 ); p->drawLine( w - 1, 2, w - 1, h - 3 ); p->drawLine( w - 3, h - 1, 2, h - 1 ); p->drawLine( 0, h - 3, 0, 2 ); // Use an array of points so that there's only one round-trip with the // X server. QCOORD pointList[] = { 1, 1, w - 2, 1, w - 2, h - 2, 1, h - 2 }; p->drawPoints(QPointArray(4, pointList)); } else { p->drawLine( 3, 0, w - 4, 0 ); p->drawLine( w - 1, 3, w - 1, h - 4 ); p->drawLine( w - 4, h - 1, 3, h - 1 ); p->drawLine( 0, h - 4, 0, 3 ); QCOORD pointList[] = { 1, 2, 2, 1, w - 3, 1, w - 2, 2, w - 2, h - 3, w - 3, h - 2, 2, h - 2, 1, h - 3 }; p->drawPoints(QPointArray(8, pointList)); } p->translate(-x, -y); } WebStyle::WebStyle() : QWindowsStyle() { setButtonDefaultIndicatorWidth(1); setScrollBarExtent(_scrollBarExtent, _scrollBarExtent); setButtonMargin( 3 ); setSliderThickness(_scrollBarExtent ); } WebStyle::~WebStyle() { // Empty. } void WebStyle::polish(QApplication *) { // Empty. } void WebStyle::polish(QPalette &) { // Empty. } void WebStyle::unPolish(QApplication *) { // Empty. } void WebStyle::polish(QWidget * w) { if (w->inherits("QPushButton")) w->installEventFilter(this); else if (w->inherits("QGroupBox") || w->inherits("QFrame")) { QFrame * f(static_cast<QFrame *>(w)); if (f->frameStyle() != QFrame::NoFrame) { _currentFrame = f; _savedFrameLineWidth = f->lineWidth(); _savedFrameMidLineWidth = f->midLineWidth(); _savedFrameStyle = f->frameStyle(); if (f->frameShape() == QFrame::HLine || f->frameShape() == QFrame::VLine) { f->setMidLineWidth(1); f->setFrameStyle(f->frameShape() | QFrame::Plain); } else { f->setLineWidth(1); f->setFrameStyle(QFrame::Box | QFrame::Plain); } } } } void WebStyle::unPolish(QWidget * w) { if (w->inherits("QPushButton")) w->removeEventFilter(this); else if (w == _currentFrame) { QFrame * f(static_cast<QFrame *>(w)); f->setLineWidth(_savedFrameLineWidth); f->setMidLineWidth(_savedFrameMidLineWidth); f->setFrameStyle(_savedFrameStyle); } } @@ -468,513 +468,513 @@ WebStyle::drawScrollBarControls p->drawRect(rAdd); Qt::ArrowType t = sb->orientation() == Horizontal ? Qt::RightArrow : Qt::DownArrow; // Is it me or is KStyle::drawArrow broken ? drawArrow ( p, t, true, // FIXME - down ? rAdd.x(), rAdd.y(), rAdd.width(), rAdd.height(), g, true // FIXME - enabled ? ); } if (controls & SubLine && rSub.isValid()) { bool active(activeControl & SubLine); QColor c(active ? g.highlight() : g.dark()); p->setPen(c); p->setBrush(g.button()); p->drawRect(rSub); Qt::ArrowType t = sb->orientation() == Horizontal ? Qt::LeftArrow : Qt::UpArrow; drawArrow ( p, t, true, // FIXME - down ? rSub.x(), rSub.y(), rSub.width(), rSub.height(), g, true // FIXME - enabled ? ); } if (controls & SubPage && rSubPage.isValid()) { p->setPen(g.mid()); p->setBrush(g.base()); p->drawRect(rSubPage); } if (controls & AddPage && rAddPage.isValid()) { p->setPen(g.mid()); p->setBrush(g.base()); p->drawRect(rAddPage); } if (controls & Slider && rSlider.isValid()) { p->setPen(activeControl & Slider ? g.highlight() : g.dark()); p->setBrush(g.button()); p->drawRect(rSlider); p->setBrush(g.light()); p->setPen(g.dark()); if (sliderLength > _scrollBarExtent * 2) { int ellipseSize = Horizontal == sb->orientation() ? rSlider.height() - 4 : rSlider.width() - 4 ; QPoint center(rSlider.center()); if (Horizontal == sb->orientation()) { p->drawEllipse ( center.x() - ellipseSize / 2, rSlider.y() + 2, ellipseSize, ellipseSize ); } else { p->drawEllipse ( rSlider.x() + 2, center.y() - ellipseSize / 2, ellipseSize, ellipseSize ); } } } p->restore(); } QStyle::ScrollControl WebStyle::scrollBarPointOver ( const QScrollBar * sb, int sliderStart, const QPoint & point ) { if (!sb->rect().contains(point)) return NoScroll; int sliderMin, sliderMax, sliderLength, buttonDim; scrollBarMetrics(sb, sliderMin, sliderMax, sliderLength, buttonDim); if (sb->orientation() == QScrollBar::Horizontal) { int x = point.x(); if (x <= buttonDim) return SubLine; else if (x <= buttonDim * 2) return AddLine; else if (x < sliderStart) return SubPage; else if (x < sliderStart+sliderLength) return Slider; return AddPage; } else { int y = point.y(); if (y < sliderStart) return SubPage; else if (y < sliderStart + sliderLength) return Slider; else if (y < sliderMax + sliderLength) return AddPage; else if (y < sliderMax + sliderLength + buttonDim) return SubLine; return AddLine; } } void WebStyle::scrollBarMetrics ( const QScrollBar * sb, int & sliderMin, int & sliderMax, int & sliderLength, int & buttonDim ) { // return QWindowsStyle::scrollBarMetrics(sb, sliderMin, sliderMax, // sliderLength, buttonDim ); int maxlen; bool horizontal = sb->orientation() == QScrollBar::Horizontal; int len = (horizontal) ? sb->width() : sb->height(); int extent = (horizontal) ? sb->height() : sb->width(); if (len > (extent - 1) * 2) buttonDim = extent; else buttonDim = len / 2 - 1; if (horizontal) sliderMin = buttonDim * 2; else sliderMin = 1; maxlen = len - buttonDim * 2 - 1; int div = QMAX(1, (sb->maxValue() - sb->minValue() + sb->pageStep() ) ); sliderLength = (sb->pageStep() * maxlen) / div; if (sliderLength < _scrollBarExtent) sliderLength = _scrollBarExtent; if (sliderLength > maxlen) sliderLength = maxlen; sliderMax = sliderMin + maxlen - sliderLength; } QSize WebStyle::indicatorSize() const { return QSize(_indicatorSize, _indicatorSize); } void WebStyle::drawIndicator ( QPainter * p, int x, int y, int w, int h, const QColorGroup & g, int state, bool down, bool enabled ) { p->save(); p->fillRect(x, y, w, h, g.background()); if (enabled) { p->setPen(down ? g.highlight() : contrastingForeground(g.dark(), g.background())); } else { g.mid(); } p->drawRect(x, y, w, h); if (state != QButton::Off) { p->fillRect(x + 2, y + 2, w - 4, h - 4, enabled ? g.highlight() : g.mid()); if (state == QButton::NoChange) { p->fillRect(x + 4, y + 4, w - 8, h - 8, g.background()); } } p->restore(); } QSize WebStyle::exclusiveIndicatorSize() const { - return QSize(_indicatorSize, _indicatorSize); + return QSize(_indicatorSize+2, _indicatorSize+2); } void WebStyle::drawExclusiveIndicator ( QPainter * p, int x, int y, int w, int h, const QColorGroup & g, bool on, bool down, bool enabled ) { p->save(); p->fillRect(x, y, w, h, g.background()); if (enabled) { p->setPen(down ? g.highlight() : contrastingForeground(g.dark(), g.background())); } else { p->setPen(g.mid()); } p->setBrush(g.brush(QColorGroup::Background)); // Avoid misshapen ellipses. Qt or X bug ? Who knows... if (0 == w % 2) --w; if (0 == h % 2) --h; p->drawEllipse(x, y, w, h); if (on) { p->setPen(enabled ? g.highlight() : g.mid()); p->setBrush(enabled ? g.highlight() : g.mid()); p->drawEllipse(x + 3, y + 3, w - 6, h - 6); } p->restore(); } void WebStyle::drawIndicatorMask ( QPainter * p, int x, int y, int w, int h, int /* state */ ) { p->fillRect(x, y, w, h, Qt::color1); } void WebStyle::drawExclusiveIndicatorMask ( QPainter * p, int x, int y, int w, int h, bool /* on */ ) { if (0 == w % 2) --w; if (0 == h % 2) --h; p->setPen(Qt::color1); p->setBrush(Qt::color1); p->drawEllipse(x, y, w, h); } void WebStyle::drawComboButton ( QPainter * p, int x, int y, int w, int h, const QColorGroup & g, bool sunken, bool editable, bool enabled, const QBrush * fill ) { p->save(); p->setPen(NoPen); p->setBrush(0 == fill ? g.brush(QColorGroup::Background) : *fill); p->drawRect(x, y, w, h); if (enabled) { if (sunken) p->setPen(contrastingForeground(g.highlight(), g.background())); else p->setPen(contrastingForeground(g.mid(), g.background())); } else { p->setPen(contrastingForeground(g.mid(), g.background())); } drawFunkyRect(p, x, y, w, h, true); p->drawPoint(w - 10, h - 6); p->drawPoint(w - 9, h - 6); p->drawPoint(w - 8, h - 6); p->drawPoint(w - 7, h - 6); p->drawPoint(w - 6, h - 6); p->drawPoint(w - 9, h - 7); p->drawPoint(w - 8, h - 7); p->drawPoint(w - 7, h - 7); p->drawPoint(w - 6, h - 7); p->drawPoint(w - 8, h - 8); p->drawPoint(w - 7, h - 8); p->drawPoint(w - 6, h - 8); p->drawPoint(w - 7, h - 9); p->drawPoint(w - 6, h - 9); p->drawPoint(w - 6, h - 10); if (editable) p->fillRect(comboButtonFocusRect(x, y, w, h), Qt::red); p->restore(); } QRect WebStyle::comboButtonRect(int x, int y, int w, int h) { return QRect(x + 2, y + 2, w - 20, h - 4); } QRect WebStyle::comboButtonFocusRect(int x, int y, int w, int h) { return QRect(x + 2, y + 2, w - 20, h - 4); } int WebStyle::sliderLength() const { return 13; } void WebStyle::drawSliderGroove ( QPainter * p, int x, int y, int w, int h, const QColorGroup & g, QCOORD /* c */, Orientation o ) { p->save(); p->setPen(QPen(g.dark(), 0, Qt::DotLine)); if( o == Qt::Horizontal ) p->drawLine(x, y + h / 2, w, y + h / 2); else if( o == Qt::Vertical ) p->drawLine(x + w / 2, y, x + w / 2, h); p->restore(); } void WebStyle::drawArrow ( QPainter * p, Qt::ArrowType type, bool down, int x, int y, int w, int h, const QColorGroup & g, bool enabled, const QBrush * fill ) { QWindowsStyle::drawArrow(p, type, down, x, y, w, h, g, enabled, fill); } void WebStyle::drawSlider ( QPainter * p, int x, int y, int w, int h, const QColorGroup & g, Orientation o, bool /* tickAbove */, bool /* tickBelow */ ) { p->save(); p->fillRect(x + 1, y + 1, w - 2, h - 2, g.background()); p->setPen(g.dark()); p->setBrush(g.light()); int sl = sliderLength(); if( o == Qt::Horizontal ) p->drawEllipse(x, y + h / 2 - sl / 2, sl, sl); else if( o == Qt::Vertical ) p->drawEllipse(x + w / 2 - sl / 2, y, sl, sl); p->restore(); } void WebStyle::drawPopupMenuItem ( QPainter * p, bool checkable, int maxpmw, int tab, QMenuItem * mi, const QPalette & pal, bool act, bool enabled, int x, int y, int w, int h |