Started system style. Make sure to read the readme as it requires some new

gradient settings.

svn path=/trunk/kdebase/kwin/; revision=30586
This commit is contained in:
Daniel M. Duley 1999-10-11 02:01:17 +00:00
parent 37b09be6f3
commit c42791563d
4 changed files with 396 additions and 0 deletions

View file

@ -0,0 +1,33 @@
If you tried the system window manager style you probably noticed it's not
too nice looking using the standard KDE color schemes. This is because this
is the first style to use a kwin extended color configuration and needs some
additional entries in order to look decent.
To try it out with the extended color configuration I am using open:
~/.kde/share/config/kdeglobals
And replace the [WM] section with these entries:
activeBackground=192,192,192
activeBlend=0,0,0
activeForeground=0,0,0
handle=140,140,140
inactiveHandle=140,140,140
inactiveBackground=192,192,192
inactiveBlend=192,192,192
inactiveForeground=128,128,128
buttonForegroundDown=144,170,191
buttonBackgroundDown=163,163,163
buttonBlendDown=0,0,0
buttonBackground=163,163,163
buttonBlend=0,0,0
Once a kwin color scheme selection kcmmodule is done this will no longer be a
problem ;-)
Daniel M. Duley
mosfet@kde.org
mosfet@linuxmandrake.com

25
NEWCOLORSCHEME.README Normal file
View file

@ -0,0 +1,25 @@
KWin can now handle some new color scheme entries in addition to the ones
handled by KWM. Note that these are suggestions and all the colors may not
be used by all KWin styles. These all currently go into the [WM] group.
frame, inactiveFrame : Window frame (was fixed to general KDE bg in KWM).
handle, inactiveHandle : Window handles (sometimes called "grips").
activeBackground, inactiveBackground : Tilebars (bad name, but it's what KWM
uses).
activeBlend, inactiveBlend : Titlebar blend.
activeForeground, inactiveForeground : Tilebar text.
buttonBackground, buttonBackgroundDown : Button background color for up and
down states.
buttonBlend, buttonBlendDown : Button blend.
buttonForeground, buttonForegroundDown : Button foreground color.
Daniel M. Duley
mosfet@kde.org
mosfet@linuxmandrake.com

292
systemclient.cpp Normal file
View file

