Since Matthias commited something I felt bad for not doing any work on this

like I said I would and only working on style stuff ;-)

I added basic color scheme handling to the Options class. All styles should
use this for color values. Supported are titlebars, titleblends, fonts,
button foreground and background, button blend, frames and handles for both
active and inactive states. Also added active and inactive fonts.

Not all clients have to use all the values, but for the values they do use
they should get them from here.

I also ported StdClient and Beos to the new scheme. I will do a kcm module once
I do the System decoration style ;-)

svn path=/trunk/kdebase/kwin/; revision=30497
This commit is contained in:
Daniel M. Duley 1999-10-10 03:22:21 +00:00
parent 21ae659168
commit 92e1e869b1
6 changed files with 147 additions and 24 deletions

View file

@ -52,10 +52,6 @@ BeClient::BeClient( Workspace *ws, WId w, QWidget *parent, const char *name )
{
create_pixmaps();
QFont f = font();
f.setBold( TRUE );
setFont( f );
QGridLayout* g = new QGridLayout( this, 0, 0, 2 );
g->addRowSpacing(1, 2);
g->setRowStretch( 2, 10 );
@ -75,6 +71,11 @@ BeClient::BeClient( Workspace *ws, WId w, QWidget *parent, const char *name )
hb->addStretch();
aFrameGrp = makeColorGroup(options->color(Options::Frame, true));
iFrameGrp = makeColorGroup(options->color(Options::Frame, false));
aTitleGrp = makeColorGroup(options->color(Options::TitleBar, true));
iTitleGrp = makeColorGroup(options->color(Options::TitleBar, false));
}
@ -111,25 +112,27 @@ void BeClient::captionChange( const QString& )
void BeClient::paintEvent( QPaintEvent* )
{
QPainter p( this );
QRect bar ( 0, 0, titlebar->geometry().right()+1, titlebar->geometry().bottom() );
qDrawWinPanel( &p, 0, bar.bottom()+2, width(), height() - bar.bottom()-2, colorGroup(), FALSE );
qDrawWinPanel( &p, 2, bar.bottom()+4, width()-4, height() - bar.bottom()-6, colorGroup(), TRUE );
QRect bar ( 0, 0, titlebar->geometry().right()+1,
titlebar->geometry().bottom() );
qDrawWinPanel( &p, 0, bar.bottom()+2, width(), height() - bar.bottom()-2,
isActive() ? aFrameGrp : iFrameGrp, FALSE );
qDrawWinPanel( &p, 2, bar.bottom()+4, width()-4, height() - bar.bottom()-6,
isActive() ? aFrameGrp : iFrameGrp, TRUE );
QRect t = titlebar->geometry();
bar.setBottom( bar.bottom() + 3 );
p.setClipRect( bar );
bar.setBottom( bar.bottom() + 2 );
if ( isActive() ) {
QPalette pal( QColor(248,204,0) );
qDrawWinPanel( &p, bar, pal.normal(), FALSE, &pal.brush(QPalette::Normal, QColorGroup::Background ) );
}
else
qDrawWinPanel( &p, bar, colorGroup(), FALSE, &colorGroup().brush( QColorGroup::Background ) );
qDrawWinPanel( &p, bar, isActive() ? aTitleGrp : iTitleGrp, FALSE,
isActive() ? &aTitleGrp.brush(QColorGroup::Background) :
&iTitleGrp.brush(QColorGroup::Background));
p.setClipping( FALSE );
p.drawPixmap( t.right() - 20, t.center().y()-8, *size_pix );
p.drawPixmap( t.left() +4, t.center().y()-miniIcon().height()/2, miniIcon() );
t.setLeft( t.left() + 20 +10);
p.setPen(options->color(Options::Font, isActive()));
p.setFont(options->font(isActive()));
p.drawText( t, AlignLeft|AlignVCenter, caption() );
}
@ -211,3 +214,10 @@ void BeClient::mouseDoubleClickEvent( QMouseEvent * e )
setShade( !isShade() );
workspace()->requestFocus( this );
}
QColorGroup BeClient::makeColorGroup(const QColor &bg, const QColor &fg)
{
return(QColorGroup( fg, bg, bg.light(150), bg.dark(),
bg.dark(120), fg,
QApplication::palette().normal().base()));
}

View file

