summaryrefslogtreecommitdiff
authorzecke <zecke>2004-08-02 18:32:18 (UTC)
committer zecke <zecke>2004-08-02 18:32:18 (UTC)
commitd3cc020707bd4743cacd11f1d01d024b62deef8c (patch) (side-by-side diff)
treec7a77113f852c3b53bd0bde1ac92a181cda22acb
parentbef879b6de5bfba274c8e5ac2cebf14366db2826 (diff)
downloadopie-d3cc020707bd4743cacd11f1d01d024b62deef8c.zip
opie-d3cc020707bd4743cacd11f1d01d024b62deef8c.tar.gz
opie-d3cc020707bd4743cacd11f1d01d024b62deef8c.tar.bz2
Initial revision
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/styles/README7
-rw-r--r--noncore/styles/config.in4
-rw-r--r--noncore/styles/plugin.cpp71
-rw-r--r--noncore/styles/plugin.h54
-rw-r--r--noncore/styles/web.pro14
-rw-r--r--noncore/styles/web/.cvsignore3
-rw-r--r--noncore/styles/web/README7
-rw-r--r--noncore/styles/web/config.in4
-rw-r--r--noncore/styles/web/plugin.cpp71
-rw-r--r--noncore/styles/web/plugin.h54
-rw-r--r--noncore/styles/web/web.pro14
-rw-r--r--noncore/styles/web/webstyle.cpp1183
-rw-r--r--noncore/styles/web/webstyle.h299
-rw-r--r--noncore/styles/webstyle.cpp1183
-rw-r--r--noncore/styles/webstyle.h299
15 files changed, 3267 insertions, 0 deletions
diff --git a/noncore/styles/README b/noncore/styles/README
new file mode 100644
index 0000000..42e198d
--- a/dev/null
+++ b/noncore/styles/README
@@ -0,0 +1,7 @@
+Widget style which mimicks the 'flat' appearance favored by many
+web sites. If you set the scrollbar and (exclusive) indicator sizes
+to something small (say 8 pixels) then this makes a nice style for
+embedded apps.
+
+Maintainer: Rik Hemsley (rikkus) <rik@kde.org>
+
diff --git a/noncore/styles/config.in b/noncore/styles/config.in
new file mode 100644
index 0000000..c943311
--- a/dev/null
+++ b/noncore/styles/config.in
@@ -0,0 +1,4 @@
+ config WEBSTYLE
+ boolean "WEB Style from KDE2"
+ default "n"
+ depends ( LIBQPE || LIBQPE-X11 )
diff --git a/noncore/styles/plugin.cpp b/noncore/styles/plugin.cpp
new file mode 100644
index 0000000..da2f371
--- a/dev/null
+++ b/noncore/styles/plugin.cpp
@@ -0,0 +1,71 @@
+/*
+               =. This file is part of the OPIE Project
+             .=l. Copyright (c) 2004 Holger Hans Peter Freyther <zecke@handhelds.org>
+           .>+-=
+ _;:,     .>    :=|. This program is free software; you can
+.> <`_,   >  .   <= redistribute it and/or modify it under
+:`=1 )Y*s>-.--   : the terms of the GNU General Public
+.="- .-=="i,     .._ License as published by the Free Software
+ - .   .-<_>     .<> Foundation; either version 2 of the License,
+     ._= =}       : or (at your option) any later version.
+    .%`+i>       _;_.
+    .i_,=:_.      -<s. This program 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
+  -_. . .   )=.  = General Public License along with
+    --        :-=` this library; see the file COPYING.
+ If not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+*/
+
+#include "plugin.h"
+
+#include "webstyle.h"
+
+#include <qapplication.h>
+
+WebStyleImpl::WebStyleImpl()
+ : m_style( 0l )
+{}
+
+/* Qt will delete the style */
+WebStyleImpl::~WebStyleImpl()
+{}
+
+QRESULT WebStyleImpl::queryInterface( const QUuid& uuid, QUnknownInterface **iface ) {
+ *iface = 0;
+
+ if ( uuid == IID_QUnknown || uuid == IID_Style)
+ *iface = this;
+ else
+ return QS_FALSE;
+
+ (*iface)->addRef();
+
+ return QS_OK;
+}
+
+QStyle* WebStyleImpl::style() {
+ if (!m_style )
+ m_style = new WebStyle();
+ return m_style;
+}
+
+QString WebStyleImpl::name()const {
+ return qApp->translate("WebStyle", "Web", "Name of the style Web");
+}
+
+
+Q_EXPORT_INTERFACE()
+{
+ Q_CREATE_INSTANCE( WebStyleImpl )
+}
+
diff --git a/noncore/styles/plugin.h b/noncore/styles/plugin.h
new file mode 100644
index 0000000..3205541
--- a/dev/null
+++ b/noncore/styles/plugin.h
@@ -0,0 +1,54 @@
+/*
+               =. This file is part of the OPIE Project
+             .=l. Copyright (c) 2004 Holger Hans Peter Freyther <zecke@handhelds.org>
+           .>+-=
+ _;:,     .>    :=|. This program is free software; you can
+.> <`_,   >  .   <= redistribute it and/or modify it under
+:`=1 )Y*s>-.--   : the terms of the GNU General Public
+.="- .-=="i,     .._ License as published by the Free Software
+ - .   .-<_>     .<> Foundation; either version 2 of the License,
+     ._= =}       : or (at your option) any later version.
+    .%`+i>       _;_.
+    .i_,=:_.      -<s. This program 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
+  -_. . .   )=.  = General Public License along with
+    --        :-=` this library; see the file COPYING
+ If not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+*/
+
+#ifndef PHASESTYLE_PLUGIN_H
+#define PHASESTYLE_PLUGIN_H
+
+#include <qtopia/styleinterface.h>
+
+
+class WebStyle;
+
+/**
+ * Factory to create WebStyle
+ */
+class WebStyleImpl : public StyleInterface {
+public:
+ WebStyleImpl();
+ virtual ~WebStyleImpl();
+
+ QRESULT queryInterface( const QUuid&, QUnknownInterface** );
+ Q_REFCOUNT
+
+ virtual QStyle *style();
+ virtual QString name()const;
+private:
+ WebStyle* m_style;
+};
+
+#endif
diff --git a/noncore/styles/web.pro b/noncore/styles/web.pro
new file mode 100644
index 0000000..a77f24a
--- a/dev/null
+++ b/noncore/styles/web.pro
@@ -0,0 +1,14 @@
+TEMPLATE = lib
+CONFIG = qt plugin embedded warn_on
+SOURCES = webstyle.cpp \
+ plugin.cpp
+HEADERS = webstyle.h \
+ plugin.h
+
+LIBS += -lqpe
+INCLUDEPATH += $(OPIEDIR)/include
+DESTDIR = $(OPIEDIR)/plugins/styles
+TARGET = webstyle
+VERSION = 0.4.0
+
+include ( $(OPIEDIR)/include.pro )
diff --git a/noncore/styles/web/.cvsignore b/noncore/styles/web/.cvsignore
new file mode 100644
index 0000000..c8de896
--- a/dev/null
+++ b/noncore/styles/web/.cvsignore
@@ -0,0 +1,3 @@
+Makefile*
+*.moc
+.obj
diff --git a/noncore/styles/web/README b/noncore/styles/web/README
new file mode 100644
index 0000000..42e198d
--- a/dev/null
+++ b/noncore/styles/web/README
@@ -0,0 +1,7 @@
+Widget style which mimicks the 'flat' appearance favored by many
+web sites. If you set the scrollbar and (exclusive) indicator sizes
+to something small (say 8 pixels) then this makes a nice style for
+embedded apps.
+
+Maintainer: Rik Hemsley (rikkus) <rik@kde.org>
+
diff --git a/noncore/styles/web/config.in b/noncore/styles/web/config.in
new file mode 100644
index 0000000..c943311
--- a/dev/null
+++ b/noncore/styles/web/config.in
@@ -0,0 +1,4 @@
+ config WEBSTYLE
+ boolean "WEB Style from KDE2"
+ default "n"
+ depends ( LIBQPE || LIBQPE-X11 )
diff --git a/noncore/styles/web/plugin.cpp b/noncore/styles/web/plugin.cpp
new file mode 100644
index 0000000..da2f371
--- a/dev/null
+++ b/noncore/styles/web/plugin.cpp
@@ -0,0 +1,71 @@
+/*
+               =. This file is part of the OPIE Project
+             .=l. Copyright (c) 2004 Holger Hans Peter Freyther <zecke@handhelds.org>
+           .>+-=
+ _;:,     .>    :=|. This program is free software; you can
+.> <`_,   >  .   <= redistribute it and/or modify it under
+:`=1 )Y*s>-.--   : the terms of the GNU General Public
+.="- .-=="i,     .._ License as published by the Free Software
+ - .   .-<_>     .<> Foundation; either version 2 of the License,
+     ._= =}       : or (at your option) any later version.
+    .%`+i>       _;_.
+    .i_,=:_.      -<s. This program 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
+  -_. . .   )=.  = General Public License along with
+    --        :-=` this library; see the file COPYING.
+ If not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+*/
+
+#include "plugin.h"
+
+#include "webstyle.h"
+
+#include <qapplication.h>
+
+WebStyleImpl::WebStyleImpl()
+ : m_style( 0l )
+{}
+
+/* Qt will delete the style */
+WebStyleImpl::~WebStyleImpl()
+{}
+
+QRESULT WebStyleImpl::queryInterface( const QUuid& uuid, QUnknownInterface **iface ) {
+ *iface = 0;
+
+ if ( uuid == IID_QUnknown || uuid == IID_Style)
+ *iface = this;
+ else
+ return QS_FALSE;
+
+ (*iface)->addRef();
+
+ return QS_OK;
+}
+
+QStyle* WebStyleImpl::style() {
+ if (!m_style )
+ m_style = new WebStyle();
+ return m_style;
+}
+
+QString WebStyleImpl::name()const {
+ return qApp->translate("WebStyle", "Web", "Name of the style Web");
+}
+
+
+Q_EXPORT_INTERFACE()
+{
+ Q_CREATE_INSTANCE( WebStyleImpl )
+}
+
diff --git a/noncore/styles/web/plugin.h b/noncore/styles/web/plugin.h
new file mode 100644
index 0000000..3205541
--- a/dev/null
+++ b/noncore/styles/web/plugin.h
@@ -0,0 +1,54 @@
+/*
+               =. This file is part of the OPIE Project
+             .=l. Copyright (c) 2004 Holger Hans Peter Freyther <zecke@handhelds.org>
+           .>+-=
+ _;:,     .>    :=|. This program is free software; you can
+.> <`_,   >  .   <= redistribute it and/or modify it under
+:`=1 )Y*s>-.--   : the terms of the GNU General Public
+.="- .-=="i,     .._ License as published by the Free Software
+ - .   .-<_>     .<> Foundation; either version 2 of the License,
+     ._= =}       : or (at your option) any later version.
+    .%`+i>       _;_.
+    .i_,=:_.      -<s. This program 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
+  -_. . .   )=.  = General Public License along with
+    --        :-=` this library; see the file COPYING
+ If not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+*/
+
+#ifndef PHASESTYLE_PLUGIN_H
+#define PHASESTYLE_PLUGIN_H
+
+#include <qtopia/styleinterface.h>
+
+
+class WebStyle;
+
+/**
+ * Factory to create WebStyle
+ */
+class WebStyleImpl : public StyleInterface {
+public:
+ WebStyleImpl();
+ virtual ~WebStyleImpl();
+
+ QRESULT queryInterface( const QUuid&, QUnknownInterface** );
+ Q_REFCOUNT
+
+ virtual QStyle *style();
+ virtual QString name()const;
+private:
+ WebStyle* m_style;
+};
+
+#endif
diff --git a/noncore/styles/web/web.pro b/noncore/styles/web/web.pro
new file mode 100644
index 0000000..a77f24a
--- a/dev/null
+++ b/noncore/styles/web/web.pro
@@ -0,0 +1,14 @@
+TEMPLATE = lib
+CONFIG = qt plugin embedded warn_on
+SOURCES = webstyle.cpp \
+ plugin.cpp
+HEADERS = webstyle.h \
+ plugin.h
+
+LIBS += -lqpe
+INCLUDEPATH += $(OPIEDIR)/include
+DESTDIR = $(OPIEDIR)/plugins/styles
+TARGET = webstyle
+VERSION = 0.4.0
+
+include ( $(OPIEDIR)/include.pro )
diff --git a/noncore/styles/web/webstyle.cpp b/noncore/styles/web/webstyle.cpp
new file mode 100644
index 0000000..10d9791
--- a/dev/null
+++ b/noncore/styles/web/webstyle.cpp
@@ -0,0 +1,1183 @@
+/*
+ * 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 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);
+ }
+}
+
+ bool
+WebStyle::eventFilter(QObject * o, QEvent * e)
+{
+ QPushButton * pb(static_cast<QPushButton *>(o));
+
+ if (e->type() == QEvent::Enter)
+ {
+ _highlightedButton = pb;
+ pb->repaint(false);
+ }
+ else if (e->type() == QEvent::Leave)
+ {
+ _highlightedButton = 0;
+ pb->repaint(false);
+ }
+
+ return false;
+}
+
+ void
+WebStyle::drawButton
+(
+ QPainter * p,
+ int x,
+ int y,
+ int w,
+ int h,
+ const QColorGroup & g,
+ bool sunken,
+ const QBrush * fill
+)
+{
+ p->save();
+
+ if (sunken)
+ p->setPen(contrastingForeground(g.light(), g.button()));
+ else
+ p->setPen(contrastingForeground(g.mid(), g.button()));
+
+ p->setBrush(0 == fill ? NoBrush : *fill);
+
+ drawFunkyRect(p, x, y, w, h, true);
+
+ p->restore();
+}
+
+ QRect
+WebStyle::buttonRect(int x, int y, int w, int h)
+{
+ return QRect(x + 2, y + 2, w - 4, h - 4);
+}
+
+ void
+WebStyle::drawBevelButton
+(
+ QPainter * p,
+ int x,
+ int y,
+ int w,
+ int h,
+ const QColorGroup & g,
+ bool sunken,
+ const QBrush * fill
+)
+{
+ drawButton(p, x, y, w, h, g, sunken, fill);
+}
+
+ void
+WebStyle::drawPushButton(QPushButton * b, QPainter * p)
+{
+ // Note: painter is already translated for us.
+
+ bool sunken(b->isDown() || b->isOn());
+ bool hl(_highlightedButton == b);
+
+ QColor bg(b->colorGroup().button());
+
+ p->save();
+ p->fillRect(b->rect(), b->colorGroup().brush(QColorGroup::Background));
+
+ if (b->isDefault())
+ {
+ QColor c(hl ? b->colorGroup().highlight() : b->colorGroup().mid());
+
+ p->setPen(contrastingForeground(c, bg));
+
+ drawFunkyRect(p, 0, 0, b->width(), b->height(), false);
+ }
+
+ p->fillRect
+ (
+ 4,
+ 4,
+ b->width() - 8,
+ b->height() - 8,
+ b->colorGroup().brush(QColorGroup::Button)
+ );
+
+ if (b->isEnabled())
+ {
+ if (sunken)
+ {
+ p->setPen(contrastingForeground(b->colorGroup().light(), bg));
+ }
+ else
+ {
+ if (hl)
+ p->setPen(contrastingForeground(b->colorGroup().highlight(), bg));
+ else
+ p->setPen(contrastingForeground(b->colorGroup().mid(), bg));
+ }
+ }
+ else
+ {
+ p->setPen(b->colorGroup().button());
+ }
+
+ drawFunkyRect(p, 3, 3, b->width() - 6, b->height() - 6, true);
+
+ p->restore();
+}
+
+ void
+WebStyle::drawPushButtonLabel(QPushButton * b, QPainter * p)
+{
+ // This is complicated stuff and we don't really want to mess with it.
+
+ QWindowsStyle::drawPushButtonLabel(b, p);
+}
+
+ void
+WebStyle::drawScrollBarControls
+(
+ QPainter * p,
+ const QScrollBar * sb,
+ int sliderStart,
+ uint controls,
+ uint activeControl
+)
+{
+ p->save();
+
+ int sliderMin, sliderMax, sliderLength, buttonDim;
+
+ scrollBarMetrics(sb, sliderMin, sliderMax, sliderLength, buttonDim);
+
+ QRect rSub, rAdd, rSubPage, rAddPage, rSlider;
+
+ scrollBarControlsMetrics
+ (
+ sb,
+ sliderStart,
+ sliderMin,
+ sliderMax,
+ sliderLength,
+ buttonDim,
+ rSub,
+ rAdd,
+ rSubPage,
+ rAddPage,
+ rSlider
+ );
+
+ QColorGroup g(sb->colorGroup());
+
+ if (controls & AddLine && rAdd.isValid())
+ {
+ bool active(activeControl & AddLine);
+
+ QColor c(active ? g.highlight() : g.dark());
+
+ p->setPen(c);
+ p->setBrush(g.button());
+ 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);
+}
+
+ 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
+)
+{
+ // TODO
+ QWindowsStyle::drawPopupMenuItem(p, checkable, maxpmw, tab, mi, pal, act, enabled, x, y, w, h);
+}
+
+ void
+WebStyle::drawFocusRect
+(
+ QPainter * p,
+ const QRect & r,
+ const QColorGroup & g,
+ const QColor * pen,
+ bool atBorder
+)
+{
+ p->save();
+
+ if (0 != pen)
+ p->setPen(0 == pen ? g.foreground() : *pen);
+ p->setBrush(NoBrush);
+
+ if (atBorder)
+ {
+ p->drawRect(QRect(r.x() + 1, r.y() + 1, r.width() - 2, r.height() - 2));
+ }
+ else
+ {
+ p->drawRect(r);
+ }
+
+ p->restore();
+}
+
+ void
+WebStyle::drawPanel
+(
+ QPainter * p,
+ int x,
+ int y,
+ int w,
+ int h,
+ const QColorGroup & g,
+ bool /* sunken */,
+ int /* lineWidth */,
+ const QBrush * fill
+)
+{
+ p->save();
+
+ p->setPen(g.dark());
+
+ p->setBrush(0 == fill ? NoBrush : *fill);
+
+ p->drawRect(x, y, w, h);
+
+ p->restore();
+}
+
+ void
+WebStyle::drawPopupPanel
+(
+ QPainter * p,
+ int x,
+ int y,
+ int w,
+ int h,
+ const QColorGroup & g,
+ int /* lineWidth */,
+ const QBrush * fill
+)
+{
+ p->save();
+
+ p->setPen(g.dark());
+
+ p->setBrush(0 == fill ? NoBrush : *fill);
+
+ p->drawRect(x, y, w, h);
+
+ p->restore();
+}
+
+ void
+WebStyle::drawSeparator
+(
+ QPainter * p,
+ int x,
+ int y,
+ int w,
+ int h,
+ const QColorGroup & g,
+ bool /* sunken */,
+ int /* lineWidth */,
+ int /* midLineWidth */
+)
+{
+ p->save();
+
+ p->setPen(g.dark());
+
+ if (w > h)
+ {
+ p->drawLine(x, y + h / 2, x + w, y + h / 2);
+ }
+ else
+ {
+ p->drawLine(x + w / 2, y, x + w / 2, y + h);
+ }
+
+ p->restore();
+}
+
+ void
+WebStyle::drawTab
+(
+ QPainter * p,
+ const QTabBar * tabBar,
+ QTab * tab,
+ bool selected
+)
+{
+ QRect r(tab->rect());
+
+ QColorGroup g(tabBar->colorGroup());
+
+ p->save();
+
+ p->setPen(selected ? g.dark() : g.mid());
+ p->fillRect(r, g.brush(QColorGroup::Background));
+
+ switch (tabBar->shape())
+ {
+ case QTabBar::RoundedAbove:
+ case QTabBar::TriangularAbove:
+ p->drawLine(r.left(), r.top(), r.left(), r.bottom());
+ p->drawLine(r.left(), r.top(), r.right(), r.top());
+ p->drawLine(r.right(), r.top(), r.right(), r.bottom());
+ if (!selected)
+ {
+ p->setPen(g.dark());
+ p->drawLine(r.left(), r.bottom(), r.right(), r.bottom());
+ }
+ break;
+ case QTabBar::RoundedBelow:
+ case QTabBar::TriangularBelow:
+ if (!selected)
+ {
+ p->setPen(g.dark());
+ p->drawLine(r.left(), r.top(), r.right(), r.top());
+ }
+ p->drawLine(r.left(), r.top(), r.left(), r.bottom());
+ p->drawLine(r.left(), r.bottom(), r.right(), r.bottom());
+ p->drawLine(r.right(), r.top(), r.right(), r.bottom());
+ break;
+ }
+
+ p->restore();
+}
+
+ void
+WebStyle::drawTabMask
+(
+ QPainter * p,
+ const QTabBar *,
+ QTab * tab,
+ bool
+)
+{
+ p->fillRect(tab->rect(), Qt::color1);
+}
+
+
+ int
+WebStyle::popupMenuItemHeight(bool, QMenuItem * i, const QFontMetrics & fm)
+{
+ if (i->isSeparator())
+ return 1;
+
+ int h = 0;
+
+ if (0 != i->pixmap())
+ {
+ h = i->pixmap()->height();
+ }
+
+ if (0 != i->iconSet())
+ {
+ h = QMAX
+ (
+ i->iconSet()->pixmap(QIconSet::Small, QIconSet::Normal).height(),
+ h
+ );
+ }
+
+ h = QMAX(fm.height() + 4, h);
+
+ h = QMAX(18, h);
+
+ return h;
+
+}
+
diff --git a/noncore/styles/web/webstyle.h b/noncore/styles/web/webstyle.h
new file mode 100644
index 0000000..83ab784
--- a/dev/null
+++ b/noncore/styles/web/webstyle.h
@@ -0,0 +1,299 @@
+/*
+ * 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 WEB_STYLE_H
+#define WEB_STYLE_H
+
+#include <qstyle.h>
+#include <qwindowsstyle.h>
+#include <qpalette.h>
+
+class QPainter;
+class QScrollBar;
+class QPushButton;
+class QWidget;
+
+class WebStyle : public QWindowsStyle {
+ public:
+
+ WebStyle();
+
+ ~WebStyle();
+
+ void polish(QApplication *);
+
+ void unPolish(QWidget *);
+
+ void polish(QWidget *);
+
+ void polish(QPalette &);
+
+ void unPolish(QApplication *);
+
+ void drawButton
+ (
+ QPainter * p,
+ int x,
+ int y,
+ int w,
+ int h,
+ const QColorGroup & g,
+ bool sunken = false,
+ const QBrush * fill = 0
+ );
+
+ QRect buttonRect(int x, int y, int w, int h);
+
+ void drawBevelButton
+ (
+ QPainter *,
+ int x,
+ int y,
+ int w,
+ int h,
+ const QColorGroup &,
+ bool sunken = false,
+ const QBrush * fill = 0
+ );
+
+ void drawPushButton(QPushButton *, QPainter *);
+
+ virtual void drawPushButtonLabel(QPushButton *, QPainter *);
+
+ void drawScrollBarControls
+ (
+ QPainter *,
+ const QScrollBar *,
+ int sliderStart,
+ uint controls,
+ uint activeControl
+ );
+
+ QStyle::ScrollControl scrollBarPointOver
+ (
+ const QScrollBar *,
+ int sliderStart,
+ const QPoint &
+ );
+
+ void scrollBarMetrics
+ (
+ const QScrollBar *,
+ int & sliderMin,
+ int & sliderMax,
+ int & sliderLength,
+ int & buttonDim
+ );
+
+ QSize indicatorSize() const;
+
+ void drawIndicator
+ (
+ QPainter *,
+ int x,
+ int y,
+ int w,
+ int h,
+ const QColorGroup &,
+ int state,
+ bool down = false,
+ bool enabled = true
+ );
+
+ QSize exclusiveIndicatorSize() const;
+
+ void drawExclusiveIndicator
+ (
+ QPainter *,
+ int x,
+ int y,
+ int w,
+ int h,
+ const QColorGroup &,
+ bool on,
+ bool down = false,
+ bool enabled = true
+ );
+
+ void drawIndicatorMask
+ (
+ QPainter *,
+ int x,
+ int y,
+ int w,
+ int h,
+ int state
+ );
+
+ void drawExclusiveIndicatorMask
+ (
+ QPainter *,
+ int x,
+ int y,
+ int w,
+ int h,
+ bool on
+ );
+
+ void drawComboButton
+ (
+ QPainter *,
+ int x,
+ int y,
+ int w,
+ int h,
+ const QColorGroup &,
+ bool sunken = false,
+ bool editable = false,
+ bool enabled = true,
+ const QBrush * fill = 0
+ );
+
+ QRect comboButtonRect(int x, int y, int w, int h);
+
+ QRect comboButtonFocusRect(int x, int y, int w, int h);
+
+ int sliderLength() const;
+
+ void drawSliderGroove
+ (
+ QPainter *,
+ int x,
+ int y,
+ int w,
+ int h,
+ const QColorGroup &,
+ QCOORD,
+ Orientation
+ );
+
+ void drawArrow
+ (
+ QPainter *,
+ Qt::ArrowType,
+ bool down,
+ int x,
+ int y,
+ int w,
+ int h,
+ const QColorGroup &,
+ bool enabled = true,
+ const QBrush * fill = 0
+ );
+
+ void drawSlider
+ (
+ QPainter *,
+ int x,
+ int y,
+ int w,
+ int h,
+ const QColorGroup &,
+ Orientation,
+ bool tickAbove,
+ bool tickBelow
+ );
+
+ void drawPopupMenuItem
+ (
+ QPainter *,
+ bool checkable,
+ int maxpmw,
+ int tab,
+ QMenuItem *,
+ const QPalette &,
+ bool act,
+ bool enabled,
+ int x,
+ int y,
+ int w,
+ int h
+ );
+
+ void drawFocusRect
+ (
+ QPainter *,
+ const QRect &,
+ const QColorGroup &,
+ const QColor * pen,
+ bool atBorder
+ );
+
+ void drawPanel
+ (
+ QPainter *,
+ int x,
+ int y,
+ int w,
+ int h,
+ const QColorGroup &,
+ bool sunken,
+ int lineWidth = 1,
+ const QBrush * = 0
+ );
+
+ void drawPopupPanel
+ (
+ QPainter *,
+ int x,
+ int y,
+ int w,
+ int h,
+ const QColorGroup &,
+ int lineWidth = 2,
+ const QBrush * = 0
+ );
+
+ void drawSeparator
+ (
+ QPainter *,
+ int x,
+ int y,
+ int w,
+ int h,
+ const QColorGroup &,
+ bool sunken = true,
+ int lineWidth = 1,
+ int midLineWidth = 0
+ );
+
+ void drawTab
+ (
+ QPainter * p,
+ const QTabBar * tabBar,
+ QTab * tab,
+ bool selected
+ );
+
+ void drawTabMask
+ (
+ QPainter * p,
+ const QTabBar *,
+ QTab * tab,
+ bool
+ );
+
+ int popupMenuItemHeight(bool, QMenuItem *, const QFontMetrics &);
+
+ GUIStyle guiStyle() const { return Qt::MotifStyle; }
+
+ bool eventFilter(QObject *, QEvent *);
+};
+
+#endif
diff --git a/noncore/styles/webstyle.cpp b/noncore/styles/webstyle.cpp
new file mode 100644
index 0000000..10d9791
--- a/dev/null
+++ b/noncore/styles/webstyle.cpp
@@ -0,0 +1,1183 @@
+/*
+ * 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 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);
+ }
+}
+
+ bool
+WebStyle::eventFilter(QObject * o, QEvent * e)
+{
+ QPushButton * pb(static_cast<QPushButton *>(o));
+
+ if (e->type() == QEvent::Enter)
+ {
+ _highlightedButton = pb;
+ pb->repaint(false);
+ }
+ else if (e->type() == QEvent::Leave)
+ {
+ _highlightedButton = 0;
+ pb->repaint(false);
+ }
+
+ return false;
+}
+
+ void
+WebStyle::drawButton
+(
+ QPainter * p,
+ int x,
+ int y,
+ int w,
+ int h,
+ const QColorGroup & g,
+ bool sunken,
+ const QBrush * fill
+)
+{
+ p->save();
+
+ if (sunken)
+ p->setPen(contrastingForeground(g.light(), g.button()));
+ else
+ p->setPen(contrastingForeground(g.mid(), g.button()));
+
+ p->setBrush(0 == fill ? NoBrush : *fill);
+
+ drawFunkyRect(p, x, y, w, h, true);
+
+ p->restore();
+}
+
+ QRect
+WebStyle::buttonRect(int x, int y, int w, int h)
+{
+ return QRect(x + 2, y + 2, w - 4, h - 4);
+}
+
+ void
+WebStyle::drawBevelButton
+(
+ QPainter * p,
+ int x,
+ int y,
+ int w,
+ int h,
+ const QColorGroup & g,
+ bool sunken,
+ const QBrush * fill
+)
+{
+ drawButton(p, x, y, w, h, g, sunken, fill);
+}
+
+ void
+WebStyle::drawPushButton(QPushButton * b, QPainter * p)
+{
+ // Note: painter is already translated for us.
+
+ bool sunken(b->isDown() || b->isOn());
+ bool hl(_highlightedButton == b);
+
+ QColor bg(b->colorGroup().button());
+
+ p->save();
+ p->fillRect(b->rect(), b->colorGroup().brush(QColorGroup::Background));
+
+ if (b->isDefault())
+ {
+ QColor c(hl ? b->colorGroup().highlight() : b->colorGroup().mid());
+
+ p->setPen(contrastingForeground(c, bg));
+
+ drawFunkyRect(p, 0, 0, b->width(), b->height(), false);
+ }
+
+ p->fillRect
+ (
+ 4,
+ 4,
+ b->width() - 8,
+ b->height() - 8,
+ b->colorGroup().brush(QColorGroup::Button)
+ );
+
+ if (b->isEnabled())
+ {
+ if (sunken)
+ {
+ p->setPen(contrastingForeground(b->colorGroup().light(), bg));
+ }
+ else
+ {
+ if (hl)
+ p->setPen(contrastingForeground(b->colorGroup().highlight(), bg));
+ else
+ p->setPen(contrastingForeground(b->colorGroup().mid(), bg));
+ }
+ }
+ else
+ {
+ p->setPen(b->colorGroup().button());
+ }
+
+ drawFunkyRect(p, 3, 3, b->width() - 6, b->height() - 6, true);
+
+ p->restore();
+}
+
+ void
+WebStyle::drawPushButtonLabel(QPushButton * b, QPainter * p)
+{
+ // This is complicated stuff and we don't really want to mess with it.
+
+ QWindowsStyle::drawPushButtonLabel(b, p);
+}
+
+ void
+WebStyle::drawScrollBarControls
+(
+ QPainter * p,
+ const QScrollBar * sb,
+ int sliderStart,
+ uint controls,
+ uint activeControl
+)
+{
+ p->save();
+
+ int sliderMin, sliderMax, sliderLength, buttonDim;
+
+ scrollBarMetrics(sb, sliderMin, sliderMax, sliderLength, buttonDim);
+
+ QRect rSub, rAdd, rSubPage, rAddPage, rSlider;
+
+ scrollBarControlsMetrics
+ (
+ sb,
+ sliderStart,
+ sliderMin,
+ sliderMax,
+ sliderLength,
+ buttonDim,
+ rSub,
+ rAdd,
+ rSubPage,
+ rAddPage,
+ rSlider
+ );
+
+ QColorGroup g(sb->colorGroup());
+
+ if (controls & AddLine && rAdd.isValid())
+ {
+ bool active(activeControl & AddLine);
+
+ QColor c(active ? g.highlight() : g.dark());
+
+ p->setPen(c);
+ p->setBrush(g.button());
+ 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);
+}
+
+ 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
+)
+{
+ // TODO
+ QWindowsStyle::drawPopupMenuItem(p, checkable, maxpmw, tab, mi, pal, act, enabled, x, y, w, h);
+}
+
+ void
+WebStyle::drawFocusRect
+(
+ QPainter * p,
+ const QRect & r,
+ const QColorGroup & g,
+ const QColor * pen,
+ bool atBorder
+)
+{
+ p->save();
+
+ if (0 != pen)
+ p->setPen(0 == pen ? g.foreground() : *pen);
+ p->setBrush(NoBrush);
+
+ if (atBorder)
+ {
+ p->drawRect(QRect(r.x() + 1, r.y() + 1, r.width() - 2, r.height() - 2));
+ }
+ else
+ {
+ p->drawRect(r);
+ }
+
+ p->restore();
+}
+
+ void
+WebStyle::drawPanel
+(
+ QPainter * p,
+ int x,
+ int y,
+ int w,
+ int h,
+ const QColorGroup & g,
+ bool /* sunken */,
+ int /* lineWidth */,
+ const QBrush * fill
+)
+{
+ p->save();
+
+ p->setPen(g.dark());
+
+ p->setBrush(0 == fill ? NoBrush : *fill);
+
+ p->drawRect(x, y, w, h);
+
+ p->restore();
+}
+
+ void
+WebStyle::drawPopupPanel
+(
+ QPainter * p,
+ int x,
+ int y,
+ int w,
+ int h,
+ const QColorGroup & g,
+ int /* lineWidth */,
+ const QBrush * fill
+)
+{
+ p->save();
+
+ p->setPen(g.dark());
+
+ p->setBrush(0 == fill ? NoBrush : *fill);
+
+ p->drawRect(x, y, w, h);
+
+ p->restore();
+}
+
+ void
+WebStyle::drawSeparator
+(
+ QPainter * p,
+ int x,
+ int y,
+ int w,
+ int h,
+ const QColorGroup & g,
+ bool /* sunken */,
+ int /* lineWidth */,
+ int /* midLineWidth */
+)
+{
+ p->save();
+
+ p->setPen(g.dark());
+
+ if (w > h)
+ {
+ p->drawLine(x, y + h / 2, x + w, y + h / 2);
+ }
+ else
+ {
+ p->drawLine(x + w / 2, y, x + w / 2, y + h);
+ }
+
+ p->restore();
+}
+
+ void
+WebStyle::drawTab
+(
+ QPainter * p,
+ const QTabBar * tabBar,
+ QTab * tab,
+ bool selected
+)
+{
+ QRect r(tab->rect());
+
+ QColorGroup g(tabBar->colorGroup());
+
+ p->save();
+
+ p->setPen(selected ? g.dark() : g.mid());
+ p->fillRect(r, g.brush(QColorGroup::Background));
+
+ switch (tabBar->shape())
+ {
+ case QTabBar::RoundedAbove:
+ case QTabBar::TriangularAbove:
+ p->drawLine(r.left(), r.top(), r.left(), r.bottom());
+ p->drawLine(r.left(), r.top(), r.right(), r.top());
+ p->drawLine(r.right(), r.top(), r.right(), r.bottom());
+ if (!selected)
+ {
+ p->setPen(g.dark());
+ p->drawLine(r.left(), r.bottom(), r.right(), r.bottom());
+ }
+ break;
+ case QTabBar::RoundedBelow:
+ case QTabBar::TriangularBelow:
+ if (!selected)
+ {
+ p->setPen(g.dark());
+ p->drawLine(r.left(), r.top(), r.right(), r.top());
+ }
+ p->drawLine(r.left(), r.top(), r.left(), r.bottom());
+ p->drawLine(r.left(), r.bottom(), r.right(), r.bottom());
+ p->drawLine(r.right(), r.top(), r.right(), r.bottom());
+ break;
+ }
+
+ p->restore();
+}
+
+ void
+WebStyle::drawTabMask
+(
+ QPainter * p,
+ const QTabBar *,
+ QTab * tab,
+ bool
+)
+{
+ p->fillRect(tab->rect(), Qt::color1);
+}
+
+
+ int
+WebStyle::popupMenuItemHeight(bool, QMenuItem * i, const QFontMetrics & fm)
+{
+ if (i->isSeparator())
+ return 1;
+
+ int h = 0;
+
+ if (0 != i->pixmap())
+ {
+ h = i->pixmap()->height();
+ }
+
+ if (0 != i->iconSet())
+ {
+ h = QMAX
+ (
+ i->iconSet()->pixmap(QIconSet::Small, QIconSet::Normal).height(),
+ h
+ );
+ }
+
+ h = QMAX(fm.height() + 4, h);
+
+ h = QMAX(18, h);
+
+ return h;
+
+}
+
diff --git a/noncore/styles/webstyle.h b/noncore/styles/webstyle.h
new file mode 100644
index 0000000..83ab784
--- a/dev/null
+++ b/noncore/styles/webstyle.h
@@ -0,0 +1,299 @@
+/*
+ * 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 WEB_STYLE_H
+#define WEB_STYLE_H
+
+#include <qstyle.h>
+#include <qwindowsstyle.h>
+#include <qpalette.h>
+
+class QPainter;
+class QScrollBar;
+class QPushButton;
+class QWidget;
+
+class WebStyle : public QWindowsStyle {
+ public:
+
+ WebStyle();
+
+ ~WebStyle();
+
+ void polish(QApplication *);
+
+ void unPolish(QWidget *);
+
+ void polish(QWidget *);
+
+ void polish(QPalette &);
+
+ void unPolish(QApplication *);
+
+ void drawButton
+ (
+ QPainter * p,
+ int x,
+ int y,
+ int w,
+ int h,
+ const QColorGroup & g,
+ bool sunken = false,
+ const QBrush * fill = 0
+ );
+
+ QRect buttonRect(int x, int y, int w, int h);
+
+ void drawBevelButton
+ (
+ QPainter *,
+ int x,
+ int y,
+ int w,
+ int h,
+ const QColorGroup &,
+ bool sunken = false,
+ const QBrush * fill = 0
+ );
+
+ void drawPushButton(QPushButton *, QPainter *);
+
+ virtual void drawPushButtonLabel(QPushButton *, QPainter *);
+
+ void drawScrollBarControls
+ (
+ QPainter *,
+ const QScrollBar *,
+ int sliderStart,
+ uint controls,
+ uint activeControl
+ );
+
+ QStyle::ScrollControl scrollBarPointOver
+ (
+ const QScrollBar *,
+ int sliderStart,
+ const QPoint &
+ );
+
+ void scrollBarMetrics
+ (
+ const QScrollBar *,
+ int & sliderMin,
+ int & sliderMax,
+ int & sliderLength,
+ int & buttonDim
+ );
+
+ QSize indicatorSize() const;
+
+ void drawIndicator
+ (
+ QPainter *,
+ int x,
+ int y,
+ int w,
+ int h,
+ const QColorGroup &,
+ int state,
+ bool down = false,
+ bool enabled = true
+ );
+
+ QSize exclusiveIndicatorSize() const;
+
+ void drawExclusiveIndicator
+ (
+ QPainter *,
+ int x,
+ int y,
+ int w,
+ int h,
+ const QColorGroup &,
+ bool on,
+ bool down = false,
+ bool enabled = true
+ );
+
+ void drawIndicatorMask
+ (
+ QPainter *,
+ int x,
+ int y,
+ int w,
+ int h,
+ int state
+ );
+
+ void drawExclusiveIndicatorMask
+ (
+ QPainter *,
+ int x,
+ int y,
+ int w,
+ int h,
+ bool on
+ );
+
+ void drawComboButton
+ (
+ QPainter *,
+ int x,
+ int y,
+ int w,
+ int h,
+ const QColorGroup &,
+ bool sunken = false,
+ bool editable = false,
+ bool enabled = true,
+ const QBrush * fill = 0
+ );
+
+ QRect comboButtonRect(int x, int y, int w, int h);
+
+ QRect comboButtonFocusRect(int x, int y, int w, int h);
+
+ int sliderLength() const;
+
+ void drawSliderGroove
+ (
+ QPainter *,
+ int x,
+ int y,
+ int w,
+ int h,
+ const QColorGroup &,
+ QCOORD,
+ Orientation
+ );
+
+ void drawArrow
+ (
+ QPainter *,
+ Qt::ArrowType,
+ bool down,
+ int x,
+ int y,
+ int w,
+ int h,
+ const QColorGroup &,
+ bool enabled = true,
+ const QBrush * fill = 0
+ );
+
+ void drawSlider
+ (
+ QPainter *,
+ int x,
+ int y,
+ int w,
+ int h,
+ const QColorGroup &,
+ Orientation,
+ bool tickAbove,
+ bool tickBelow
+ );
+
+ void drawPopupMenuItem
+ (
+ QPainter *,
+ bool checkable,
+ int maxpmw,
+ int tab,
+ QMenuItem *,
+ const QPalette &,
+ bool act,
+ bool enabled,
+ int x,
+ int y,
+ int w,
+ int h
+ );
+
+ void drawFocusRect
+ (
+ QPainter *,
+ const QRect &,
+ const QColorGroup &,
+ const QColor * pen,
+ bool atBorder
+ );
+
+ void drawPanel
+ (
+ QPainter *,
+ int x,
+ int y,
+ int w,
+ int h,
+ const QColorGroup &,
+ bool sunken,
+ int lineWidth = 1,
+ const QBrush * = 0
+ );
+
+ void drawPopupPanel
+ (
+ QPainter *,
+ int x,
+ int y,
+ int w,
+ int h,
+ const QColorGroup &,
+ int lineWidth = 2,
+ const QBrush * = 0
+ );
+
+ void drawSeparator
+ (
+ QPainter *,
+ int x,
+ int y,
+ int w,
+ int h,
+ const QColorGroup &,
+ bool sunken = true,
+ int lineWidth = 1,
+ int midLineWidth = 0
+ );
+
+ void drawTab
+ (
+ QPainter * p,
+ const QTabBar * tabBar,
+ QTab * tab,
+ bool selected
+ );
+
+ void drawTabMask
+ (
+ QPainter * p,
+ const QTabBar *,
+ QTab * tab,
+ bool
+ );
+
+ int popupMenuItemHeight(bool, QMenuItem *, const QFontMetrics &);
+
+ GUIStyle guiStyle() const { return Qt::MotifStyle; }
+
+ bool eventFilter(QObject *, QEvent *);
+};
+
+#endif