summaryrefslogtreecommitdiff
authorzecke <zecke>2004-08-02 18:37:26 (UTC)
committer zecke <zecke>2004-08-02 18:37:26 (UTC)
commit4d0a9fc4a21e7a7242e466f8eec1dc61d173800d (patch) (side-by-side diff)
treef66b7c11f1325363fb4d426cc133802f9b8e59ab
parentdb991191fa216293191a0a8b0a2db18866b94dca (diff)
downloadopie-4d0a9fc4a21e7a7242e466f8eec1dc61d173800d.zip
opie-4d0a9fc4a21e7a7242e466f8eec1dc61d173800d.tar.gz
opie-4d0a9fc4a21e7a7242e466f8eec1dc61d173800d.tar.bz2
Initial revision
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/styles/phase/.cvsignore3
-rw-r--r--noncore/styles/phase/README47
-rw-r--r--noncore/styles/phase/bitmaps.h70
-rw-r--r--noncore/styles/phase/config.in4
-rw-r--r--noncore/styles/phase/phase.pro15
-rw-r--r--noncore/styles/phase/phasestyle.cpp1221
-rw-r--r--noncore/styles/phase/phasestyle.h166
-rw-r--r--noncore/styles/phase/plugin.cpp71
-rw-r--r--noncore/styles/phase/plugin.h54
9 files changed, 1651 insertions, 0 deletions
diff --git a/noncore/styles/phase/.cvsignore b/noncore/styles/phase/.cvsignore
new file mode 100644
index 0000000..c8de896
--- a/dev/null
+++ b/noncore/styles/phase/.cvsignore
@@ -0,0 +1,3 @@
+Makefile*
+*.moc
+.obj
diff --git a/noncore/styles/phase/README b/noncore/styles/phase/README
new file mode 100644
index 0000000..5dc9e9c
--- a/dev/null
+++ b/noncore/styles/phase/README
@@ -0,0 +1,47 @@
+Opie Phase is based on the style from David Johnson
+and was backported to Qt2 by Holger Hans Peter Freyther
+
+
+
+Original PHASE 0.4 README
+
+
+Phase, Version 0.x
+==================
+
+Phase is a look and feel for KDE. It is designed to be functional but not drab
+and aesthetic but not distracting. Artistic design draws upon the genius of
+earlier masters. This is particularly true for minimalistic designs. Therefore
+I cannot in good conscience claim this look to be truly original. But I have
+done my best.
+
+The Phase widget style is built as a KDE plugin, but is also useful for
+standalone Qt programs provided that the KDE libraries are installed. Please
+read the INSTALL file for installation instructions. You can activate the
+style through the KDE Control Center.
+
+Please note that Phase requires KDE 3.x and above. It will not build or run
+under earlier versions of KDE. Full functionality requires KDE 3.2 or greater.
+The Phase homepage is at <http://www.usermode.org/code.html>.
+
+=================
+
+Copyright (c) 2004 David Johnson <david@usermode.org>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
diff --git a/noncore/styles/phase/bitmaps.h b/noncore/styles/phase/bitmaps.h
new file mode 100644
index 0000000..28bc1db
--- a/dev/null
+++ b/noncore/styles/phase/bitmaps.h
@@ -0,0 +1,70 @@
+//////////////////////////////////////////////////////////////////////////////
+// bitmaps.h
+// -------------------
+// Bitmaps for Phase
+// -------------------
+// Copyright (c) 2004 David Johnson
+// Please see the phasestyle.h file for copyright and license information.
+//////////////////////////////////////////////////////////////////////////////
+
+// Note: the "light" bits are drawn with midlight color
+
+// Arrows (6x6)
+
+#include <qbitmap.h>
+
+static QBitmap uarrow;
+static unsigned char uarrow_bits[] = {
+ 0x00, 0x0c, 0x1e, 0x3f, 0x3f, 0x00};
+
+static QBitmap darrow;
+static unsigned char darrow_bits[] = {
+ 0x00, 0x3f, 0x3f, 0x1e, 0x0c, 0x00};
+
+static QBitmap larrow;
+static unsigned char larrow_bits[] = {
+ 0x18, 0x1c, 0x1e, 0x1e, 0x1c, 0x18};
+
+static QBitmap rarrow;
+static unsigned char rarrow_bits[] = {
+ 0x06, 0x0e, 0x1e, 0x1e, 0x0e, 0x06};
+
+// plus/minus "arrows"
+
+static QBitmap bplus;
+static unsigned char bplus_bits[] = {
+ 0x0c, 0x0c, 0x3f, 0x3f, 0x0c, 0x0c};
+
+static QBitmap bminus;
+static unsigned char bminus_bits[] = {
+ 0x00, 0x00, 0x3f, 0x3f, 0x00, 0x00};
+
+// checkmark (9x9)
+
+static QBitmap bcheck;
+static unsigned char bcheck_bits[] = {
+ 0x00, 0x00, 0x80, 0x01, 0xc0, 0x01, 0xe0, 0x00, 0x73, 0x00, 0x3f, 0x00,
+ 0x1e, 0x00, 0x0c, 0x00, 0x00, 0x00};
+
+// expander arrows (9x9)
+
+static QBitmap dexpand;
+static unsigned char dexpand_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0x01, 0xfe, 0x00, 0x7c, 0x00, 0x38, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00};
+
+static QBitmap rexpand;
+static unsigned char rexpand_bits[] = {
+ 0x04, 0x00, 0x0c, 0x00, 0x1c, 0x00, 0x3c, 0x00, 0x7c, 0x00, 0x3c, 0x00,
+ 0x1c, 0x00, 0x0c, 0x00, 0x04, 0x00};
+
+// scrollbar doodads (4x4)
+
+static QBitmap doodad_mid;
+static unsigned char doodad_mid_bits[] = {
+ 0x07, 0x01, 0x01, 0x00};
+
+static QBitmap doodad_light;
+static unsigned char doodad_light_bits[] = {
+ 0x00, 0x08, 0x08, 0x0e};
+
diff --git a/noncore/styles/phase/config.in b/noncore/styles/phase/config.in
new file mode 100644
index 0000000..40949e6
--- a/dev/null
+++ b/noncore/styles/phase/config.in
@@ -0,0 +1,4 @@
+ config PHASE
+ boolean "Phase Style 0.4 port"
+ default "n"
+ depends ( LIBQPE || LIBQPE-X11 )
diff --git a/noncore/styles/phase/phase.pro b/noncore/styles/phase/phase.pro
new file mode 100644
index 0000000..7ec3d01
--- a/dev/null
+++ b/noncore/styles/phase/phase.pro
@@ -0,0 +1,15 @@
+TEMPLATE = lib
+CONFIG = qt plugin embedded warn_on
+SOURCES = phasestyle.cpp \
+ plugin.cpp
+HEADERS = bitmaps.h \
+ phasestyle.h \
+ plugin.h
+
+LIBS += -lqpe
+INCLUDEPATH += $(OPIEDIR)/include
+DESTDIR = $(OPIEDIR)/plugins/styles
+TARGET = phase
+VERSION = 0.4.0
+
+include ( $(OPIEDIR)/include.pro )
diff --git a/noncore/styles/phase/phasestyle.cpp b/noncore/styles/phase/phasestyle.cpp
new file mode 100644
index 0000000..fb6411c
--- a/dev/null
+++ b/noncore/styles/phase/phasestyle.cpp
@@ -0,0 +1,1221 @@
+//////////////////////////////////////////////////////////////////////////////
+// phasestyle.h
+// -------------------
+// A style for KDE
+// -------------------
+// Copyright (c) 2004 David Johnson <david@usermode.org>
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to
+// deal in the Software without restriction, including without limitation the
+// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+// sell copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+// IN THE SOFTWARE.
+//////////////////////////////////////////////////////////////////////////////
+
+#include "phasestyle.h"
+
+#include "bitmaps.h"
+
+#define INCLUDE_MENUITEM_DEF
+#include <qpopupmenu.h>
+#include <qpushbutton.h>
+#include <qtoolbutton.h>
+#include <qpainter.h>
+#include <qbrush.h>
+#include <qiconset.h>
+#include <qtabbar.h>
+#include <qscrollbar.h>
+
+
+/* Spacing and sizeHint */
+static unsigned contrast = 110;
+
+static const int ITEMFRAME = 1; // menu stuff
+static const int ITEMHMARGIN = 3;
+static const int ITEMVMARGIN = 0;
+
+static const int ARROWMARGIN = 6;
+static const int RIGHTBORDER = 10;
+static const int MINICONSIZE = 12;
+static const int CHECKSIZE = 9;
+static const int SCROLLBAR_EXTENT = 12;
+
+
+/*
+ * Copyright (C) 1999 Daniel M. Duley <mosfet@kde.org>
+ * LGPLv2 from kdelibs/kdefx/kdrawutil.cpp
+ */
+void kColorBitmaps(QPainter *p, const QColorGroup &g, int x, int y,
+ QBitmap *lightColor, QBitmap *midColor,
+ QBitmap *midlightColor, QBitmap *darkColor,
+ QBitmap *blackColor, QBitmap *whiteColor)
+{
+ QBitmap *bitmaps[]={lightColor, midColor, midlightColor, darkColor,
+ blackColor, whiteColor};
+
+ QColor colors[]={g.light(), g.mid(), g.midlight(), g.dark(),
+ Qt::black, Qt::white};
+
+ int i;
+ for(i=0; i < 6; ++i){
+ if(bitmaps[i]){
+ if(!bitmaps[i]->mask())
+ bitmaps[i]->setMask(*bitmaps[i]);
+ p->setPen(colors[i]);
+ p->drawPixmap(x, y, *bitmaps[i]);
+ }
+ }
+}
+
+
+/*
+ * drawMenuBarItem is not virtual
+ * this way we define our draw handler
+ */
+typedef void (QStyle::*QDrawMenuBarItemImpl) (QPainter *, int, int, int, int, QMenuItem *,
+ QColorGroup &, bool, bool);
+
+extern QDrawMenuBarItemImpl qt_set_draw_menu_bar_impl(QDrawMenuBarItemImpl impl);
+
+
+PhaseStyle::PhaseStyle()
+ : QWindowsStyle()
+{
+ setName( "PhaseStyle" );
+
+ /* small default sizes */
+ setButtonDefaultIndicatorWidth(1);
+ setScrollBarExtent(SCROLLBAR_EXTENT, SCROLLBAR_EXTENT);
+ setSliderThickness(12);
+ setButtonMargin( 1 );
+
+ // create bitmaps
+ uarrow = QBitmap(6, 6, uarrow_bits, true);
+ uarrow.setMask(uarrow);
+ darrow = QBitmap(6, 6, darrow_bits, true);
+ darrow.setMask(darrow);
+ larrow = QBitmap(6, 6, larrow_bits, true);
+ larrow.setMask(larrow);
+ rarrow = QBitmap(6, 6, rarrow_bits, true);
+ rarrow.setMask(rarrow);
+ bplus = QBitmap(6, 6, bplus_bits, true);
+ bplus.setMask(bplus);
+ bminus = QBitmap(6, 6, bminus_bits, true);
+ bminus.setMask(bminus);
+ bcheck = QBitmap(9, 9, bcheck_bits, true);
+ bcheck.setMask(bcheck);
+ dexpand = QBitmap(9, 9, dexpand_bits, true);
+ dexpand.setMask(dexpand);
+ rexpand = QBitmap(9, 9, rexpand_bits, true);
+ rexpand.setMask(rexpand);
+ doodad_mid = QBitmap(4, 4, doodad_mid_bits, true);
+ doodad_light = QBitmap(4, 4, doodad_light_bits, true);
+}
+
+PhaseStyle::~PhaseStyle() {
+ /* deleted by Qt */
+}
+
+void PhaseStyle::drawCheckMark ( QPainter * p, int x, int y, int w,
+ int h, const QColorGroup & g,
+ bool , bool) {
+ p->setPen(g.text());
+ p->drawPixmap(x+w/2-4, y+h/2-4, bcheck);
+}
+
+void PhaseStyle::drawArrow(QPainter *painter, Qt::ArrowType type, bool down,
+ int x, int y, int w, int h, const QColorGroup &group,
+ bool enabled , const QBrush * ) {
+ switch( type ) {
+ case UpArrow:
+ if (enabled)
+ painter->setPen(down ? group.midlight() : group.dark());
+ else painter->setPen(group.mid());
+ painter->drawPixmap(x+w/2-3, y+h/2-3, uarrow);
+ break;
+ case DownArrow:
+ if (enabled) painter->setPen(down ? group.midlight() : group.dark());
+ else painter->setPen(group.mid());
+ painter->drawPixmap(x+w/2-3, y+h/2-3, darrow);
+ break;
+ case LeftArrow:
+ if (enabled) painter->setPen(down ? group.midlight() : group.dark());
+ else painter->setPen(group.mid());
+ painter->drawPixmap(x+w/2-3, y+h/2-3, larrow);
+ break;
+ case RightArrow:
+ if (enabled) painter->setPen(down ? group.midlight() : group.dark());
+ else painter->setPen(group.mid());
+ painter->drawPixmap(x+w/2-3, y+h/2-3, rarrow);
+ break;
+ }
+}
+
+void PhaseStyle::drawPushButton(QPushButton *btn, QPainter *painter) {
+ QRect r = btn->rect();
+ int x = r.x();
+ int y = r.y();
+ int h = r.height();
+ int w = r.width();
+ bool depress = btn->isOn() || btn->isDown();
+ QColorGroup group = btn->colorGroup();
+ QBrush brush(group.button() );
+// int bd = pixelMetric(PM_ButtonDefaultIndicator, widget) + 1;
+ static int bd = 2;
+
+ if (btn->isDefault() && !depress) {
+ drawPanel(painter, x, y, h, w, group,
+ &group.brush(QColorGroup::Mid), true);
+ drawBevelButton(painter, x+bd, y+bd, w-bd*2, h-bd*2, group,
+ false, &brush );
+ } else {
+ drawButton(painter, x, y, w, h, group, depress,
+ &brush );
+ }
+
+ if (btn->hasFocus() ) { // draw focus
+ QColor col;
+ drawFocusRect(painter, r, group,
+ &col, false );
+ }
+}
+
+
+void PhaseStyle::drawPanel(QPainter* painter, int x, int y, int w, int h,
+ const QColorGroup& group, bool sunken,
+ int , const QBrush* fill) {
+ int x2 = x + w - 1;
+ int y2 = y + h - 1;
+ painter->save();
+
+ if (sunken) {
+ painter->setPen(group.dark());
+ painter->drawRect(x+1, y+1, w-2, h-2);
+ painter->setPen(group.midlight());
+ painter->drawLine(x+1, y2, x2, y2);
+ painter->drawLine(x2, y+1, x2, y2-1);
+ painter->setPen(group.mid());
+ painter->drawLine(x, y, x, y2-1);
+ painter->drawLine(x+1, y, x2-1, y);
+ painter->setPen(group.background());
+ painter->drawPoint(x, y2);
+ painter->drawPoint(x2, y);
+ } else {
+ painter->setPen(group.dark());
+ painter->drawRect(x, y, w, h);
+ painter->setPen(group.midlight());
+ painter->drawLine(x+1, y+1, x2-2, y+1);
+ painter->drawLine(x+1, y+2, x+1, y2-2);
+ painter->setPen(group.mid());
+ painter->drawLine(x+2, y2-1, x2-1, y2-1);
+ painter->drawLine(x2-1, y+2, x2-1, y2-2);
+ painter->setPen(group.background());
+ painter->drawPoint(x+1, y2-1);
+ painter->drawPoint(x2-1, y+1);
+ }
+
+ if (fill) {
+ painter->fillRect(x+2, y+2, w-4, h-4, *fill );
+ }
+ painter->restore();
+}
+
+
+
+void PhaseStyle::drawButton(QPainter *p, int x, int y, int w, int h,
+ const QColorGroup &group, bool sunken ,
+ const QBrush *fill ) {
+ int x2 = x + w - 1;
+ int y2 = y + h - 1;
+
+ p->setPen(group.midlight());
+ p->drawLine(x+1, y2, x2, y2);
+ p->drawLine(x2, y+1, x2, y2-1);
+
+ p->setPen(group.mid());
+ p->drawLine(x, y, x2-1, y);
+ p->drawLine(x, y+1, x, y2-1);
+
+ p->setPen(group.button());
+ p->drawPoint(x, y2);
+ p->drawPoint(x2, y);
+
+ drawBevelButton(p, x+1, y+1, w-2, h-2, group, sunken,
+ fill);
+}
+
+void PhaseStyle::drawButtonMask( QPainter* p, int x, int y,
+ int w, int h ) {
+ QRect rect(x, y, w, h );
+ p->fillRect(rect, Qt::color1);
+ p->setPen(Qt::color0);
+}
+
+
+void PhaseStyle::drawBevelButton(QPainter* p, int x, int y,
+ int w, int h, const QColorGroup& group,
+ bool sunken, const QBrush* fill ) {
+ int x2 = x + w - 1;
+ int y2 = y + h - 1;
+ p->save();
+
+ p->setPen(group.dark());
+ p->drawRect(x, y, w, h);
+
+ p->setPen(sunken ? group.mid() : group.midlight());
+ p->drawLine(x+1, y+1, x2-2, y+1);
+ p->drawLine(x+1, y+2, x+1, y2-2);
+
+ p->setPen(sunken ? group.midlight() : group.mid());
+ p->drawLine(x+2, y2-1, x2-1, y2-1);
+ p->drawLine(x2-1, y+2, x2-1, y2-2);
+
+ p->setPen(group.button());
+ p->drawPoint(x+1, y2-1);
+ p->drawPoint(x2-1, y+1);
+
+ QBrush b = fill ? *fill : group.brush( QColorGroup::Button );
+ if (sunken) {
+ // sunken bevels don't get gradients
+ p->fillRect(x+2, y+2, w-4, h-4, b);
+ } else
+ drawPhaseGradient(p, QRect(x+2, y+2, w-4, h-4), b.color() );
+
+ p->restore();
+}
+
+void PhaseStyle::drawPhaseGradient(QPainter* painter,
+ const QRect& rect,
+ const QColor& color )const {
+ painter->fillRect(rect, color);
+}
+
+void PhaseStyle::polish( QWidget* widget ) {
+ QWindowsStyle::polish(widget );
+
+#if 0
+ if (widget->inherits("QMenuBar") ||
+ widget->inherits("QPopupMenu" ) ||
+ widget->inherits("QToolButton") ||
+ widget->inherits("QHeader" ) ) {
+ widget->setBackgroundMode(QWidget::NoBackground);
+ }
+// else if (widget->inherits("QFrame") ) {
+// widget->installEventFilter(this);
+// }
+#endif
+}
+
+void PhaseStyle::polish( QPalette &pal ) {
+ QWindowsStyle::polish( pal );
+ // lighten up a bit, so the look is not so "crisp"
+ if (QPixmap::defaultDepth() > 8) { // but not on low color displays
+ pal.setColor(QPalette::Disabled, QColorGroup::Dark,
+ pal.color(QPalette::Disabled, QColorGroup::Dark).light(contrast));
+ pal.setColor(QPalette::Active, QColorGroup::Dark,
+ pal.color(QPalette::Active, QColorGroup::Dark).light(contrast));
+ pal.setColor(QPalette::Inactive, QColorGroup::Dark,
+ pal.color(QPalette::Inactive, QColorGroup::Dark).light(contrast));
+ }
+}
+
+void PhaseStyle::polish( QApplication* app ) {
+ QWindowsStyle::polish( app );
+
+ qt_set_draw_menu_bar_impl((QDrawMenuBarItemImpl)&PhaseStyle::drawMenuBarItem);
+}
+
+void PhaseStyle::drawPushButtonLabel (QPushButton *button, QPainter *painter) {
+ bool active = button->isOn() || button->isDown();
+ QRect r = pushButtonContentsRect( button );
+ QColorGroup group = button->colorGroup();
+ int x, y, w, h;
+ r.rect( &x, &y, &w, &h );
+ bool sunken = false;
+ QIconSet::Mode mode;
+ QPixmap pixmap;
+
+ if (active) {// shift contents
+ x++; y++;
+ sunken = true;
+ }
+
+
+ if (button->isMenuButton()) { // draw the indicator
+ //dx = pixelMetric(PM_MenuButtonIndicator, widget);
+ int dx = menuButtonIndicatorWidth( button->height() );
+ drawArrow(painter, Qt::DownArrow, active,
+ x+w-dx, y+2, dx-4, h-4, group,button->isEnabled() );
+ w -= dx;
+ }
+
+ if (button->iconSet() && !button->iconSet()->isNull()) { // draw icon
+ if (button->isEnabled()) {
+ if (button->hasFocus()) {
+ mode = QIconSet::Active;
+ } else {
+ mode = QIconSet::Normal;
+ }
+ } else {
+ mode = QIconSet::Disabled;
+ }
+
+#if 0
+ if (button->isToggleButton() && button->isOn()) {
+ state = true;
+ } else {
+ state = false;
+ }
+#endif
+
+ pixmap = button->iconSet()->pixmap(QIconSet::Small, mode);
+ if (button->text().isEmpty() && !button->pixmap()) {
+ painter->drawPixmap(x+w/2 - pixmap.width()/2,
+ y+h/2 - pixmap.height()/2, pixmap);
+ } else {
+ painter->drawPixmap(x+4, y+h/2 - pixmap.height()/2, pixmap);
+ }
+ x += pixmap.width() + 4;
+ w -= pixmap.width() + 4;
+ }
+
+ if (active || button->isDefault()) { // default button
+ for(int n=0; n<2; n++) {
+ drawItem(painter, x+n, y, w, h,
+ AlignCenter | ShowPrefix,
+ button->colorGroup(),
+ button->isEnabled(),
+ button->pixmap(),
+ button->text(), -1,
+ (button->isEnabled()) ?
+ &button->colorGroup().buttonText() :
+ &button->colorGroup().mid());
+ }
+ } else { // normal button
+ drawItem(painter, x, y, w, h,
+ AlignCenter | ShowPrefix,
+ button->colorGroup(),
+ button->isEnabled(),
+ button->pixmap(),
+ button->text(), -1,
+ (button->isEnabled()) ?
+ &button->colorGroup().buttonText() :
+ &button->colorGroup().mid());
+ }
+}
+
+
+void PhaseStyle::drawFocusRect(QPainter *painter, const QRect &rect,
+ const QColorGroup &group,
+ const QColor *, bool atBorder) {
+
+
+ QPen old = painter->pen();
+ painter->setPen(group.highlight().dark(contrast));
+ painter->setBrush(NoBrush);
+
+ if ( atBorder )
+ painter->drawRect(QRect(rect.x()+1, rect.y()+1,
+ rect.width()-2, rect.height()-2 ));
+ else
+ painter->drawRect(rect);
+
+
+ painter->setPen(old);
+
+}
+
+void PhaseStyle::drawSeperator( QPainter* painter, int x, int y, int w,
+ int h, const QColorGroup& group, bool,
+ int , int ) {
+ qWarning( "Seperator" );
+ QRect rect(x, y, w, h);
+ int x2 = rect.right();
+ int y2 = rect.bottom();
+
+ painter->setPen(group.dark());
+ if (w < h)
+ painter->drawLine(w/2, y, w/2, y2);
+ else
+ painter->drawLine(x, h/2, x2, h/2);
+}
+
+void PhaseStyle::drawMenuBarItem(QPainter* p, int x, int y, int w, int h,
+ QMenuItem *mi, QColorGroup& g, bool enabled,
+ bool act ) {
+ return QWindowsStyle::drawMenuBarItem(p, x, y, w, h, mi, g, enabled, act);
+}
+
+
+void PhaseStyle::drawIndicator(QPainter* painter, int x, int y, int w, int h,
+ const QColorGroup &group, int state, bool,
+ bool enabled ) {
+ drawPanel(painter, x, y, w, h, group, true, 1, enabled ?
+ &group.brush(QColorGroup::Base) :
+ &group.brush(QColorGroup::Background));
+
+ if (QButton::On == state ) {
+ painter->setPen(group.dark());
+ painter->drawRect(x+3, y+3, w-6, h-6);
+ painter->fillRect(x+4, y+4, w-8, h-8,
+ group.brush(QColorGroup::Highlight));
+ }
+}
+
+
+void PhaseStyle::drawExclusiveIndicator(QPainter* painter, int x, int y, int w, int h,
+ const QColorGroup &group, bool on,
+ bool /*down*/, bool enabled) {
+
+ QRect r(x, y, w, h );
+
+
+ /*
+ * As Polygon and Polyline are broken in Qt2 lets use
+ * something not that spectacilur -> ellipse
+ */
+ painter->save();
+ painter->fillRect(x, y, w, h, group.background());
+
+
+ painter->setBrush(enabled
+ ? group.brush(QColorGroup::Base)
+ : group.brush(QColorGroup::Background));
+ painter->setPen(group.dark());
+
+ if (0 == w % 2) --w;
+ if (0 == h % 2) --h;
+ painter->drawEllipse(x, y, w, h );
+
+ if(on) {
+ painter->setBrush(group.brush(QColorGroup::Highlight));
+ painter->drawEllipse(x+3,y+3,w-6,h-6);
+ }
+
+ painter->restore();
+}
+
+
+/*
+ * Does not get called in QWS as it seems
+ */
+void PhaseStyle::drawExclusiveIndicatorMask(QPainter *painter, int x, int y, int w,
+ int h, bool /*on*/ ) {
+ return;
+
+
+
+ if (0 != w%2) --w;
+ if (0 != h%2) --h;
+
+ QRect r(x, y, w, h );
+ int x2 = r.right();
+ int y2 = r.bottom();
+ int cx = (x + x2) / 2;
+ int cy = (y + y2) / 2;
+ QPointArray parray;
+
+
+ painter->setBrush(Qt::color1);
+ painter->setPen(Qt::color1);
+ parray.putPoints(0, 8,
+ x,cy+1, x,cy, cx,y, cx+1,y,
+ x2,cy, x2,cy+1, cx+1,y2, cx,y2);
+ painter->drawPolygon(parray, 0, 8);
+}
+
+int PhaseStyle::defaultFrameWidth()const {
+ return 1;
+}
+
+int PhaseStyle::popupMenuItemHeight ( bool ,
+ QMenuItem * mi,
+ const QFontMetrics & fm ) {
+ int h = 0;
+ if (mi->custom() ) {
+ h = mi->custom()->sizeHint().height();
+ if (!mi->custom()->fullSpan() )
+ h += ITEMVMARGIN*2 + ITEMFRAME*2;
+ }else if (mi->isSeparator() ) {
+ h = 1;
+ }else {
+ if ( mi->pixmap() ) {
+ h = QMAX(h, mi->pixmap()->height() + ITEMFRAME*2);
+ }else {
+ h = QMAX(h, MINICONSIZE+ITEMFRAME*2 );
+ h = QMAX(h, fm.height()
+ + ITEMVMARGIN*2 + ITEMFRAME*2 );
+ }
+ if ( mi->iconSet() )
+ h = QMAX(h, mi->iconSet()->
+ pixmap(QIconSet::Small, QIconSet::Normal ).height()
+ + ITEMFRAME*2 );
+ }
+
+
+ return h;
+}
+
+int PhaseStyle::extraPopupMenuItemWidth(bool checkable, int maxpmw,
+ QMenuItem* mi, const QFontMetrics& ) {
+ int w = 0;
+ if (mi->isSeparator() )
+ return 3;
+
+ else if ( mi->pixmap() )
+ w = mi->pixmap()->width();
+
+ if (!mi->text().isNull() &&
+ mi->text().find('\t' ) >= 0 )
+ w += 12;
+ else if ( mi->popup() )
+ w += 2*ARROWMARGIN;
+
+ if ( maxpmw )
+ w += maxpmw +4;
+
+
+ if ( maxpmw > 0 || checkable )
+ w += ITEMHMARGIN*2+8;
+
+ w += RIGHTBORDER;
+ return w;
+}
+
+QSize PhaseStyle::indicatorSize()const {
+ return QSize( 11, 11 );
+}
+
+QSize PhaseStyle::exclusiveIndicatorSize()const {
+ return QSize( 11, 11 );
+}
+
+void PhaseStyle::getButtonShift( int &x, int &y ) {
+ x++;
+ y++;
+}
+
+void PhaseStyle::drawPopupMenuItem ( QPainter * p, bool checkable,
+ int maxpmw,int tabwidth,
+ QMenuItem * mi, const QPalette & pal,
+ bool act, bool enabled, int x,
+ int y, int w, int h ) {
+ if ( !mi )
+ return;
+
+ QRect rect(x, y, w, h );
+ int x2, y2;
+ x2 = rect.right();
+ y2 = rect.bottom();
+ const QColorGroup& g = pal.active();
+ QColorGroup itemg = !enabled ? pal.disabled() : pal.active();
+
+ if ( checkable || maxpmw ) maxpmw = QMAX(maxpmw, 20);
+
+ if (act && enabled )
+ p->fillRect(x, y, w, h, g.highlight() );
+ else
+ p->fillRect(x, y, w, h, g.background() );
+
+ // draw seperator
+ if (mi->isSeparator() ) {
+ p->setPen( g.dark() );
+ p->drawLine( x+8, y+1, x+w-8, y+1 );
+
+ p->setPen( g.mid() );
+ p->drawLine( x+8, y, x+w-8, y );
+ p->drawPoint(x+w,y+1);
+
+ p->setPen( g.midlight() );
+ p->drawLine( x+8, y-1, x+w-8, y-1 );
+ p->drawPoint(x+8, y );
+ return;
+ }
+
+ // draw icon
+ QIconSet::Mode mode;
+ if ( mi->iconSet() && !mi->isChecked() ) {
+ if ( act )
+ mode = enabled ? QIconSet::Active : QIconSet::Disabled;
+ else
+ mode = enabled ? QIconSet::Normal : QIconSet::Disabled;
+ QPixmap pixmap = mi->iconSet()->pixmap(QIconSet::Small, mode );
+ QRect pmrect(0, 0, pixmap.width(), pixmap.height() );
+ QRect cr(x, y, maxpmw, h );
+ pmrect.moveCenter( cr.center() );
+ p->drawPixmap(pmrect.topLeft(), pixmap);
+ }
+
+ // draw check
+ if(mi->isChecked() ) {
+ drawCheckMark(p, x, y, maxpmw, h, itemg, act, !enabled );
+ }
+
+
+ // draw text
+ int xm = maxpmw + 2;
+ int xp = x + xm;
+ int tw = w -xm - 2;
+
+ p->setPen( enabled ? ( act ? g.highlightedText() : g.buttonText() ) :
+ g.mid() );
+
+
+ if ( mi->custom() ) {
+ p->save();
+ mi->custom()->paint(p, g, act, enabled,
+ xp, y+1, tw, h-2 );
+ p->restore();
+ }else { // draw label
+ QString text = mi->text();
+ if (!text.isNull() ) {
+ int t = text.find('\t');
+ const int tflags = AlignVCenter | DontClip |
+ ShowPrefix | SingleLine |
+ AlignLeft;
+
+ if (t >= 0) {
+ int tabx = x + w - tabwidth - RIGHTBORDER -
+ ITEMHMARGIN - ITEMFRAME;
+ p->drawText(tabx, y+ITEMVMARGIN, tabwidth,
+ h-2*ITEMVMARGIN, tflags,
+ text.mid(t+1) );
+ text = text.left(t );
+ }
+
+ // draw left label
+ p->drawText(xp, y+ITEMVMARGIN,
+ tw, h-2*ITEMVMARGIN,
+ tflags, text, t);
+ }else if ( mi->pixmap() ) { // pixmap as label
+ QPixmap pixmap = *mi->pixmap();
+ if ( pixmap.depth() == 1 )
+ p->setBackgroundMode( OpaqueMode );
+
+ int dx = ((w-pixmap.width() ) /2 ) +
+ ((w - pixmap.width()) %2 );
+ p->drawPixmap(x+dx, y+ITEMFRAME, pixmap );
+
+ if ( pixmap.depth() == 1 )
+ p->setBackgroundMode( TransparentMode );
+ }
+ }
+
+ if ( mi->popup() ) { // draw submenu arrow
+ int dim = (h-2*ITEMFRAME) / 2;
+ drawArrow( p, RightArrow, false,
+ x+w-ARROWMARGIN-ITEMFRAME-dim,
+ y+h/2-dim/2, dim, dim, g, enabled );
+ }
+}
+
+
+QRect PhaseStyle::comboButtonRect ( int x, int y, int w, int h ) {
+ return QRect(x+2, y+2, w-4-17, h-5 );
+}
+
+void PhaseStyle::drawComboButton( QPainter * p, int x, int y,
+ int w, int h,
+ const QColorGroup & g,
+ bool sunken,
+ bool editable,
+ bool,
+ const QBrush *) {
+ drawButton(p, x, y, w, h, g,
+ sunken, &g.brush(QColorGroup::Button ));
+
+
+ bool odd = (h % 2);
+ drawPanel(p, w-15 , y+(h/2)-3, 10, (odd ? 7 : 6 ),
+ g, true , 1, sunken ? &g.brush(QColorGroup::Midlight)
+ : &g.brush(QColorGroup::Mid) );
+
+ if (editable ) {
+ const int x2 = x+w-1; const int y2 = y+h-1;
+ p->setPen(g.dark());
+ p->drawLine(x2+1, y, x2+1, y2);
+ p->setPen(g.midlight());
+ p->drawLine(x2+2, y, x2+2, y2-1);
+ p->setPen(g.button());
+ p->drawPoint(x2+2, y2);
+ }
+
+ p->setPen(g.buttonText() );
+}
+
+
+void PhaseStyle::drawTab(QPainter* painter, const QTabBar* bar, QTab* tab,
+ bool selected ) {
+ bool edge = false;
+ int x, y, w, h;
+ QRect r = tab->rect();
+ r.rect(&x,&y,&w,&h);
+ const int x2 = x+w-1;
+ const int y2 = y+h-1;
+ const QColorGroup &group = bar->colorGroup();
+
+
+ painter->save();
+
+ // what position is the tab?
+ if ((bar->count() == 1 ))
+ edge = true;
+ else
+ edge = false;
+
+ switch (QTabBar::Shape(bar->shape())) {
+ case QTabBar::RoundedAbove:
+ case QTabBar::TriangularAbove: {
+ if (!selected) { // shorten
+ y += 2; h -= 2;
+ }
+ if (selected) {
+ painter->setPen(Qt::NoPen);
+ painter->fillRect(x+1, y+1, w-1, h-1,
+ group.brush(QColorGroup::Background));
+ } else
+ drawPhaseGradient(painter, QRect(x+1, y+1, w-1, h-2),
+ group.background().dark(contrast) );
+
+
+ // draw tab
+ painter->setPen(group.dark());
+ painter->drawLine(x, y, x, y2-2);
+ painter->drawLine(x+1, y, x2, y);
+ painter->drawLine(x2, y+1, x2, y2-2);
+
+ painter->setPen(group.mid());
+ painter->drawLine(x2-1, y+2, x2-1, y2-2);
+
+ painter->setPen(group.midlight());
+ painter->drawLine(x+1, y+1, x2-2, y+1);
+ if ((selected) || edge) painter->drawLine(x+1, y+2, x+1, y2-2);
+
+ // finish off bottom
+ if (selected) {
+ painter->setPen(group.dark());
+ painter->drawPoint(x, y2-1);
+ painter->drawPoint(x2, y2-1);
+
+ painter->setPen(group.midlight());
+ painter->drawPoint(x, y2);
+ painter->drawLine(x+1, y2-1, x+1, y2);
+ painter->drawPoint(x2, y2);
+
+ painter->setPen(group.mid());
+ painter->drawPoint(x2-1, y2-1);
+
+ if (edge) {
+ painter->setPen(group.dark());
+ painter->drawLine(x, y2-1, x, y2);
+ painter->setPen(group.midlight());
+ painter->drawPoint(x+1, y2);
+ }
+ } else {
+ painter->setPen(group.dark());
+ painter->drawLine(x, y2-1, x2, y2-1);
+
+ painter->setPen(group.midlight());
+ painter->drawLine(x, y2, x2, y2);
+
+ if (edge) {
+ painter->setPen(group.dark());
+ painter->drawLine(x, y2-1, x, y2);
+ }
+ }
+ break;
+ }
+ case QTabBar::RoundedBelow:
+ case QTabBar::TriangularBelow: {
+ painter->setBrush( group.background().dark(contrast));
+ painter->setPen(Qt::NoPen);
+ painter->fillRect(x+1, y+1, w-1, h-1, painter->brush());
+
+ // draw tab
+ painter->setPen(group.dark());
+ painter->drawLine(x, y+1, x, y2);
+ painter->drawLine(x+1, y2, x2, y2);
+ painter->drawLine(x2, y+1, x2, y2-1);
+
+ painter->setPen(group.mid());
+ painter->drawLine(x2-1, y+1, x2-1, y2-1);
+ painter->drawLine(x+2, y2-1, x2-1, y2-1);
+ painter->drawPoint(x, y);
+ painter->drawPoint(x2, y);
+
+ if ((selected) || edge) {
+ painter->setPen(group.midlight());
+ painter->drawLine(x+1, y+1, x+1, y2-2);
+ }
+
+ // finish off top
+ if (selected) {
+ if (edge) {
+ painter->setPen(group.dark());
+ painter->drawPoint(x, y);
+ painter->setPen(group.midlight());
+ painter->drawPoint(x+1, y);
+ }
+ } else {
+ painter->setPen(group.dark());
+ painter->drawLine(x, y+1, x2, y+1);
+
+ painter->setPen(group.mid());
+ painter->drawLine(x, y, x2, y);
+
+ if (edge) {
+ painter->setPen(group.dark());
+ painter->drawPoint(x, y);
+ }
+ }
+ break;
+ }
+ }
+
+ painter->restore();
+}
+
+void PhaseStyle::drawTabMask( QPainter* p, const QTabBar*, QTab* tab,
+ bool ) {
+ p->fillRect(tab->rect(), Qt::color1);
+}
+
+void PhaseStyle::drawToolButton(QPainter * p, int x, int y,
+ int w, int h, const QColorGroup & g,
+ bool sunken,
+ const QBrush * fill ) {
+ QRect r(x, y, w, h );
+ p->fillRect(r, g.background());
+
+ drawPanel(p, x, y, w, h, g, sunken, 1,
+ fill ? fill : &g.brush(QColorGroup::Button) );
+
+
+ p->setPen(g.text() );
+}
+
+
+/*
+ * LGPLv2 Copyright (C) 2001 Rik Hemsley (rikkus) <rik@kde.org>
+ *
+ * ../web/webstyle.cpp
+ */
+void PhaseStyle::scrollBarMetrics(const QScrollBar* sb, int& sliderMin,
+ int& sliderMax, int &sliderLength,
+ int& 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 < SCROLLBAR_EXTENT)
+ sliderLength = SCROLLBAR_EXTENT;
+
+ if (sliderLength > maxlen)
+ sliderLength = maxlen;
+
+ sliderMax = sliderMin + maxlen - sliderLength;
+}
+
+void PhaseStyle::drawScrollBarControls( QPainter* p, const QScrollBar *sb,
+ int sliderStart, uint controls,
+ uint activeControl) {
+ const bool horizontal = (sb->orientation() == Qt::Horizontal );
+ int sliderMin, sliderMax, sliderLength, buttonDim;
+ const QColorGroup& g = sb->colorGroup();
+ QRect sub, add, subPage, addPage, slider;
+ int x, y, x2, y2;
+
+ scrollBarMetrics( sb, sliderMin, sliderMax, sliderLength, buttonDim );
+
+ /* lets get the positions */
+ scrollBarItemPositions(sb, horizontal, sliderStart,
+ sliderMax, sliderLength, buttonDim,
+ sub, add, subPage, addPage,
+ slider );
+
+
+ /* sanity */
+ if ( sliderStart > sliderMax )
+ sliderStart = sliderMax;
+
+ // addline
+ if ( controls & AddLine && add.isValid() ) {
+ x = add.x(); y = add.y();
+ x2 = add.width(); y2 = add.height();
+ const bool down = (activeControl & AddLine );
+ drawBevelButton(p, x, y, x2, y2, g, down,
+ &g.brush(QColorGroup::Button));
+
+ Qt::ArrowType arrow = horizontal ? RightArrow : DownArrow;
+ if (down ) {
+ switch (arrow ) {
+ case DownArrow: y++; break;
+ case RightArrow: x++; break;
+ default: break;
+ }
+ }
+ drawArrow( p, arrow, down, x, y, x2, y2, g, true );
+ }
+
+ if ( controls & SubLine && sub.isValid() ) {
+ x = sub.x(); y = sub.y();
+ x2 = sub.width(); y2 = sub.height();
+ const bool down = (activeControl & SubLine );
+ drawBevelButton(p, x, y, x2, y2, g, down,
+ &g.brush(QColorGroup::Button));
+
+ Qt::ArrowType arrow = horizontal ? LeftArrow : UpArrow;
+ if (down ) {
+ switch (arrow ) {
+ case UpArrow: y--; break;
+ case LeftArrow: x--; break;
+ default: break;
+ }
+ }
+ drawArrow( p, arrow, down, x, y, x2, y2, g, true );
+ }
+
+ if ( controls & AddPage && addPage.isValid() ) {
+ x = addPage.x(); y = addPage.y();
+ x2 = addPage.right(); y2 = addPage.bottom();
+
+ p->fillRect(addPage, g.mid());
+ p->setPen(g.dark());
+ if (horizontal) { // vertical
+ p->drawLine(x, y, x2, y);
+ p->drawLine(x, y2, x2, y2);
+ } else { // horizontal
+ p->drawLine(x, y, x, y2);
+ p->drawLine(x2, y, x2, y2);
+ }
+ }
+
+ if ( controls & SubPage && subPage.isValid() ) {
+ x = subPage.x(); y = subPage.y();
+ x2 = subPage.right(); y2 = subPage.bottom();
+
+ p->fillRect(subPage, g.mid());
+ p->setPen(g.dark());
+ if (horizontal) { // vertical
+ p->drawLine(x, y, x2, y);
+ p->drawLine(x, y2, x2, y2);
+ } else { // horizontal
+ p->drawLine(x, y, x, y2);
+ p->drawLine(x2, y, x2, y2);
+ }
+}
+
+ if ( controls & Slider && slider.isValid() ) {
+ x = slider.x(); y = slider.y();
+ x2 = slider.width(); y2 = slider.height();
+ const bool down = ( activeControl & Slider );
+ int cx = x + x2/2 -2; int cy = y + y2/2 -2;
+
+ drawBevelButton(p, x, y, x2, y2, g, down,
+ &g.brush(QColorGroup::Button) );
+
+ if (horizontal && (x2 >=20)) {
+ for (int n = -5; n <= 5; n += 5)
+ kColorBitmaps(p, g, cx+n, cy,
+ 0, &doodad_mid, &doodad_light, 0, 0, 0);
+ } else if (!horizontal && (y2 >= 20)) {
+ for (int n = -5; n <= 5; n += 5)
+ kColorBitmaps(p, g, cx, cy+n,
+ 0, &doodad_mid, &doodad_light, 0, 0, 0);
+ }
+
+ if ( sb->hasFocus() && down ) {
+ slider = QRect(slider.x()+2, slider.y()+2,
+ slider.width()-2, slider.height()-2 );
+ drawFocusRect(p, slider, g, false );
+ }
+
+ }
+}
+
+/*
+ * LGPLv2 Copyright (C) 2001 Rik Hemsley (rikkus) <rik@kde.org>
+ *
+ * ../web/webstyle.cpp
+ */
+QStyle::ScrollControl PhaseStyle::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;
+ else
+ 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;
+ else
+ return AddLine;
+ }
+}
+
+/*
+ * LGPLv2 Copyright (C) 2001 Rik Hemsley (rikkus) <rik@kde.org>
+ *
+ * ../web/webstyle.cpp
+ * scrollBarControlsMetrics
+ */
+void PhaseStyle::scrollBarItemPositions( const QScrollBar* sb, const bool horizontal,
+ int sliderStart, int sliderMax,
+ int sliderLength, int buttonDim,
+ QRect &rSub, QRect& rAdd, QRect& rSubPage,
+ QRect &rAddPage, QRect& rSlider ) {
+
+ 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);
+
+}
+
+
+void PhaseStyle::drawSlider (QPainter * p, int x, int y,
+ int w, int h, const QColorGroup &g,
+ Orientation o, bool, bool ) {
+ int cx = x + w/2;
+ int cy = y + h/2;
+ QBrush brush = g.brush( QColorGroup::Button );
+
+ if ( o == Horizontal ) {
+ drawBevelButton(p, cx-5, y, 6, h, g, false,
+ &brush );
+ drawBevelButton(p, cx, y, 6, h, g, false,
+ &brush );
+ }else {
+ drawBevelButton(p, x, cy-5, w, 6, g, false,
+ &brush );
+ drawBevelButton(p, x, cy, w, 6, g, false,
+ &brush );
+ }
+}
+
+void PhaseStyle::drawSliderGroove(QPainter* p, int x, int y,
+ int w, int h, const QColorGroup& g,
+ QCOORD , Orientation o ) {
+ int cx = x + w/2;
+ int cy = y + h/2;
+
+ if ( o == Horizontal ) {
+ y = cy-3; h = 7;
+ }else {
+ x = cx-3; w = 7;
+ }
+
+ drawPanel(p, x, y, w, h, g, true, 1,
+ &g.brush(QColorGroup::Mid ) );
+}
diff --git a/noncore/styles/phase/phasestyle.h b/noncore/styles/phase/phasestyle.h
new file mode 100644
index 0000000..ab593e6
--- a/dev/null
+++ b/noncore/styles/phase/phasestyle.h
@@ -0,0 +1,166 @@
+//////////////////////////////////////////////////////////////////////////////
+// phasestyle.h
+// -------------------
+// A style for KDE
+// -------------------
+// Copyright (c) 2004 David Johnson <david@usermode.org>
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to
+// deal in the Software without restriction, including without limitation the
+// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+// sell copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+// IN THE SOFTWARE.
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef PHASESTYLE_H
+#define PHASESTYLE_H
+
+#include <qstyle.h>
+#include <qwindowsstyle.h>
+#include <qcolor.h>
+
+class KPixmap;
+
+class PhaseStyle : public QWindowsStyle
+{
+ Q_OBJECT
+public:
+ PhaseStyle();
+ virtual ~PhaseStyle();
+
+ void polish( QWidget * );
+ void polish( QPalette& );
+ void polish( QApplication* );
+
+
+ void drawCheckMark ( QPainter * p, int x, int y, int w,
+ int h, const QColorGroup & g,
+ bool act, bool dis );
+ void drawArrow(QPainter *p, Qt::ArrowType type, bool down,
+ int x, int y, int w, int h, const QColorGroup &g,
+ bool enabled=true, const QBrush *fill = 0);
+
+ void drawPushButton(QPushButton* btn, QPainter* p );
+ void drawPushButtonLabel(QPushButton* btn, QPainter* p );
+ void drawPanel(QPainter* p, int , int, int, int,
+ const QColorGroup&, bool sunken = false,
+ int lineWidth = 1, const QBrush *b = 0l );
+ void drawButton( QPainter*, int x, int y, int w, int h,
+ const QColorGroup&, bool sunken = false,
+ const QBrush* fill = 0);
+ void drawBevelButton(QPainter*, int, int, int, int,
+ const QColorGroup&, bool sunken = false,
+ const QBrush* fill = 0 );
+ void drawFocusRect( QPainter* p, const QRect& r,
+ const QColorGroup&, const QColor* = 0,
+ bool atBorder = false );
+ void drawButtonMask( QPainter* p, int x, int y,
+ int w, int h );
+
+
+ /* Menu Stuff */
+ void drawSeperator( QPainter* p, int x, int y, int w,
+ int h, const QColorGroup& group, bool sunken = true,
+ int lineWidth = 1, int midLineWidtth = 0 );
+ void drawMenuBarItem(QPainter* p, int x, int y, int w, int h,
+ QMenuItem *mi, QColorGroup& g, bool enabled,
+ bool act);
+
+ /* RadioButton, CheckBox... */
+ void drawIndicator(QPainter* p, int x, int y, int w, int h,
+ const QColorGroup &g, int state, bool down = FALSE,
+ bool enabled = TRUE );
+ void drawExclusiveIndicator( QPainter*, int, int, int, int,
+ const QColorGroup&, bool on,
+ bool down = false,bool enabled = true );
+ void drawExclusiveIndicatorMask (QPainter*, int, int, int, int, bool );
+
+ /* spacing,dimensions */
+ int defaultFrameWidth () const;
+ int popupMenuItemHeight ( bool checkable,
+ QMenuItem * mi,
+ const QFontMetrics & fm );
+ int extraPopupMenuItemWidth(bool checkable, int maxpmw,
+ QMenuItem* mi, const QFontMetrics& fm );
+
+ QSize indicatorSize()const;
+ QSize exclusiveIndicatorSize()const;
+ void getButtonShift( int &x, int &y );
+
+ /* popup drawing */
+ void 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 );
+
+ /* combo box */
+ QRect comboButtonRect ( int x, int y, int w, int h );
+ void drawComboButton( QPainter * p, int x, int y,
+ int w, int h,
+ const QColorGroup & g,
+ bool sunken = FALSE,
+ bool editable = FALSE,
+ bool enabled = TRUE,
+ const QBrush * fill = 0 );
+
+ /* tabbar */
+ void drawTab(QPainter*, const QTabBar*, QTab*,
+ bool selected );
+ void drawTabMask( QPainter*, const QTabBar*, QTab*,
+ bool );
+
+ /* tool button */
+ void drawToolButton ( QPainter * p, int x, int y,
+ int w, int h,
+ const QColorGroup & g,
+ bool sunken = FALSE,
+ const QBrush * fill = 0 );
+
+ /* scrollbar */
+ void drawScrollBarControls ( QPainter *, const QScrollBar *,
+ int sliderStart, uint controls,
+ uint activeControl );
+ void scrollBarMetrics( const QScrollBar*, int&, int&, int&, int& );
+ QStyle::ScrollControl scrollBarPointOver( const QScrollBar*, int sliderStart,
+ const QPoint& );
+
+ /* slider drawing */
+ void drawSlider ( QPainter * p, int x, int y, int w, int h,
+ const QColorGroup & g, Orientation,
+ bool tickAbove, bool tickBelow );
+
+ void drawSliderGroove ( QPainter * p, int x, int y, int w,
+ int h, const QColorGroup & g,
+ QCOORD c, Orientation );
+private:
+ void drawPhaseGradient(QPainter* p,
+ const QRect& rec,
+ const QColor& col )const;
+ static void scrollBarItemPositions( const QScrollBar *,
+ const bool horizontal,
+ int sliderStart,
+ int sliderMax,
+ int sliderLength,
+ int buttomDim,
+ QRect& sub,
+ QRect& add,
+ QRect& subPage,
+ QRect& addPage,
+ QRect& slider );
+};
+
+
+#endif
diff --git a/noncore/styles/phase/plugin.cpp b/noncore/styles/phase/plugin.cpp
new file mode 100644
index 0000000..8396c0a
--- a/dev/null
+++ b/noncore/styles/phase/plugin.cpp
@@ -0,0 +1,71 @@
+/*
+               =. This file is part of the OPIE Project
+             .=l. Copyright (c) 2002 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 "phasestyle.h"
+
+#include <qapplication.h>
+
+PhaseStyleImpl::PhaseStyleImpl()
+ : m_style( 0l )
+{}
+
+/* Qt will delete the style */
+PhaseStyleImpl::~PhaseStyleImpl()
+{}
+
+QRESULT PhaseStyleImpl::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* PhaseStyleImpl::style() {
+ if (!m_style )
+ m_style = new PhaseStyle();
+ return m_style;
+}
+
+QString PhaseStyleImpl::name()const {
+ return qApp->translate("PhaseStyle", "Phase", "Name of the style Phase");
+}
+
+
+Q_EXPORT_INTERFACE()
+{
+ Q_CREATE_INSTANCE( PhaseStyleImpl )
+}
+
diff --git a/noncore/styles/phase/plugin.h b/noncore/styles/phase/plugin.h
new file mode 100644
index 0000000..9340737
--- a/dev/null
+++ b/noncore/styles/phase/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 PhaseStyle;
+
+/**
+ * Factory to create PhaseStyle
+ */
+class PhaseStyleImpl : public StyleInterface {
+public:
+ PhaseStyleImpl();
+ virtual ~PhaseStyleImpl();
+
+ QRESULT queryInterface( const QUuid&, QUnknownInterface** );
+ Q_REFCOUNT
+
+ virtual QStyle *style();
+ virtual QString name()const;
+private:
+ PhaseStyle* m_style;
+};
+
+#endif