@ -1,6 +1,7 @@
#ifndef BECLIENT_H
#define BECLIENT_H
#include "client.h"
#include <qpalette.h>
class QToolButton;
class QLabel;
class QSpacerItem;
@ -14,6 +15,7 @@ public:
~BeClient();
protected:
QColorGroup makeColorGroup(const QColor &bg, const QColor &fg=Qt::white);
void resizeEvent( QResizeEvent* );
void paintEvent( QPaintEvent* );
void mousePressEvent( QMouseEvent * );
@ -30,6 +32,7 @@ protected:
private:
QSpacerItem* titlebar;
void doShape();
QColorGroup aFrameGrp, iFrameGrp, aTitleGrp, iTitleGrp;
};

View file

@ -1,7 +1,81 @@
#include "options.h"
#include <qpalette.h>
#include <qapplication.h>
#include <kconfig.h>
#include <kglobal.h>
// increment this when you add a color type (mosfet)
#define KWINCOLORS 8
Options::Options(){
reload();
}
const QColor& Options::color(ColorType type, bool active)
{
return(colors[type + (active ? 0 : KWINCOLORS)]);
}
const QFont& Options::font(bool active)
{
return(active ? activeFont : inactiveFont);
}
void Options::reload()
{
focusPolicy = ClickToFocus;
resizeMode = Opaque;
moveMode = Transparent;//HalfTransparent;
QPalette pal = QApplication::palette();
KConfig *config = KGlobal::config();
config->setGroup("WM");
// normal colors
colors[Frame] = Qt::lightGray;
colors[Frame] = config->readColorEntry("frame", &colors[Frame]);
colors[Handle] = config->readColorEntry("handle", &colors[Frame]);
colors[ButtonBg] = config->readColorEntry("buttonBackground",
&colors[Frame]);
colors[ButtonBlend] = config->readColorEntry("buttonBlend",
&colors[ButtonBg]);
colors[TitleBar] = Qt::darkBlue;
colors[TitleBar] = config->readColorEntry("activeBackground",
&colors[TitleBar]);
colors[TitleBlend] = config->readColorEntry("activeBlend",
&colors[TitleBar]);
colors[Font] = Qt::white;
colors[Font] = config->readColorEntry("activeForeground", &colors[Font]);
colors[ButtonFg] = Qt::lightGray;
colors[ButtonFg] = config->readColorEntry("buttonForeground",
&colors[ButtonFg]);
// inactive
colors[Frame+KWINCOLORS] = colors[Frame];
colors[Frame+KWINCOLORS] =
config->readColorEntry("inactiveFrame", &colors[Frame+KWINCOLORS]);
colors[Handle+KWINCOLORS] =
config->readColorEntry("inactiveHandle", &colors[Frame+KWINCOLORS]);
colors[TitleBar+KWINCOLORS] = Qt::darkGray;
colors[TitleBar+KWINCOLORS] = config->
readColorEntry("inactiveBackground", &colors[TitleBar+KWINCOLORS]);
colors[TitleBlend+KWINCOLORS] =
config->readColorEntry("inactiveBlend", &colors[TitleBar+KWINCOLORS]);
colors[ButtonBg+KWINCOLORS] =
config->readColorEntry("inactiveButtonBackground",
&colors[Frame+KWINCOLORS]);
colors[ButtonBlend+KWINCOLORS] =
config->readColorEntry("inactiveButtonBlend",
&colors[ButtonBg+KWINCOLORS]);
colors[Font+KWINCOLORS] = Qt::lightGray;
colors[Font+KWINCOLORS] = config->readColorEntry("inactiveForeground",
&colors[Font+KWINCOLORS]);
colors[ButtonFg+KWINCOLORS] = config->
readColorEntry("inactiveButtonForeground", &colors[ButtonFg]);
activeFont = QFont("Helvetica", 12, QFont::Bold);
activeFont = config->readFontEntry("activeFont", &activeFont);
inactiveFont = config->readFontEntry("inactiveFont", &activeFont);
}

View file

