From 37b09be6f33735d316f5929277d2ed2abaa961c9 Mon Sep 17 00:00:00 2001 From: "Daniel M. Duley" Date: Mon, 11 Oct 1999 02:00:06 +0000 Subject: [PATCH] A few fixes, moved colorgroups to the Options class (much nicer there), and started on a fixed system style. If you try it out make sure to read the new README, as it requires some gradient settings. svn path=/trunk/kdebase/kwin/; revision=30585 --- Makefile.am | 4 ++-- beclient.cpp | 39 +++++-------------------------- beclient.h | 3 --- main.cpp | 1 + options.cpp | 63 ++++++++++++++++++++++++++++++++++++++------------- options.h | 15 +++++++++--- stdclient.cpp | 33 ++------------------------- stdclient.h | 2 -- workspace.cpp | 10 +++++++- 9 files changed, 79 insertions(+), 91 deletions(-) diff --git a/Makefile.am b/Makefile.am index a475f6e8e0..5bfdaae021 100644 --- a/Makefile.am +++ b/Makefile.am @@ -4,8 +4,8 @@ LDFLAGS = $(all_libraries) $(KDE_RPATH) bin_PROGRAMS = kwin -kwin_SOURCES = atoms.cpp beclient.cpp client.cpp main.cpp stdclient.cpp workspace.cpp tabbox.cpp options.cpp +kwin_SOURCES = atoms.cpp beclient.cpp client.cpp main.cpp stdclient.cpp workspace.cpp tabbox.cpp options.cpp systemclient.cpp -kwin_LDADD = $(LIB_KDECORE) +kwin_LDADD = $(LIB_KDECORE) $(LIB_KDEUI) METASOURCES = AUTO diff --git a/beclient.cpp b/beclient.cpp index 896ee353eb..88339c2eb2 100644 --- a/beclient.cpp +++ b/beclient.cpp @@ -38,12 +38,6 @@ static const char * size_xpm[] = { static QPixmap* size_pix = 0; static bool pixmaps_created = FALSE; -static QColorGroup *aFrameGrp = 0; -static QColorGroup *iFrameGrp = 0; -static QColorGroup *aTitleGrp = 0; -static QColorGroup *iTitleGrp = 0; -static bool colors_created = FALSE; - static void create_pixmaps() { if ( pixmaps_created ) @@ -52,26 +46,10 @@ static void create_pixmaps() size_pix = new QPixmap( size_xpm ); } -static void create_colorgroups() -{ - if(colors_created) - return; - colors_created = true; - aFrameGrp = BeClient::makeColorGroup(options-> - color(Options::Frame, true)); - iFrameGrp = BeClient::makeColorGroup(options-> - color(Options::Frame, false)); - aTitleGrp = BeClient::makeColorGroup(options-> - color(Options::TitleBar, true)); - iTitleGrp = BeClient::makeColorGroup(options-> - color(Options::TitleBar, false)); -} - BeClient::BeClient( Workspace *ws, WId w, QWidget *parent, const char *name ) : Client( ws, w, parent, name, WResizeNoErase ) { create_pixmaps(); - create_colorgroups(); QGridLayout* g = new QGridLayout( this, 0, 0, 2 ); g->addRowSpacing(1, 2); g->setRowStretch( 2, 10 ); @@ -129,17 +107,18 @@ void BeClient::paintEvent( QPaintEvent* ) 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 ); + options->colorGroup(Options::Frame, false)); qDrawWinPanel( &p, 2, bar.bottom()+4, width()-4, height() - bar.bottom()-6, - isActive() ? *aFrameGrp : *iFrameGrp, TRUE ); + options->colorGroup(Options::Frame, true)); + QRect t = titlebar->geometry(); bar.setBottom( bar.bottom() + 3 ); p.setClipRect( bar ); bar.setBottom( bar.bottom() + 2 ); - qDrawWinPanel( &p, bar, isActive() ? *aTitleGrp : *iTitleGrp, FALSE, - isActive() ? &aTitleGrp->brush(QColorGroup::Background) : - &iTitleGrp->brush(QColorGroup::Background)); + qDrawWinPanel( &p, bar, options->colorGroup(Options::TitleBar, isActive()), + FALSE, &options->colorGroup(Options::TitleBar, isActive()). + brush(QColorGroup::Background)); p.setClipping( FALSE ); p.drawPixmap( t.right() - 20, t.center().y()-8, *size_pix ); @@ -229,9 +208,3 @@ void BeClient::mouseDoubleClickEvent( QMouseEvent * e ) workspace()->requestFocus( this ); } -QColorGroup* BeClient::makeColorGroup(const QColor &bg, const QColor &fg) -{ - return(new QColorGroup( fg, bg, bg.light(150), bg.dark(), - bg.dark(120), fg, - QApplication::palette().normal().base())); -} diff --git a/beclient.h b/beclient.h index 3c0d4b2e34..daf78129b7 100644 --- a/beclient.h +++ b/beclient.h @@ -12,9 +12,6 @@ class BeClient : public Client public: BeClient( Workspace *ws, WId w, QWidget *parent=0, const char *name=0 ); ~BeClient(); - static QColorGroup* makeColorGroup(const QColor &bg, - const QColor &fg=Qt::white); - protected: void resizeEvent( QResizeEvent* ); void paintEvent( QPaintEvent* ); diff --git a/main.cpp b/main.cpp index f2fb0e4e10..bf094d11d9 100644 --- a/main.cpp +++ b/main.cpp @@ -80,6 +80,7 @@ Application::~Application() for ( WorkspaceList::Iterator it = workspaces.begin(); it != workspaces.end(); ++it) { delete (*it); } + delete options; } bool Application::x11EventFilter( XEvent *e ) diff --git a/options.cpp b/options.cpp index c1c5c10f97..6bf455690e 100644 --- a/options.cpp +++ b/options.cpp @@ -4,12 +4,24 @@ #include #include -// increment this when you add a color type (mosfet) -#define KWINCOLORS 8 -Options::Options(){ +Options::Options() +{ + int i; + for(i=0; i < KWINCOLORS*2; ++i) + cg[i] = NULL; reload(); } +Options::~Options(){ + int i; + for(i=0; i < KWINCOLORS*2; ++i){ + if(cg[i]){ + delete cg[i]; + cg[i] = NULL; + } + } +} + const QColor& Options::color(ColorType type, bool active) { return(colors[type + (active ? 0 : KWINCOLORS)]); @@ -20,6 +32,17 @@ const QFont& Options::font(bool active) return(active ? activeFont : inactiveFont); } +const QColorGroup& Options::colorGroup(ColorType type, bool active) +{ + int idx = type + (active ? 0 : KWINCOLORS); + if(cg[idx]) + return(*cg[idx]); + cg[idx] = new QColorGroup(Qt::black, colors[idx], colors[idx].light(150), + colors[idx].dark(), colors[idx].dark(120), + Qt::black, QApplication::palette().normal(). + base()); + return(*cg[idx]); +} void Options::reload() { @@ -35,9 +58,9 @@ void Options::reload() colors[Frame] = Qt::lightGray; colors[Frame] = config->readColorEntry("frame", &colors[Frame]); colors[Handle] = config->readColorEntry("handle", &colors[Frame]); - colors[ButtonBg] = config->readColorEntry("buttonBackground", + colors[ButtonBg] = config->readColorEntry("buttonBackgroundDown", &colors[Frame]); - colors[ButtonBlend] = config->readColorEntry("buttonBlend", + colors[ButtonBlend] = config->readColorEntry("buttonBlendDown", &colors[ButtonBg]); colors[TitleBar] = Qt::darkBlue; colors[TitleBar] = config->readColorEntry("activeBackground", @@ -48,34 +71,42 @@ void Options::reload() colors[Font] = Qt::white; colors[Font] = config->readColorEntry("activeForeground", &colors[Font]); colors[ButtonFg] = Qt::lightGray; - colors[ButtonFg] = config->readColorEntry("buttonForeground", + colors[ButtonFg] = config->readColorEntry("buttonForegroundDown", &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]); + config->readColorEntry("inactiveFrame", &colors[Frame]); 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]); + config->readColorEntry("buttonBackground", + &colors[ButtonBg]); colors[ButtonBlend+KWINCOLORS] = - config->readColorEntry("inactiveButtonBlend", - &colors[ButtonBg+KWINCOLORS]); + config->readColorEntry("buttonBlend", + &colors[ButtonBlend]); + colors[ButtonFg+KWINCOLORS] = config-> + readColorEntry("buttonForeground", &colors[ButtonFg]); + + colors[Handle+KWINCOLORS] = + config->readColorEntry("inactiveHandle", &colors[Handle]); 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); + + int i; + for(i=0; i < KWINCOLORS*2; ++i){ + if(cg[i]){ + delete cg[i]; + cg[i] = NULL; + } + } } diff --git a/options.h b/options.h index dd6b2095a8..9762728cf8 100644 --- a/options.h +++ b/options.h @@ -2,7 +2,10 @@ #define OPTIONS_H #include -#include +#include + +// increment this when you add a color type (mosfet) +#define KWINCOLORS 8 class Options { public: @@ -41,7 +44,7 @@ public: * 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) + // increment KWINCOLORS if you add something (mosfet) enum ColorType{TitleBar=0, TitleBlend, Font, ButtonFg, ButtonBg, ButtonBlend, Frame, Handle}; @@ -56,6 +59,10 @@ public: * Return the color for the given decoration. */ const QColor& color(ColorType type, bool active=true); + /** + * Return a colorgroup using the given decoration color as the background + */ + const QColorGroup& colorGroup(ColorType type, bool active=true); /** * Return the active or inactive decoration font. */ @@ -64,9 +71,11 @@ public: void reload(); Options(); + ~Options(); protected: QFont activeFont, inactiveFont; - QColor colors[16]; + QColor colors[KWINCOLORS*2]; + QColorGroup *cg[KWINCOLORS*2]; }; extern Options* options; diff --git a/stdclient.cpp b/stdclient.cpp index 37410fcc84..77e96a88d5 100644 --- a/stdclient.cpp +++ b/stdclient.cpp @@ -172,27 +172,6 @@ static QPixmap* pinup_pix = 0; static QPixmap* pindown_pix = 0; static bool pixmaps_created = FALSE; -static QColorGroup *aFrameGrp = 0; -static QColorGroup *iFrameGrp = 0; -static QColorGroup *aTitleGrp = 0; -static QColorGroup *iTitleGrp = 0; -static bool colors_created = FALSE; - -static void create_colorgroups() -{ - if(colors_created) - return; - colors_created = true; - aFrameGrp = StdClient::makeColorGroup(options-> - color(Options::Frame, true)); - iFrameGrp = StdClient::makeColorGroup(options-> - color(Options::Frame, false)); - aTitleGrp = StdClient::makeColorGroup(options-> - color(Options::TitleBar, true)); - iTitleGrp = StdClient::makeColorGroup(options-> - color(Options::TitleBar, false)); -} - static void create_pixmaps() { if ( pixmaps_created ) @@ -212,8 +191,6 @@ StdClient::StdClient( Workspace *ws, WId w, QWidget *parent, const char *name ) : Client( ws, w, parent, name, WResizeNoErase ) { create_pixmaps(); - create_colorgroups(); - QGridLayout* g = new QGridLayout( this, 0, 0, 2 ); g->setRowStretch( 1, 10 ); @@ -318,11 +295,11 @@ void StdClient::paintEvent( QPaintEvent* ) QRegion r = rect(); r = r.subtract( t ); p.setClipRegion( r ); - qDrawWinPanel( &p, rect(), isActive()? *aFrameGrp : *iFrameGrp ); + qDrawWinPanel( &p, rect(), options->colorGroup(Options::Frame, isActive())); p.setClipping( FALSE ); p.fillRect( t, options->color(Options::TitleBar, isActive())); qDrawShadePanel( &p, t.x(), t.y(), t.width(), t.height(), - isActive() ? *aTitleGrp : *iTitleGrp, TRUE ); + options->colorGroup(Options::TitleBar, isActive()), true); t.setTop( 2 ); t.setLeft( t.left() + 4 ); @@ -355,9 +332,3 @@ void StdClient::iconChange() button[0]->repaint( FALSE ); } -QColorGroup* StdClient::makeColorGroup(const QColor &bg, const QColor &fg) -{ - return(new QColorGroup( fg, bg, bg.light(150), bg.dark(), - bg.dark(120), fg, - QApplication::palette().normal().base())); -} diff --git a/stdclient.h b/stdclient.h index 8708a07309..cabb421f02 100644 --- a/stdclient.h +++ b/stdclient.h @@ -11,8 +11,6 @@ class StdClient : public Client public: StdClient( Workspace *ws, WId w, QWidget *parent=0, const char *name=0 ); ~StdClient(); - static QColorGroup* makeColorGroup(const QColor &bg, - const QColor &fg=Qt::white); protected: void resizeEvent( QResizeEvent* ); void paintEvent( QPaintEvent* ); diff --git a/workspace.cpp b/workspace.cpp index 60220ac702..8c874b8837 100644 --- a/workspace.cpp +++ b/workspace.cpp @@ -2,6 +2,7 @@ #include "client.h" #include "stdclient.h" #include "beclient.h" +#include "systemclient.h" #include "tabbox.h" #include "atoms.h" #include @@ -657,6 +658,7 @@ void Workspace::showPopup( const QPoint& pos, Client* c) QPopupMenu* deco = new QPopupMenu( popup ); deco->insertItem("KDE Classic", 100 ); deco->insertItem("Be-like style", 101 ); + deco->insertItem("System style", 102 ); popup->insertItem("Decoration", deco ); } @@ -671,6 +673,9 @@ void Workspace::showPopup( const QPoint& pos, Client* c) case 101: setDecoration( 1 ); break; + case 102: + setDecoration( 2 ); + break; default: break; } @@ -855,7 +860,10 @@ void Workspace::setDecoration( int deco ) switch ( deco ) { case 1: c = new BeClient( this, w); - break; + break; + case 2: + c = new SystemClient(this, w); + break; default: c = new StdClient( this, w ); }