@ -0,0 +1,292 @@
#include "systemclient.h"
#include <qapplication.h>
#include <qcursor.h>
#include <qabstractlayout.h>
#include <qlayout.h>
#include <qtoolbutton.h>
#include <qlabel.h>
#include <qdrawutil.h>
#include <kpixmapeffect.h>
#include <qbitmap.h>
#include "workspace.h"
#include "options.h"
static unsigned char iconify_bits[] = {
0x00, 0x00, 0xff, 0xff, 0x7e, 0x3c, 0x18, 0x00 };
static unsigned char close_bits[] = {
0xc3, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0xc3, 0x00 };
static unsigned char maximize_bits[] = {
0x3f, 0x9f, 0xcf, 0x67, 0x33, 0x19, 0x0c, 0x06 };
static QPixmap *titlePix=0;
static KPixmap *aFramePix=0;
static KPixmap *iFramePix=0;
static KPixmap *aHandlePix=0;
static KPixmap *iHandlePix=0;
static bool pixmaps_created = false;
static void create_pixmaps()
{
if(pixmaps_created)
return;
pixmaps_created = true;
// titlebar
QPainter p;
int i, y;
titlePix = new QPixmap(32, 18);
p.begin(titlePix);
p.fillRect(0, 0, 32, 18,
QBrush(options->color(Options::Frame, true),
QBrush::SolidPattern));
for(i=0, y=5; i < 4; ++i, y+=3){
p.setPen(options->color(Options::TitleBar, true).light(150));
p.drawLine(0, y, 31, y);
p.setPen(options->color(Options::TitleBar, true).dark(120));
p.drawLine(0, y+1, 31, y+1);
}
p.end();
// Bottom frame gradient
aFramePix = new KPixmap();
aFramePix->resize(32, 6);
KPixmapEffect::gradient(*aFramePix,
options->color(Options::Frame, true).light(150),
options->color(Options::Frame, true).dark(120),
KPixmapEffect::VerticalGradient);
iFramePix = new KPixmap();
iFramePix->resize(32, 6);
KPixmapEffect::gradient(*iFramePix,
options->color(Options::Frame, false).light(150),
options->color(Options::Frame, false).dark(120),
KPixmapEffect::VerticalGradient);
// Handle gradient
aHandlePix = new KPixmap();
aHandlePix->resize(32, 6);
KPixmapEffect::gradient(*aHandlePix,
options->color(Options::Handle, true).light(150),
options->color(Options::Handle, true).dark(120),
KPixmapEffect::VerticalGradient);
iHandlePix = new KPixmap();
iHandlePix->resize(32, 6);
KPixmapEffect::gradient(*iHandlePix,
options->color(Options::Handle, false).light(150),
options->color(Options::Handle, false).dark(120),
KPixmapEffect::VerticalGradient);
}
SystemButton::SystemButton(const unsigned char *bitmap, QWidget *parent,
const char *name)
: QButton(parent, name)
{
QPainter p;
aBackground.resize(16, 16);
iBackground.resize(16, 16);
QColor hColor(options->color(Options::ButtonBg, true));
QColor lColor(options->color(Options::ButtonBlend, true));
// only do this if we can dim/brighten equally
if(hColor.red() < 226 && hColor.green() < 226 && hColor.blue() < 226)
hColor.setRgb(hColor.red()+30, hColor.green()+30, hColor.blue()+30);
if(lColor.red() > 29 && lColor.green() > 29 && lColor.blue() > 29)
lColor.setRgb(lColor.red()-30, lColor.green()-30, lColor.blue()-30);
KPixmapEffect::gradient(iBackground, hColor, lColor,
KPixmapEffect::DiagonalGradient);
hColor = options->color(Options::ButtonBlend, false);
lColor = options->color(Options::ButtonBg, false);
if(hColor.red() > 29 && hColor.green() > 29 && hColor.blue() > 29)
hColor.setRgb(hColor.red()-30, hColor.green()-30, hColor.blue()-30);
if(lColor.red() < 226 && lColor.green() < 226 && lColor.blue() < 226)
lColor.setRgb(lColor.red()+30, lColor.green()+30, lColor.blue()+30);
KPixmapEffect::gradient(aBackground, hColor, lColor,
KPixmapEffect::DiagonalGradient);
KPixmap aInternal;
aInternal.resize(10, 10);
KPixmap iInternal;
iInternal.resize(10, 10);
KPixmapEffect::gradient(iInternal,
options->color(Options::ButtonBlend, true),
options->color(Options::ButtonBg, true),
KPixmapEffect::DiagonalGradient);
KPixmapEffect::gradient(aInternal,
options->color(Options::ButtonBg, false),
options->color(Options::ButtonBlend, false),
KPixmapEffect::DiagonalGradient);
p.begin(&iBackground);
p.drawPixmap(3, 3, iInternal);
p.setPen(Qt::black);
p.drawRect(0, 0, 16, 16);
p.end();
p.begin(&aBackground);
p.drawPixmap(3, 3, aInternal);
p.setPen(Qt::black);
p.drawRect(0, 0, 16, 16);
p.end();
deco = QBitmap(8, 8, bitmap);
deco.setMask(deco);
resize(16, 16);
QBitmap mask;
mask.resize(16, 16);
mask.fill(color1);
p.begin(&mask);
p.setPen(color0);
p.drawPoint(0, 0);
p.drawPoint(15, 0);
p.drawPoint(0, 15);
p.drawPoint(15, 15);
p.end();
setMask(mask);
}
void SystemButton::drawButton(QPainter *p)
{
if(isDown())
p->drawPixmap(0, 0, aBackground);
else
p->drawPixmap(0, 0, iBackground);
p->setPen(options->color(Options::ButtonFg, isDown()));
p->drawPixmap(isDown() ? 5 : 4, isDown() ? 5 : 4, deco);
}
SystemClient::SystemClient( Workspace *ws, WId w, QWidget *parent,
const char *name )
: Client( ws, w, parent, name, WResizeNoErase )
{
create_pixmaps();
QGridLayout* g = new QGridLayout(this, 0, 0, 2);
g->setRowStretch(1, 10);
g->addWidget(windowWrapper(), 1, 1 );
g->addRowSpacing(2, 6);
button[0] = new SystemButton(close_bits, this );
button[1] = new SystemButton(iconify_bits, this );
button[2] = new SystemButton(maximize_bits, this );
connect( button[0], SIGNAL( clicked() ), this, ( SLOT( closeWindow() ) ) );
connect( button[1], SIGNAL( clicked() ), this, ( SLOT( iconify() ) ) );
connect( button[2], SIGNAL( clicked() ), this, ( SLOT( maximize() ) ) );
QHBoxLayout* hb = new QHBoxLayout();
g->addLayout( hb, 0, 1 );
hb->addSpacing(2);
hb->addWidget( button[0] );
titlebar = new QSpacerItem(10, 18, QSizePolicy::Expanding,
QSizePolicy::Minimum );
hb->addItem(titlebar);
hb->addSpacing(2);
hb->addWidget( button[1] );
hb->addWidget( button[2] );
hb->addSpacing(2);
for ( int i = 0; i < 3; i++) {
button[i]->setMouseTracking( TRUE );
button[i]->setFixedSize( 16, 16 );
}
}
void SystemClient::resizeEvent( QResizeEvent* e)
{
Client::resizeEvent( e );
if ( isVisibleToTLW() ) {
QPainter p( this );
QRect t = titlebar->geometry();
t.setTop( 0 );
QRegion r = rect();
r = r.subtract( t );
p.setClipRegion( r );
p.eraseRect( rect() );
}
}
void SystemClient::captionChange( const QString& )
{
repaint( titlebar->geometry(), false );
}
void SystemClient::paintEvent( QPaintEvent* )
{
QPainter p( this );
p.setPen(Qt::black);
p.drawRect(rect());
QRect t = titlebar->geometry();
t.setTop( 1 );
if(isActive())
p.drawTiledPixmap(t, *titlePix);
else
p.fillRect(t, options->colorGroup(Options::Frame, false).
brush(QColorGroup::Button));
qDrawShadePanel(&p, rect().x()+1, rect().y()+1, rect().width()-2,
rect().height()-2,
options->colorGroup(Options::Frame, isActive()), false);
//qDrawShadePanel(&p, rect().x()+1, rect().y()+1, rect().width()-2,
// 21, options->colorGroup(Options::Frame, isActive()),
// false);
p.setPen(options->colorGroup(Options::Frame, isActive()).dark());
p.drawLine(rect().x()+1, 20, rect().right()-1, 20);
p.setPen(options->colorGroup(Options::Frame, isActive()).light());
p.drawLine(rect().x()+1, 21, rect().right()-1, 21);
QRegion r = rect();
r = r.subtract( t );
p.setClipRegion( r );
p.setClipping( FALSE );
t.setTop( 2 );
t.setLeft( t.left() + 4 );
t.setRight( t.right() - 2 );
p.setPen(options->color(Options::Font, isActive()));
p.setFont(options->font(isActive()));
p.setBackgroundMode(OpaqueMode);
p.drawText( t, AlignCenter, caption() );
p.setBackgroundMode(TransparentMode);
qDrawShadePanel(&p, rect().x()+1, rect().bottom()-6, 24, 6,
options->colorGroup(Options::Handle, isActive()), false);
p.drawTiledPixmap(rect().x()+2, rect().bottom()-5, 22, 4,
isActive() ? *aHandlePix : *iHandlePix);
qDrawShadePanel(&p, rect().x()+25, rect().bottom()-6, rect().width()-50, 6,
options->colorGroup(Options::Frame, isActive()), false);
p.drawTiledPixmap(rect().x()+26, rect().bottom()-5, rect().width()-52, 4,
isActive() ? *aFramePix : *iFramePix);
qDrawShadePanel(&p, rect().right()-24, rect().bottom()-6, 24, 6,
options->colorGroup(Options::Handle, isActive()), false);
p.drawTiledPixmap(rect().right()-23, rect().bottom()-5, 22, 4,
isActive() ? *aHandlePix : *iHandlePix);
}
void SystemClient::mouseDoubleClickEvent( QMouseEvent * e )
{
if (titlebar->geometry().contains( e->pos() ) )
setShade( !isShade() );
workspace()->requestFocus( this );
}
void SystemClient::init()
{
//
}

46
systemclient.h Normal file
View file

@ -0,0 +1,46 @@
#ifndef __SYSTEMCLIENT_H
#define __SYSTEMCLIENT_H
#include <qbutton.h>
#include <qbitmap.h>
#include <kpixmap.h>
#include "client.h"
class QLabel;
class QSpacerItem;
// get rid of autohide :P
class SystemButton : public QButton
{
public:
SystemButton(const unsigned char *bitmap, QWidget *parent=0,
const char *name=0);
protected:
virtual void drawButton(QPainter *p);
void drawButtonLabel(QPainter *){;}
KPixmap aBackground, iBackground;
QBitmap deco;
};
class SystemClient : public Client
{
Q_OBJECT
public:
SystemClient( Workspace *ws, WId w, QWidget *parent=0, const char *name=0 );
~SystemClient(){;}
protected:
void resizeEvent( QResizeEvent* );
void paintEvent( QPaintEvent* );
void mouseDoubleClickEvent( QMouseEvent * );
void init();
void captionChange( const QString& name );
private:
SystemButton* button[3];
QSpacerItem* titlebar;
};
#endif