@ -1,6 +1,8 @@
#ifndef OPTIONS_H
#define OPTIONS_H
#include <qfont.h>
#include <qcolor.h>
class Options {
public:
@ -34,14 +36,37 @@ public:
enum MoveResizeMode { Transparent, Opaque, HalfTransparent };
/**
* Basic color types that should be recognized by all decoration styles.
* Not all styles have to implement all the colors, but for the ones that
* are implemented you should retrieve them here.
*/
// increment KWINCOLORS in options.cpp if you add something (mosfet)
enum ColorType{TitleBar=0, TitleBlend, Font, ButtonFg, ButtonBg,
ButtonBlend, Frame, Handle};
MoveResizeMode resizeMode;
MoveResizeMode moveMode;
bool focusPolicyIsReasonable() {
return focusPolicy == ClickToFocus || focusPolicy == FocusFollowsMouse;
return focusPolicy == ClickToFocus || focusPolicy == FocusFollowsMouse;
}
/**
* Return the color for the given decoration.
*/
const QColor& color(ColorType type, bool active=true);
/**
* Return the active or inactive decoration font.
*/
const QFont& font(bool active=true);
// When restarting is implemented this should get called (mosfet).
void reload();
Options();
protected:
QFont activeFont, inactiveFont;
QColor colors[16];
};
extern Options* options;

View file

@ -7,6 +7,7 @@
#include <qlabel.h>
#include <qdrawutil.h>
#include "workspace.h"
#include "options.h"
static const char * close_xpm[] = {
@ -190,9 +191,6 @@ StdClient::StdClient( Workspace *ws, WId w, QWidget *parent, const char *name )
{
create_pixmaps();
QFont f = font();
f.setBold( TRUE );
setFont( f );
QGridLayout* g = new QGridLayout( this, 0, 0, 2 );
g->setRowStretch( 1, 10 );
@ -242,6 +240,10 @@ StdClient::StdClient( Workspace *ws, WId w, QWidget *parent, const char *name )
button[5]->setIconSet( *close_pix );
connect( button[5], SIGNAL( clicked() ), this, ( SLOT( closeWindow() ) ) );
aFrameGrp = makeColorGroup(options->color(Options::Frame, true));
iFrameGrp = makeColorGroup(options->color(Options::Frame, false));
aTitleGrp = makeColorGroup(options->color(Options::TitleBar, true));
iTitleGrp = makeColorGroup(options->color(Options::TitleBar, false));
}
@ -297,17 +299,18 @@ void StdClient::paintEvent( QPaintEvent* )
QRegion r = rect();
r = r.subtract( t );
p.setClipRegion( r );
qDrawWinPanel( &p, rect(), colorGroup() );
qDrawWinPanel( &p, rect(), isActive()? aFrameGrp : iFrameGrp );
p.setClipping( FALSE );
p.fillRect( t, isActive()?darkBlue:gray );
p.fillRect( t, options->color(Options::TitleBar, isActive()));
qDrawShadePanel( &p, t.x(), t.y(), t.width(), t.height(),
colorGroup(), TRUE );
isActive() ? aTitleGrp : iTitleGrp, TRUE );
t.setTop( 2 );
t.setLeft( t.left() + 4 );
t.setRight( t.right() - 2 );
p.setPen( colorGroup().light() );
p.setPen(options->color(Options::Font, isActive()));
p.setFont(options->font(isActive()));
p.drawText( t, AlignLeft|AlignVCenter, caption() );
}
@ -332,3 +335,10 @@ void StdClient::iconChange()
button[0]->setIconSet( miniIcon() );
button[0]->repaint( FALSE );
}
QColorGroup StdClient::makeColorGroup(const QColor &bg, const QColor &fg)
{
return(QColorGroup( fg, bg, bg.light(150), bg.dark(),
bg.dark(120), fg,
QApplication::palette().normal().base()));
}

View file

@ -4,6 +4,7 @@
class QToolButton;
class QLabel;
class QSpacerItem;
class QColorGroup;
class StdClient : public Client
{
@ -11,14 +12,13 @@ class StdClient : public Client
public:
StdClient( Workspace *ws, WId w, QWidget *parent=0, const char *name=0 );
~StdClient();
protected:
void resizeEvent( QResizeEvent* );
void paintEvent( QPaintEvent* );
void mouseDoubleClickEvent( QMouseEvent * );
void init();
QColorGroup makeColorGroup(const QColor &bg, const QColor &fg=Qt::white);
void captionChange( const QString& name );
void iconChange();
void maximizeChange( bool );
@ -27,6 +27,7 @@ protected:
private:
QToolButton* button[6];
QSpacerItem* titlebar;
QColorGroup aFrameGrp, iFrameGrp, aTitleGrp, iTitleGrp;
};