Removing the styles I wrote except the default one, and will be maintaining
them outside of CVS. svn path=/trunk/kdebase/kwin/; revision=102431icc-effect-5.14.5
parent
bbee1d9340
commit
29af54215b
|
@ -1 +1 @@
|
||||||
SUBDIRS = default kde1 kstep system b2 laptop riscos modernsystem win2k kwmtheme quartz icewm web mwm
|
SUBDIRS = default kde1 riscos win2k quartz icewm web mwm
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
|
|
||||||
INCLUDES = $(all_includes)
|
|
||||||
|
|
||||||
kde_module_LTLIBRARIES = libkwinb2.la
|
|
||||||
|
|
||||||
libkwinb2_la_SOURCES = b2client.cpp
|
|
||||||
libkwinb2_la_LIBADD = ../../kwin.la
|
|
||||||
libkwinb2_la_LDFLAGS = $(all_libraries) $(KDE_PLUGIN)
|
|
||||||
|
|
||||||
METASOURCES = AUTO
|
|
||||||
noinst_HEADERS = b2client.h
|
|
||||||
|
|
||||||
lnkdir = $(kde_datadir)/kwin/
|
|
||||||
lnk_DATA = b2.desktop
|
|
||||||
|
|
||||||
EXTRA_DIST = $(lnk_DATA)
|
|
||||||
|
|
||||||
|
|
||||||
###KMAKE-start (don't edit or delete this block)
|
|
||||||
|
|
||||||
###KMAKE-end
|
|
|
@ -1,3 +0,0 @@
|
||||||
[Desktop Entry]
|
|
||||||
Name=B II
|
|
||||||
X-KDE-Library=libkwinb2
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,120 +0,0 @@
|
||||||
#ifndef __B2CLIENT_H
|
|
||||||
#define __B2CLIENT_H
|
|
||||||
|
|
||||||
#include <qtoolbutton.h>
|
|
||||||
#include <qbitmap.h>
|
|
||||||
#include <kpixmap.h>
|
|
||||||
#include "../../client.h"
|
|
||||||
class QLabel;
|
|
||||||
//class QSpacerItem;
|
|
||||||
//class QHBoxLayout;
|
|
||||||
class QGridLayout;
|
|
||||||
|
|
||||||
namespace KWinInternal {
|
|
||||||
|
|
||||||
class B2Button : public QButton
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
B2Button(Client *_client=0, QWidget *parent=0, const char *name=0)
|
|
||||||
: QButton(parent, name){useMiniIcon = false; client = _client;}
|
|
||||||
B2Button(KPixmap *pix, KPixmap *pixDown, KPixmap *iPix, KPixmap *iPixDown,
|
|
||||||
Client *_client=0, QWidget *parent=0, const char *name=0);
|
|
||||||
void setBg(const QColor &c){bg = c;}
|
|
||||||
void setPixmaps(KPixmap *pix, KPixmap *pixDown, KPixmap *iPix,
|
|
||||||
KPixmap *iPixDown);
|
|
||||||
void setToggle(){setToggleType(Toggle);}
|
|
||||||
void setActive(bool on){setOn(on);}
|
|
||||||
void setUseMiniIcon(){useMiniIcon = true;}
|
|
||||||
QSize sizeHint() const;
|
|
||||||
QSizePolicy sizePolicy() const;
|
|
||||||
protected:
|
|
||||||
virtual void drawButton(QPainter *p);
|
|
||||||
void drawButtonLabel(QPainter *){;}
|
|
||||||
|
|
||||||
bool useMiniIcon;
|
|
||||||
KPixmap *pNorm, *pDown, *iNorm, *iDown;
|
|
||||||
QColor bg; //only use one color (the rest is pixmap) so forget QPalette ;)
|
|
||||||
Client *client;
|
|
||||||
|
|
||||||
void mousePressEvent( QMouseEvent* e );
|
|
||||||
void mouseReleaseEvent( QMouseEvent* e );
|
|
||||||
|
|
||||||
public:
|
|
||||||
int last_button;
|
|
||||||
};
|
|
||||||
|
|
||||||
class B2Client;
|
|
||||||
|
|
||||||
class B2Titlebar : public QWidget
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
B2Titlebar(B2Client *parent);
|
|
||||||
~B2Titlebar(){;}
|
|
||||||
bool isFullyObscured() const {return isfullyobscured;}
|
|
||||||
void recalcBuffer();
|
|
||||||
protected:
|
|
||||||
void paintEvent( QPaintEvent* );
|
|
||||||
bool x11Event(XEvent *e);
|
|
||||||
void mouseDoubleClickEvent( QMouseEvent * );
|
|
||||||
void mousePressEvent( QMouseEvent * );
|
|
||||||
void mouseReleaseEvent( QMouseEvent * );
|
|
||||||
void mouseMoveEvent(QMouseEvent *);
|
|
||||||
void init();
|
|
||||||
void resizeEvent(QResizeEvent *ev);
|
|
||||||
|
|
||||||
QString oldTitle;
|
|
||||||
KPixmap titleBuffer;
|
|
||||||
bool set_x11mask;
|
|
||||||
bool isfullyobscured;
|
|
||||||
bool shift_move;
|
|
||||||
QPoint moveOffset;
|
|
||||||
B2Client *client;
|
|
||||||
};
|
|
||||||
|
|
||||||
class B2Client : public KWinInternal::Client
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
friend class B2Titlebar;
|
|
||||||
public:
|
|
||||||
B2Client( Workspace *ws, WId w, QWidget *parent=0, const char *name=0 );
|
|
||||||
~B2Client(){;}
|
|
||||||
void unobscureTitlebar();
|
|
||||||
void titleMoveAbs(int new_ofs);
|
|
||||||
void titleMoveRel(int xdiff);
|
|
||||||
protected:
|
|
||||||
void resizeEvent( QResizeEvent* );
|
|
||||||
void paintEvent( QPaintEvent* );
|
|
||||||
void showEvent( QShowEvent* );
|
|
||||||
void windowWrapperShowEvent( QShowEvent* );
|
|
||||||
void init();
|
|
||||||
void captionChange( const QString& name );
|
|
||||||
void stickyChange(bool on);
|
|
||||||
void activeChange(bool on);
|
|
||||||
void maximizeChange(bool m);
|
|
||||||
void iconChange();
|
|
||||||
void doShape();
|
|
||||||
MousePosition mousePosition( const QPoint& p ) const;
|
|
||||||
private slots:
|
|
||||||
void menuButtonPressed();
|
|
||||||
void slotReset();
|
|
||||||
void maxButtonClicked();
|
|
||||||
private:
|
|
||||||
void positionButtons();
|
|
||||||
enum ButtonType{BtnMenu=0, BtnSticky, BtnIconify, BtnMax, BtnClose,
|
|
||||||
BtnHelp};
|
|
||||||
//B2Button* button[5];
|
|
||||||
B2Button* button[6];
|
|
||||||
//QSpacerItem* titlebar;
|
|
||||||
//QHBoxLayout *tLayout;
|
|
||||||
QGridLayout *g;
|
|
||||||
int bar_x_ofs;
|
|
||||||
B2Titlebar *titlebar;
|
|
||||||
int in_unobs;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,98 +0,0 @@
|
||||||
#ifndef __STDCLIENT_BITMAPS_H
|
|
||||||
#define __STDCLIENT_BITMAPS_H
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The standard client has the capability to color it's titlebar buttons
|
|
||||||
* according to the new color scheme. In order to do this it needs a bitmap
|
|
||||||
* for each shade which it draws into a pixmap with the appropriate color.
|
|
||||||
* These are all the bitmaps.
|
|
||||||
*/
|
|
||||||
|
|
||||||
static unsigned char close_white_bits[] = {
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x04, 0x10, 0x04, 0x08, 0x08, 0x04, 0x10, 0x02,
|
|
||||||
0x20, 0x01, 0x40, 0x00, 0x40, 0x00, 0x20, 0x01, 0x10, 0x02, 0x08, 0x04,
|
|
||||||
0x04, 0x08, 0x04, 0x10, 0x00, 0x00, 0x00, 0x00};
|
|
||||||
|
|
||||||
static unsigned char close_dgray_bits[] = {
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x18, 0x30, 0x30, 0x18, 0x60, 0x0c,
|
|
||||||
0xc0, 0x06, 0x80, 0x03, 0x80, 0x03, 0xc0, 0x06, 0x60, 0x0c, 0x30, 0x18,
|
|
||||||
0x18, 0x30, 0x08, 0x20, 0x00, 0x00, 0x00, 0x00};
|
|
||||||
|
|
||||||
static unsigned char menu_white_bits[] = {
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xfc, 0x3f, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
|
||||||
|
|
||||||
static unsigned char menu_dgray_bits[] = {
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x20, 0xf8, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
|
||||||
|
|
||||||
static unsigned char menu_mask_bits[] = {
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xfc, 0x3f, 0x04, 0x20, 0xfc, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
|
||||||
|
|
||||||
static unsigned char pindown_white_bits[] = {
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x1f, 0xa0, 0x03,
|
|
||||||
0xb0, 0x01, 0x30, 0x01, 0xf0, 0x00, 0x70, 0x00, 0x20, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
|
||||||
|
|
||||||
static unsigned char pindown_gray_bits[] = {
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c,
|
|
||||||
0x00, 0x0e, 0x00, 0x06, 0x00, 0x00, 0x80, 0x07, 0xc0, 0x03, 0xe0, 0x01,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
|
||||||
|
|
||||||
static unsigned char pindown_dgray_bits[] = {
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x10, 0x70, 0x20, 0x50, 0x20,
|
|
||||||
0x48, 0x30, 0xc8, 0x38, 0x08, 0x1f, 0x08, 0x18, 0x10, 0x1c, 0x10, 0x0e,
|
|
||||||
0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
|
||||||
|
|
||||||
static unsigned char pindown_mask_bits[] = {
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x1f, 0xf0, 0x3f, 0xf0, 0x3f,
|
|
||||||
0xf8, 0x3f, 0xf8, 0x3f, 0xf8, 0x1f, 0xf8, 0x1f, 0xf0, 0x1f, 0xf0, 0x0f,
|
|
||||||
0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
|
||||||
|
|
||||||
static unsigned char pinup_white_bits[] = {
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x11,
|
|
||||||
0x3f, 0x15, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
|
||||||
|
|
||||||
static unsigned char pinup_gray_bits[] = {
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x80, 0x0a, 0xbf, 0x0a, 0x80, 0x15, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
|
||||||
|
|
||||||
static unsigned char pinup_dgray_bits[] = {
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x20, 0x40, 0x31, 0x40, 0x2e,
|
|
||||||
0x40, 0x20, 0x40, 0x20, 0x7f, 0x2a, 0x40, 0x3f, 0xc0, 0x31, 0xc0, 0x20,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
|
||||||
|
|
||||||
static unsigned char pinup_mask_bits[] = {
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x20, 0xc0, 0x31, 0xc0, 0x3f,
|
|
||||||
0xff, 0x3f, 0xff, 0x3f, 0xff, 0x3f, 0xc0, 0x3f, 0xc0, 0x31, 0xc0, 0x20,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
|
||||||
|
|
||||||
static unsigned char help_mask_bits[] = {
|
|
||||||
0x00,0x00,0x00,0x00,0xe0,0x03,0xf0,0x07,0x70,0x0e,0x60,0x0e,0x00,0x0f,0x80,
|
|
||||||
0x07,0xc0,0x03,0xc0,0x01,0x80,0x01,0xc0,0x00,0xc0,0x01,0x80,0x01,0x00,0x00,
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x4c,0x0b,0x08,0x58,0x65,0x09,0x08,0x90,0x00,0x00,
|
|
||||||
0x00,0x09,0x04,0x00,0x00,0x72,0x6f,0x6f,0x74,0x00,0x24,0x31,0x24,0x47,0x6b,
|
|
||||||
0x65,0x44,0x78,0x63 };
|
|
||||||
|
|
||||||
static unsigned char help_dark_bits[] = {
|
|
||||||
0x00,0x00,0x00,0x00,0xe0,0x03,0x30,0x06,0x30,0x06,0x00,0x06,0x00,0x03,0x80,
|
|
||||||
0x01,0xc0,0x00,0xc0,0x00,0x00,0x00,0xc0,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,
|
|
||||||
0x00,0x00,0x00,0x00,0x65,0x64,0x28,0x29,0x00,0x00,0x00,0x00,0x90,0x00,0x00,
|
|
||||||
0x00,0x21,0x00,0x00,0x00,0x34,0xfe,0x12,0x2b,0x00,0x00,0xff,0xff,0x58,0xc0,
|
|
||||||
0x01,0x2b,0x45,0xfe };
|
|
||||||
|
|
||||||
static unsigned char help_light_bits[] = {
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x01,0x40,0x08,0x60,0x08,0x00,0x0c,0x00,
|
|
||||||
0x06,0x00,0x03,0x00,0x01,0x80,0x01,0x00,0x00,0x00,0x01,0x80,0x01,0x00,0x00,
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x4c,0x0b,0x08,0x58,0x65,0x09,0x08,0x90,0x00,0x00,
|
|
||||||
0x00,0x09,0x04,0x00,0x00,0x72,0x6f,0x6f,0x74,0x00,0x24,0x31,0x24,0x47,0x6b,
|
|
||||||
0x65,0x44,0x78,0x63 };
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
|
|
||||||
INCLUDES = $(all_includes)
|
|
||||||
|
|
||||||
kde_module_LTLIBRARIES = libkwinkstep.la
|
|
||||||
|
|
||||||
libkwinkstep_la_SOURCES = nextclient.cpp
|
|
||||||
libkwinkstep_la_LIBADD = ../../kwin.la
|
|
||||||
libkwinkstep_la_LDFLAGS = $(all_libraries) $(KDE_PLUGIN)
|
|
||||||
|
|
||||||
METASOURCES = AUTO
|
|
||||||
noinst_HEADERS = nextclient.h
|
|
||||||
|
|
||||||
lnkdir = $(kde_datadir)/kwin/
|
|
||||||
lnk_DATA = kstep.desktop
|
|
||||||
|
|
||||||
EXTRA_DIST = $(lnk_DATA)
|
|
||||||
|
|
||||||
|
|
||||||
###KMAKE-start (don't edit or delete this block)
|
|
||||||
|
|
||||||
###KMAKE-end
|
|
|
@ -1,9 +0,0 @@
|
||||||
[Desktop Entry]
|
|
||||||
Name=KStep
|
|
||||||
Name[da]=KDE Trin
|
|
||||||
Name[eo]=Paŝo
|
|
||||||
Name[mi]=KHïkoi
|
|
||||||
Name[no]=KSteg
|
|
||||||
Name[pt]=Step
|
|
||||||
Name[sk]=Kkrok
|
|
||||||
X-KDE-Library=libkwinkstep
|
|
|
@ -1,391 +0,0 @@
|
||||||
#include "nextclient.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"
|
|
||||||
|
|
||||||
using namespace KWinInternal;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static unsigned char close_bits[] = {
|
|
||||||
0x03, 0x03, 0x87, 0x03, 0xce, 0x01, 0xfc, 0x00, 0x78, 0x00, 0x78, 0x00,
|
|
||||||
0xfc, 0x00, 0xce, 0x01, 0x87, 0x03, 0x03, 0x03};
|
|
||||||
|
|
||||||
static unsigned char iconify_bits[] = {
|
|
||||||
0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0x03, 0x03, 0x03, 0x03,
|
|
||||||
0x03, 0x03, 0x03, 0x03, 0xff, 0x03, 0xff, 0x03};
|
|
||||||
|
|
||||||
static unsigned char sticky_bits[] = {
|
|
||||||
0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0xfe, 0x01, 0xfe, 0x01,
|
|
||||||
0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00};
|
|
||||||
|
|
||||||
static unsigned char unsticky_bits[] = {
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x01, 0xfe, 0x01,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
|
||||||
|
|
||||||
static KPixmap *aTitlePix=0;
|
|
||||||
static KPixmap *iTitlePix=0;
|
|
||||||
static KPixmap *aFramePix=0;
|
|
||||||
static KPixmap *iFramePix=0;
|
|
||||||
static KPixmap *aHandlePix=0;
|
|
||||||
static KPixmap *iHandlePix=0;
|
|
||||||
static KPixmap *aBtn=0;
|
|
||||||
static KPixmap *aBtnDown=0;
|
|
||||||
static KPixmap *iBtn=0;
|
|
||||||
static KPixmap *iBtnDown=0;
|
|
||||||
static bool pixmaps_created = false;
|
|
||||||
static QColor *btnForeground;
|
|
||||||
|
|
||||||
static void create_pixmaps()
|
|
||||||
{
|
|
||||||
if(pixmaps_created)
|
|
||||||
return;
|
|
||||||
pixmaps_created = true;
|
|
||||||
|
|
||||||
aTitlePix = new KPixmap();
|
|
||||||
aTitlePix->resize(32, 14);
|
|
||||||
KPixmapEffect::gradient(*aTitlePix,
|
|
||||||
options->color(Options::TitleBar, true),
|
|
||||||
options->color(Options::TitleBlend, true),
|
|
||||||
KPixmapEffect::VerticalGradient);
|
|
||||||
iTitlePix = new KPixmap();
|
|
||||||
iTitlePix->resize(32, 14);
|
|
||||||
KPixmapEffect::gradient(*iTitlePix,
|
|
||||||
options->color(Options::TitleBar, false),
|
|
||||||
options->color(Options::TitleBlend, false),
|
|
||||||
KPixmapEffect::VerticalGradient);
|
|
||||||
// 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);
|
|
||||||
|
|
||||||
iBtn = new KPixmap;
|
|
||||||
iBtn->resize(18, 18);
|
|
||||||
iBtnDown = new KPixmap;
|
|
||||||
iBtnDown->resize(18, 18);
|
|
||||||
aBtn = new KPixmap;
|
|
||||||
aBtn->resize(18, 18);
|
|
||||||
aBtnDown = new KPixmap;
|
|
||||||
aBtnDown->resize(18, 18);
|
|
||||||
KPixmap internal;
|
|
||||||
internal.resize(12, 12);
|
|
||||||
|
|
||||||
// inactive buttons
|
|
||||||
QColor c(options->color(Options::ButtonBg, false));
|
|
||||||
KPixmapEffect::gradient(*iBtn, c.light(120), c.dark(120),
|
|
||||||
KPixmapEffect::DiagonalGradient);
|
|
||||||
KPixmapEffect::gradient(internal, c.dark(120), c.light(120),
|
|
||||||
KPixmapEffect::DiagonalGradient);
|
|
||||||
bitBlt(iBtn, 3, 3, &internal, 0, 0, 12, 12, Qt::CopyROP, true);
|
|
||||||
|
|
||||||
KPixmapEffect::gradient(*iBtnDown, c.dark(120), c.light(120),
|
|
||||||
KPixmapEffect::DiagonalGradient);
|
|
||||||
KPixmapEffect::gradient(internal, c.light(120), c.dark(120),
|
|
||||||
KPixmapEffect::DiagonalGradient);
|
|
||||||
bitBlt(iBtnDown, 3, 3, &internal, 0, 0, 12, 12, Qt::CopyROP, true);
|
|
||||||
|
|
||||||
// active buttons
|
|
||||||
c = options->color(Options::ButtonBg, true);
|
|
||||||
KPixmapEffect::gradient(*aBtn, c.light(120), c.dark(120),
|
|
||||||
KPixmapEffect::DiagonalGradient);
|
|
||||||
KPixmapEffect::gradient(internal, c.dark(120), c.light(120),
|
|
||||||
KPixmapEffect::DiagonalGradient);
|
|
||||||
bitBlt(aBtn, 3, 3, &internal, 0, 0, 12, 12, Qt::CopyROP, true);
|
|
||||||
|
|
||||||
KPixmapEffect::gradient(*aBtnDown, c.dark(120), c.light(120),
|
|
||||||
KPixmapEffect::DiagonalGradient);
|
|
||||||
KPixmapEffect::gradient(internal, c.light(120), c.dark(120),
|
|
||||||
KPixmapEffect::DiagonalGradient);
|
|
||||||
bitBlt(aBtnDown, 3, 3, &internal, 0, 0, 12, 12, Qt::CopyROP, true);
|
|
||||||
|
|
||||||
QPainter p;
|
|
||||||
p.begin(aBtn);
|
|
||||||
p.setPen(Qt::black);
|
|
||||||
p.drawRect(0, 0, 18, 18);
|
|
||||||
p.end();
|
|
||||||
p.begin(iBtn);
|
|
||||||
p.setPen(Qt::black);
|
|
||||||
p.drawRect(0, 0, 18, 18);
|
|
||||||
p.end();
|
|
||||||
p.begin(aBtnDown);
|
|
||||||
p.setPen(Qt::black);
|
|
||||||
p.drawRect(0, 0, 18, 18);
|
|
||||||
p.end();
|
|
||||||
p.begin(iBtnDown);
|
|
||||||
p.setPen(Qt::black);
|
|
||||||
p.drawRect(0, 0, 18, 18);
|
|
||||||
p.end();
|
|
||||||
|
|
||||||
if(qGray(options->color(Options::ButtonBg, true).rgb()) > 128)
|
|
||||||
btnForeground = new QColor(Qt::black);
|
|
||||||
else
|
|
||||||
btnForeground = new QColor(Qt::white);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void delete_pixmaps()
|
|
||||||
{
|
|
||||||
delete aTitlePix;
|
|
||||||
delete iTitlePix;
|
|
||||||
delete aFramePix;
|
|
||||||
delete iFramePix;
|
|
||||||
delete aHandlePix;
|
|
||||||
delete iHandlePix;
|
|
||||||
delete aBtn;
|
|
||||||
delete iBtn;
|
|
||||||
delete aBtnDown;
|
|
||||||
delete iBtnDown;
|
|
||||||
delete btnForeground;
|
|
||||||
|
|
||||||
pixmaps_created = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void NextClient::slotReset()
|
|
||||||
{
|
|
||||||
button[0]->reset();
|
|
||||||
button[1]->reset();
|
|
||||||
button[2]->reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
NextButton::NextButton(Client *parent, const char *name,
|
|
||||||
const unsigned char *bitmap, int bw, int bh)
|
|
||||||
: QButton(parent, name)
|
|
||||||
{
|
|
||||||
setBackgroundMode( NoBackground );
|
|
||||||
client = parent;
|
|
||||||
resize(18, 18);
|
|
||||||
|
|
||||||
if(bitmap)
|
|
||||||
setBitmap(bitmap, bw, bh);
|
|
||||||
}
|
|
||||||
|
|
||||||
void NextButton::reset()
|
|
||||||
{
|
|
||||||
repaint(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void NextButton::setBitmap(const unsigned char *bitmap, int w, int h)
|
|
||||||
{
|
|
||||||
deco = QBitmap(w, h, bitmap, true);
|
|
||||||
deco.setMask(deco);
|
|
||||||
repaint();
|
|
||||||
}
|
|
||||||
|
|
||||||
void NextButton::drawButton(QPainter *p)
|
|
||||||
{
|
|
||||||
if(client->isActive())
|
|
||||||
p->drawPixmap(0, 0, isDown() ? *aBtnDown : *aBtn);
|
|
||||||
else
|
|
||||||
p->drawPixmap(0, 0, isDown() ? *iBtnDown : *iBtn);
|
|
||||||
|
|
||||||
p->setPen(*btnForeground);
|
|
||||||
p->drawPixmap(isDown()? 5 : 4, isDown() ? 5 : 4, deco);
|
|
||||||
}
|
|
||||||
|
|
||||||
NextClient::NextClient( Workspace *ws, WId w, QWidget *parent,
|
|
||||||
const char *name )
|
|
||||||
: Client( ws, w, parent, name, WResizeNoErase )
|
|
||||||
{
|
|
||||||
setBackgroundMode( NoBackground );
|
|
||||||
connect(options, SIGNAL(resetClients()), this, SLOT(slotReset()));
|
|
||||||
|
|
||||||
QVBoxLayout *mainLayout = new QVBoxLayout(this);
|
|
||||||
QHBoxLayout *titleLayout = new QHBoxLayout();
|
|
||||||
QHBoxLayout *windowLayout = new QHBoxLayout();
|
|
||||||
|
|
||||||
mainLayout->addLayout(titleLayout);
|
|
||||||
mainLayout->addLayout(windowLayout, 1);
|
|
||||||
mainLayout->addSpacing(6);
|
|
||||||
|
|
||||||
windowLayout->addSpacing(1);
|
|
||||||
windowLayout->addWidget(windowWrapper(), 1);
|
|
||||||
windowLayout->addSpacing(1);
|
|
||||||
|
|
||||||
|
|
||||||
button[0] = new NextButton(this, "close", close_bits, 10, 10);
|
|
||||||
button[1] = new NextButton(this, "sticky");
|
|
||||||
stickyChange(isSticky());
|
|
||||||
button[2] = new NextButton(this, "iconify", iconify_bits, 10, 10);
|
|
||||||
|
|
||||||
connect( button[0], SIGNAL( clicked() ), this, ( SLOT( closeWindow() ) ) );
|
|
||||||
connect( button[1], SIGNAL( clicked() ), this, ( SLOT( toggleSticky() ) ) );
|
|
||||||
connect( button[2], SIGNAL( clicked() ), this, ( SLOT( iconify() ) ) );
|
|
||||||
titleLayout->addWidget( button[2] );
|
|
||||||
titlebar = new QSpacerItem(10, 16, QSizePolicy::Expanding,
|
|
||||||
QSizePolicy::Minimum );
|
|
||||||
titleLayout->addItem(titlebar);
|
|
||||||
titleLayout->addWidget( button[1] );
|
|
||||||
titleLayout->addWidget( button[0] );
|
|
||||||
for ( int i = 0; i < 3; i++) {
|
|
||||||
button[i]->setMouseTracking( TRUE );
|
|
||||||
button[i]->setFixedSize( 18, 18 );
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void NextClient::resizeEvent( QResizeEvent* e)
|
|
||||||
{
|
|
||||||
Client::resizeEvent( e );
|
|
||||||
|
|
||||||
if ( isVisibleToTLW() && !testWFlags( WNorthWestGravity )) {
|
|
||||||
QPainter p( this );
|
|
||||||
QRect t = titlebar->geometry();
|
|
||||||
t.setTop( 0 );
|
|
||||||
QRegion r = rect();
|
|
||||||
r = r.subtract( t );
|
|
||||||
p.setClipRegion( r );
|
|
||||||
p.eraseRect( rect() );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void NextClient::captionChange( const QString& )
|
|
||||||
{
|
|
||||||
repaint( titlebar->geometry(), false );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void NextClient::paintEvent( QPaintEvent* )
|
|
||||||
{
|
|
||||||
QPainter p( this );
|
|
||||||
p.setPen(Qt::black);
|
|
||||||
p.drawRect(rect());
|
|
||||||
|
|
||||||
QRect t = titlebar->geometry();
|
|
||||||
t.setTop(1);
|
|
||||||
p.drawTiledPixmap(t.x()+1, t.y()+1, t.width()-2, t.height()-2,
|
|
||||||
isActive() ? *aTitlePix : *iTitlePix);
|
|
||||||
qDrawShadePanel(&p, t.x(), t.y(), t.width(), t.height()-1,
|
|
||||||
options->colorGroup(Options::TitleBar, isActive()));
|
|
||||||
p.drawLine(t.x(), t.bottom(), t.right(), t.bottom());
|
|
||||||
QRegion r = rect();
|
|
||||||
r = r.subtract( t );
|
|
||||||
p.setClipRegion( r );
|
|
||||||
p.setClipping( FALSE );
|
|
||||||
|
|
||||||
t.setTop( 2 );
|
|
||||||
t.setHeight(t.height()-4);
|
|
||||||
t.setLeft( t.left() + 4 );
|
|
||||||
t.setRight( t.right() - 2 );
|
|
||||||
|
|
||||||
p.setPen(options->color(Options::Font, isActive()));
|
|
||||||
p.setFont(options->font(isActive()));
|
|
||||||
p.drawText( t, AlignCenter, caption() );
|
|
||||||
|
|
||||||
|
|
||||||
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 NextClient::mouseDoubleClickEvent( QMouseEvent * e )
|
|
||||||
{
|
|
||||||
if (titlebar->geometry().contains( e->pos() ) )
|
|
||||||
workspace()->performWindowOperation( this, options->operationTitlebarDblClick() );
|
|
||||||
workspace()->requestFocus( this );
|
|
||||||
}
|
|
||||||
|
|
||||||
void NextClient::stickyChange(bool on)
|
|
||||||
{
|
|
||||||
if(on)
|
|
||||||
button[1]->setBitmap(unsticky_bits, 10, 10);
|
|
||||||
else
|
|
||||||
button[1]->setBitmap(sticky_bits, 10, 10);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void NextClient::init()
|
|
||||||
{
|
|
||||||
Client::init();
|
|
||||||
}
|
|
||||||
|
|
||||||
void NextClient::activeChange(bool)
|
|
||||||
{
|
|
||||||
repaint(false);
|
|
||||||
button[0]->reset();
|
|
||||||
button[1]->reset();
|
|
||||||
button[2]->reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
Client::MousePosition
|
|
||||||
NextClient::mousePosition( const QPoint& p ) const
|
|
||||||
{
|
|
||||||
MousePosition m = Nowhere;
|
|
||||||
|
|
||||||
if (p.y() < (height() - 6))
|
|
||||||
m = Client::mousePosition(p);
|
|
||||||
|
|
||||||
else {
|
|
||||||
if (p.x() >= (width() - 25))
|
|
||||||
m = BottomRight;
|
|
||||||
else if (p.x() <= 25)
|
|
||||||
m = BottomLeft;
|
|
||||||
else
|
|
||||||
m = Bottom;
|
|
||||||
}
|
|
||||||
|
|
||||||
return m;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C"
|
|
||||||
{
|
|
||||||
Client *allocate(Workspace *ws, WId w, int )
|
|
||||||
{
|
|
||||||
return(new NextClient(ws, w));
|
|
||||||
}
|
|
||||||
void init()
|
|
||||||
{
|
|
||||||
create_pixmaps();
|
|
||||||
}
|
|
||||||
void reset()
|
|
||||||
{
|
|
||||||
delete_pixmaps();
|
|
||||||
create_pixmaps();
|
|
||||||
}
|
|
||||||
void deinit()
|
|
||||||
{
|
|
||||||
delete_pixmaps();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#include "nextclient.moc"
|
|
|
@ -1,56 +0,0 @@
|
||||||
#ifndef __NEXTCLIENT_H
|
|
||||||
#define __NEXTCLIENT_H
|
|
||||||
|
|
||||||
#include <qbutton.h>
|
|
||||||
#include <qbitmap.h>
|
|
||||||
#include <kpixmap.h>
|
|
||||||
#include "../../client.h"
|
|
||||||
class QLabel;
|
|
||||||
class QSpacerItem;
|
|
||||||
|
|
||||||
namespace KWinInternal {
|
|
||||||
|
|
||||||
// get rid of autohide :P
|
|
||||||
class NextButton : public QButton
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
NextButton(Client *parent=0, const char *name=0,
|
|
||||||
const unsigned char *bitmap=NULL, int bw=0, int bh=0);
|
|
||||||
void setBitmap(const unsigned char *bitmap, int bw, int bh);
|
|
||||||
void reset();
|
|
||||||
protected:
|
|
||||||
virtual void drawButton(QPainter *p);
|
|
||||||
void drawButtonLabel(QPainter *){;}
|
|
||||||
KPixmap aBackground, iBackground;
|
|
||||||
QBitmap deco;
|
|
||||||
Client *client;
|
|
||||||
};
|
|
||||||
|
|
||||||
class NextClient : public KWinInternal::Client
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
NextClient( Workspace *ws, WId w, QWidget *parent=0, const char *name=0 );
|
|
||||||
~NextClient(){;}
|
|
||||||
protected:
|
|
||||||
void resizeEvent( QResizeEvent* );
|
|
||||||
void paintEvent( QPaintEvent* );
|
|
||||||
|
|
||||||
void mouseDoubleClickEvent( QMouseEvent * );
|
|
||||||
void init();
|
|
||||||
void captionChange( const QString& name );
|
|
||||||
void stickyChange(bool on);
|
|
||||||
void activeChange(bool);
|
|
||||||
|
|
||||||
MousePosition mousePosition(const QPoint &) const;
|
|
||||||
|
|
||||||
protected slots:
|
|
||||||
void slotReset();
|
|
||||||
private:
|
|
||||||
NextButton* button[3];
|
|
||||||
QSpacerItem* titlebar;
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,11 +0,0 @@
|
||||||
SUBDIRS=cli_installer
|
|
||||||
INCLUDES = $(all_includes)
|
|
||||||
|
|
||||||
kde_module_LTLIBRARIES = libkwinkwmtheme.la
|
|
||||||
|
|
||||||
libkwinkwmtheme_la_SOURCES = kwmthemeclient.cpp
|
|
||||||
libkwinkwmtheme_la_LIBADD = ../../kwin.la
|
|
||||||
libkwinkwmtheme_la_LDFLAGS = $(all_libraries) $(KDE_PLUGIN)
|
|
||||||
|
|
||||||
METASOURCES = AUTO
|
|
||||||
noinst_HEADERS = kwmthemeclient.h
|
|
|
@ -1,18 +0,0 @@
|
||||||
|
|
||||||
# set the include path for X, qt and KDE
|
|
||||||
INCLUDES= $(all_includes)
|
|
||||||
|
|
||||||
####### This part is very kwmtheme specific
|
|
||||||
# you can add here more. This one gets installed
|
|
||||||
bin_PROGRAMS = kwmtheme
|
|
||||||
|
|
||||||
# Which sources should be compiled for kwmtheme.
|
|
||||||
kwmtheme_SOURCES = main.cpp
|
|
||||||
|
|
||||||
# the library search path.
|
|
||||||
kwmtheme_LDFLAGS = $(all_libraries) $(KDE_RPATH)
|
|
||||||
|
|
||||||
# the libraries to link against. Be aware of the order. First the libraries,
|
|
||||||
# that depend on the following ones.
|
|
||||||
kwmtheme_LDADD = $(LIB_KDECORE)
|
|
||||||
|
|
|
@ -1,165 +0,0 @@
|
||||||
#include <qfile.h>
|
|
||||||
#include <qdir.h>
|
|
||||||
#include <kapp.h>
|
|
||||||
#include <ksimpleconfig.h>
|
|
||||||
#include <kglobal.h>
|
|
||||||
#include <kstddirs.h>
|
|
||||||
#include <kcmdlineargs.h>
|
|
||||||
#include <klocale.h>
|
|
||||||
|
|
||||||
static const char *description =
|
|
||||||
I18N_NOOP("Installs a KWM theme");
|
|
||||||
|
|
||||||
static KCmdLineOptions options[] =
|
|
||||||
{
|
|
||||||
{ "+[file]", I18N_NOOP("Path to a theme config file"), 0 },
|
|
||||||
{ 0, 0, 0 }
|
|
||||||
};
|
|
||||||
|
|
||||||
void copy(const QString &src, const QString &dest)
|
|
||||||
{
|
|
||||||
QFile copyInput(src);
|
|
||||||
QFile copyOutput(dest);
|
|
||||||
if(!copyInput.open(IO_ReadOnly)){
|
|
||||||
qWarning("Couldn't open %s", src.latin1());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if(!copyOutput.open(IO_WriteOnly)){
|
|
||||||
qWarning("Couldn't open %s", dest.latin1());
|
|
||||||
copyInput.close();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
while(!copyInput.atEnd()){
|
|
||||||
copyOutput.putch(copyInput.getch());
|
|
||||||
}
|
|
||||||
copyInput.close();
|
|
||||||
copyOutput.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
KCmdLineArgs::init(argc, argv, "kwmtheme", description, "0.1");
|
|
||||||
KCmdLineArgs::addCmdLineOptions( options );
|
|
||||||
KApplication app(argc, argv);
|
|
||||||
KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
|
|
||||||
if(!args->count()){
|
|
||||||
qWarning("You need to specify the path to a theme config file!");
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
QString srcStr = QString(QFile::decodeName(args->arg(0)));
|
|
||||||
QFile f(srcStr);
|
|
||||||
QString tmpStr;
|
|
||||||
|
|
||||||
if(!f.exists()){
|
|
||||||
qWarning("Specified theme config file doesn't exist!");
|
|
||||||
return(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
QStringList appDirs = KGlobal::dirs()->findDirs("data", "kwin");
|
|
||||||
QString localDirStr = *(appDirs.end());
|
|
||||||
if(localDirStr.isEmpty()){
|
|
||||||
localDirStr = KGlobal::dirs()->saveLocation("data", "kwin");
|
|
||||||
}
|
|
||||||
localDirStr += "/pics/";
|
|
||||||
if(!QFile::exists(localDirStr))
|
|
||||||
QDir().mkdir(localDirStr);
|
|
||||||
|
|
||||||
QFileInfo fi(f);
|
|
||||||
KSimpleConfig input(fi.absFilePath());
|
|
||||||
srcStr = fi.dirPath(true) + "/";
|
|
||||||
KConfig *output = KGlobal::config();
|
|
||||||
input.setGroup("Window Border");
|
|
||||||
output->setGroup("General");
|
|
||||||
|
|
||||||
tmpStr = input.readEntry("shapePixmapTop");
|
|
||||||
if(!tmpStr.isEmpty()){
|
|
||||||
copy(srcStr+tmpStr, localDirStr+tmpStr);
|
|
||||||
}
|
|
||||||
output->writeEntry("wm_top", tmpStr, true, true);
|
|
||||||
tmpStr = input.readEntry("shapePixmapBottom");
|
|
||||||
if(!tmpStr.isEmpty())
|
|
||||||
copy(srcStr+tmpStr, localDirStr+tmpStr);
|
|
||||||
output->writeEntry("wm_bottom", tmpStr, true, true);
|
|
||||||
tmpStr = input.readEntry("shapePixmapLeft");
|
|
||||||
if(!tmpStr.isEmpty())
|
|
||||||
copy(srcStr+tmpStr, localDirStr+tmpStr);
|
|
||||||
output->writeEntry("wm_left", tmpStr, true, true);
|
|
||||||
tmpStr = input.readEntry("shapePixmapRight");
|
|
||||||
if(!tmpStr.isEmpty())
|
|
||||||
copy(srcStr+tmpStr, localDirStr+tmpStr);
|
|
||||||
output->writeEntry("wm_right", tmpStr, true, true);
|
|
||||||
tmpStr = input.readEntry("shapePixmapTopLeft");
|
|
||||||
if(!tmpStr.isEmpty())
|
|
||||||
copy(srcStr+tmpStr, localDirStr+tmpStr);
|
|
||||||
output->writeEntry("wm_topleft", tmpStr, true, true);
|
|
||||||
tmpStr = input.readEntry("shapePixmapTopRight");
|
|
||||||
if(!tmpStr.isEmpty())
|
|
||||||
copy(srcStr+tmpStr, localDirStr+tmpStr);
|
|
||||||
output->writeEntry("wm_topright", tmpStr, true, true);
|
|
||||||
tmpStr = input.readEntry("shapePixmapBottomLeft");
|
|
||||||
if(!tmpStr.isEmpty())
|
|
||||||
copy(srcStr+tmpStr, localDirStr+tmpStr);
|
|
||||||
output->writeEntry("wm_bottomleft", tmpStr, true, true);
|
|
||||||
tmpStr = input.readEntry("shapePixmapBottomRight");
|
|
||||||
if(!tmpStr.isEmpty())
|
|
||||||
copy(srcStr+tmpStr, localDirStr+tmpStr);
|
|
||||||
output->writeEntry("wm_bottomright", tmpStr, true, true);
|
|
||||||
|
|
||||||
|
|
||||||
input.setGroup("Window Titlebar");
|
|
||||||
output->writeEntry("TitleAlignment", input.readEntry("TitleAlignment"), true, true);
|
|
||||||
output->writeEntry("PixmapUnderTitleText", input.readEntry("PixmapUnderTitleText"), true, true);
|
|
||||||
output->writeEntry("TitleFrameShaded", input.readEntry("TitleFrameShaded"), true, true);
|
|
||||||
|
|
||||||
tmpStr = input.readEntry("MenuButton");
|
|
||||||
if(!tmpStr.isEmpty())
|
|
||||||
copy(srcStr+tmpStr, localDirStr+tmpStr);
|
|
||||||
output->writeEntry("menu", tmpStr, true, true);
|
|
||||||
tmpStr = input.readEntry("PinUpButton");
|
|
||||||
if(!tmpStr.isEmpty())
|
|
||||||
copy(srcStr+tmpStr, localDirStr+tmpStr);
|
|
||||||
output->writeEntry("pinup", tmpStr, true, true);
|
|
||||||
tmpStr = input.readEntry("PinDownButton");
|
|
||||||
if(!tmpStr.isEmpty())
|
|
||||||
copy(srcStr+tmpStr, localDirStr+tmpStr);
|
|
||||||
output->writeEntry("pindown", tmpStr, true, true);
|
|
||||||
tmpStr = input.readEntry("CloseButton");
|
|
||||||
if(!tmpStr.isEmpty())
|
|
||||||
copy(srcStr+tmpStr, localDirStr+tmpStr);
|
|
||||||
output->writeEntry("close", tmpStr, true, true);
|
|
||||||
tmpStr = input.readEntry("MaximizeButton");
|
|
||||||
if(!tmpStr.isEmpty())
|
|
||||||
copy(srcStr+tmpStr, localDirStr+tmpStr);
|
|
||||||
output->writeEntry("maximize", tmpStr, true, true);
|
|
||||||
tmpStr = input.readEntry("MaximizeDownButton");
|
|
||||||
if(!tmpStr.isEmpty())
|
|
||||||
copy(srcStr+tmpStr, localDirStr+tmpStr);
|
|
||||||
output->writeEntry("maximizedown", tmpStr, true, true);
|
|
||||||
tmpStr = input.readEntry("MinimizeButton");
|
|
||||||
if(!tmpStr.isEmpty())
|
|
||||||
copy(srcStr+tmpStr, localDirStr+tmpStr);
|
|
||||||
output->writeEntry("iconify", tmpStr, true, true);
|
|
||||||
tmpStr = input.readEntry("TitlebarPixmapActive");
|
|
||||||
if(!tmpStr.isEmpty())
|
|
||||||
copy(srcStr+tmpStr, localDirStr+tmpStr);
|
|
||||||
output->writeEntry("TitlebarPixmapActive", tmpStr, true, true);
|
|
||||||
tmpStr = input.readEntry("TitlebarPixmapInactive");
|
|
||||||
if(!tmpStr.isEmpty())
|
|
||||||
copy(srcStr+tmpStr, localDirStr+tmpStr);
|
|
||||||
output->writeEntry("TitlebarPixmapInactive", tmpStr, true, true);
|
|
||||||
|
|
||||||
input.setGroup("Window Button Layout");
|
|
||||||
output->setGroup("Buttons");
|
|
||||||
output->writeEntry("ButtonA", input.readEntry("ButtonA"), true, true);
|
|
||||||
output->writeEntry("ButtonB", input.readEntry("ButtonB"), true, true);
|
|
||||||
output->writeEntry("ButtonC", input.readEntry("ButtonC"), true, true);
|
|
||||||
output->writeEntry("ButtonD", input.readEntry("ButtonD"), true, true);
|
|
||||||
output->writeEntry("ButtonE", input.readEntry("ButtonE"), true, true);
|
|
||||||
output->writeEntry("ButtonF", input.readEntry("ButtonF"), true, true);
|
|
||||||
|
|
||||||
output->sync();
|
|
||||||
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,41 +0,0 @@
|
||||||
[Desktop Entry]
|
|
||||||
Name=KWM Theme
|
|
||||||
Name[ca]=Tema KWM
|
|
||||||
Name[cs]=Téma KWM
|
|
||||||
Name[da]=KWM tema
|
|
||||||
Name[de]=KWM-Design
|
|
||||||
Name[el]=Θέμα KWM
|
|
||||||
Name[eo]=KWM-etoso
|
|
||||||
Name[es]=Tema KWM
|
|
||||||
Name[et]=KWM teema
|
|
||||||
Name[fi]=KWM-teema
|
|
||||||
Name[fr]=Thème KWM
|
|
||||||
Name[gl]=Tema do KWM
|
|
||||||
Name[hr]=KWM Tema
|
|
||||||
Name[hu]=KWM téma
|
|
||||||
Name[is]=KWM þema
|
|
||||||
Name[it]=Tema KWM
|
|
||||||
Name[ja]=KWMテーマ
|
|
||||||
Name[ko]=KWM 테마
|
|
||||||
Name[lt]=KWM Tema
|
|
||||||
Name[lv]=KWM Tēma
|
|
||||||
Name[mi]=Kaupapa KWM
|
|
||||||
Name[mk]=KWM тема
|
|
||||||
Name[nl]=KWM-thema
|
|
||||||
Name[no]=KWM-tema
|
|
||||||
Name[no_NY]=KWM-tema
|
|
||||||
Name[oc]=Tema KWM
|
|
||||||
Name[pl]=Motyw KWM
|
|
||||||
Name[pt]=Tema do kwm
|
|
||||||
Name[pt_BR]=Tema KWM
|
|
||||||
Name[ro]=Temă KWM
|
|
||||||
Name[ru]=Стиль KWM
|
|
||||||
Name[sk]=Témy KWM
|
|
||||||
Name[sl]=Tema za KWM
|
|
||||||
Name[sr]=KWM Tema
|
|
||||||
Name[sv]=KWM-tema
|
|
||||||
Name[tr]=KWM Teması
|
|
||||||
Name[uk]=Тема KWM
|
|
||||||
Name[zh_CN.GB2312]=KWM 主题
|
|
||||||
Name[zh_TW.Big5]=KWM 佈景
|
|
||||||
X-KDE-Library=libkwinkwmtheme
|
|
|
@ -1,833 +0,0 @@
|
||||||
#include <kconfig.h>
|
|
||||||
#include "kwmthemeclient.h"
|
|
||||||
#include <kglobal.h>
|
|
||||||
#include <qlayout.h>
|
|
||||||
#include <qdrawutil.h>
|
|
||||||
#include <kpixmapeffect.h>
|
|
||||||
#include <kstddirs.h>
|
|
||||||
#include <kglobal.h>
|
|
||||||
#include <klocale.h>
|
|
||||||
#include <qbitmap.h>
|
|
||||||
#include "../../workspace.h"
|
|
||||||
#include "../../options.h"
|
|
||||||
|
|
||||||
|
|
||||||
using namespace KWinInternal;
|
|
||||||
|
|
||||||
|
|
||||||
static QPixmap stretchPixmap(QPixmap& src, bool stretchVert){
|
|
||||||
QPixmap dest;
|
|
||||||
QBitmap *srcMask, *destMask;
|
|
||||||
int w, h, w2, h2;
|
|
||||||
QPainter p;
|
|
||||||
|
|
||||||
if (src.isNull()) return src;
|
|
||||||
|
|
||||||
w = src.width();
|
|
||||||
h = src.height();
|
|
||||||
|
|
||||||
if (stretchVert){
|
|
||||||
w2 = w;
|
|
||||||
for (h2=h; h2<100; h2=h2<<1)
|
|
||||||
;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
h2 = h;
|
|
||||||
for (w2=w; w2<100; w2=w2<<1)
|
|
||||||
;
|
|
||||||
}
|
|
||||||
if (w2==w && h2==h) return src;
|
|
||||||
|
|
||||||
dest = src;
|
|
||||||
dest.resize(w2, h2);
|
|
||||||
|
|
||||||
p.begin(&dest);
|
|
||||||
p.drawTiledPixmap(0, 0, w2, h2, src);
|
|
||||||
p.end();
|
|
||||||
|
|
||||||
srcMask = (QBitmap*)src.mask();
|
|
||||||
if (srcMask){
|
|
||||||
destMask = (QBitmap*)dest.mask();
|
|
||||||
p.begin(destMask);
|
|
||||||
p.drawTiledPixmap(0, 0, w2, h2, *srcMask);
|
|
||||||
p.end();
|
|
||||||
}
|
|
||||||
return dest;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
enum FramePixmap{FrameTop=0, FrameBottom, FrameLeft, FrameRight, FrameTopLeft,
|
|
||||||
FrameTopRight, FrameBottomLeft, FrameBottomRight};
|
|
||||||
|
|
||||||
static QPixmap *framePixmaps[8];
|
|
||||||
static QPixmap *menuPix, *iconifyPix, *closePix, *maxPix, *minmaxPix,
|
|
||||||
*pinupPix, *pindownPix;
|
|
||||||
static KPixmap *aTitlePix = 0;
|
|
||||||
static KPixmap *iTitlePix = 0;
|
|
||||||
static KPixmapEffect::GradientType grType;
|
|
||||||
static int maxExtent, titleAlign;
|
|
||||||
static bool titleGradient = true;
|
|
||||||
static bool pixmaps_created = false;
|
|
||||||
static bool titleSunken = false;
|
|
||||||
static bool titleTransparent;
|
|
||||||
|
|
||||||
static void create_pixmaps()
|
|
||||||
{
|
|
||||||
const char *keys[] = {"wm_top", "wm_bottom", "wm_left", "wm_right",
|
|
||||||
"wm_topleft", "wm_topright", "wm_bottomleft", "wm_bottomright"};
|
|
||||||
|
|
||||||
if(pixmaps_created)
|
|
||||||
return;
|
|
||||||
pixmaps_created = true;
|
|
||||||
|
|
||||||
KConfig *config = KGlobal::config();
|
|
||||||
config->setGroup("General");
|
|
||||||
QString tmpStr;
|
|
||||||
|
|
||||||
for(int i=0; i < 8; ++i)
|
|
||||||
{
|
|
||||||
framePixmaps[i] = new QPixmap(locate("appdata",
|
|
||||||
"pics/"+config->readEntry(keys[i], " ")));
|
|
||||||
if(framePixmaps[i]->isNull())
|
|
||||||
qWarning("Unable to load frame pixmap for %s", keys[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
*framePixmaps[FrameTop] = stretchPixmap(*framePixmaps[FrameTop], false);
|
|
||||||
*framePixmaps[FrameBottom] = stretchPixmap(*framePixmaps[FrameBottom], false);
|
|
||||||
*framePixmaps[FrameLeft] = stretchPixmap(*framePixmaps[FrameLeft], true);
|
|
||||||
*framePixmaps[FrameRight] = stretchPixmap(*framePixmaps[FrameRight], true);
|
|
||||||
|
|
||||||
maxExtent = framePixmaps[FrameTop]->height();
|
|
||||||
if(framePixmaps[FrameBottom]->height() > maxExtent)
|
|
||||||
maxExtent = framePixmaps[FrameBottom]->height();
|
|
||||||
if(framePixmaps[FrameLeft]->width() > maxExtent)
|
|
||||||
maxExtent = framePixmaps[FrameLeft]->width();
|
|
||||||
if(framePixmaps[FrameRight]->width() > maxExtent)
|
|
||||||
maxExtent = framePixmaps[FrameRight]->width();
|
|
||||||
|
|
||||||
menuPix = new QPixmap(locate("appdata",
|
|
||||||
"pics/"+config->readEntry("menu", " ")));
|
|
||||||
iconifyPix = new QPixmap(locate("appdata",
|
|
||||||
"pics/"+config->readEntry("iconify", " ")));
|
|
||||||
maxPix = new QPixmap(locate("appdata",
|
|
||||||
"pics/"+config->readEntry("maximize", " ")));
|
|
||||||
minmaxPix = new QPixmap(locate("appdata",
|
|
||||||
"pics/"+config->readEntry("maximizedown", " ")));
|
|
||||||
closePix = new QPixmap(locate("appdata",
|
|
||||||
"pics/"+config->readEntry("close", " ")));
|
|
||||||
pinupPix = new QPixmap(locate("appdata",
|
|
||||||
"pics/"+config->readEntry("pinup", " ")));
|
|
||||||
pindownPix = new QPixmap(locate("appdata",
|
|
||||||
"pics/"+config->readEntry("pindown", " ")));
|
|
||||||
if(menuPix->isNull())
|
|
||||||
menuPix->load(locate("appdata", "pics/menu.png"));
|
|
||||||
if(iconifyPix->isNull())
|
|
||||||
iconifyPix->load(locate("appdata", "pics/iconify.png"));
|
|
||||||
if(maxPix->isNull())
|
|
||||||
maxPix->load(locate("appdata", "pics/maximize.png"));
|
|
||||||
if(minmaxPix->isNull())
|
|
||||||
minmaxPix->load(locate("appdata", "pics/maximizedown.png"));
|
|
||||||
if(closePix->isNull())
|
|
||||||
closePix->load(locate("appdata", "pics/close.png"));
|
|
||||||
if(pinupPix->isNull())
|
|
||||||
pinupPix->load(locate("appdata", "pics/pinup.png"));
|
|
||||||
if(pindownPix->isNull())
|
|
||||||
pindownPix->load(locate("appdata", "pics/pindown.png"));
|
|
||||||
|
|
||||||
tmpStr = config->readEntry("TitleAlignment");
|
|
||||||
if(tmpStr == "right")
|
|
||||||
titleAlign = Qt::AlignRight | Qt::AlignVCenter;
|
|
||||||
else if(tmpStr == "middle")
|
|
||||||
titleAlign = Qt::AlignCenter;
|
|
||||||
else
|
|
||||||
titleAlign = Qt::AlignLeft | Qt::AlignVCenter;
|
|
||||||
titleSunken = config->readBoolEntry("TitleFrameShaded", true);
|
|
||||||
// titleSunken = true; // is this fixed?
|
|
||||||
titleTransparent = config->readBoolEntry("PixmapUnderTitleText", true);
|
|
||||||
|
|
||||||
tmpStr = config->readEntry("TitlebarLook");
|
|
||||||
if(tmpStr == "shadedVertical"){
|
|
||||||
aTitlePix = new KPixmap;
|
|
||||||
aTitlePix->resize(32, 20);
|
|
||||||
KPixmapEffect::gradient(*aTitlePix,
|
|
||||||
options->color(Options::TitleBar, true),
|
|
||||||
options->color(Options::TitleBlend, true),
|
|
||||||
KPixmapEffect::VerticalGradient);
|
|
||||||
iTitlePix = new KPixmap;
|
|
||||||
iTitlePix->resize(32, 20);
|
|
||||||
KPixmapEffect::gradient(*iTitlePix,
|
|
||||||
options->color(Options::TitleBar, false),
|
|
||||||
options->color(Options::TitleBlend, false),
|
|
||||||
KPixmapEffect::VerticalGradient);
|
|
||||||
titleGradient = false; // we can just tile this
|
|
||||||
|
|
||||||
}
|
|
||||||
else if(tmpStr == "shadedHorizontal")
|
|
||||||
grType = KPixmapEffect::HorizontalGradient;
|
|
||||||
else if(tmpStr == "shadedDiagonal")
|
|
||||||
grType = KPixmapEffect::DiagonalGradient;
|
|
||||||
else if(tmpStr == "shadedCrossDiagonal")
|
|
||||||
grType = KPixmapEffect::CrossDiagonalGradient;
|
|
||||||
else if(tmpStr == "shadedPyramid")
|
|
||||||
grType = KPixmapEffect::PyramidGradient;
|
|
||||||
else if(tmpStr == "shadedRectangle")
|
|
||||||
grType = KPixmapEffect::RectangleGradient;
|
|
||||||
else if(tmpStr == "shadedPipeCross")
|
|
||||||
grType = KPixmapEffect::PipeCrossGradient;
|
|
||||||
else if(tmpStr == "shadedElliptic")
|
|
||||||
grType = KPixmapEffect::EllipticGradient;
|
|
||||||
else{
|
|
||||||
titleGradient = false;
|
|
||||||
tmpStr = config->readEntry("TitlebarPixmapActive", "");
|
|
||||||
if(!tmpStr.isEmpty()){
|
|
||||||
aTitlePix = new KPixmap;
|
|
||||||
aTitlePix->load(locate("appdata", "pics/" + tmpStr));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
aTitlePix = NULL;
|
|
||||||
tmpStr = config->readEntry("TitlebarPixmapInactive", "");
|
|
||||||
if(!tmpStr.isEmpty()){
|
|
||||||
iTitlePix = new KPixmap;
|
|
||||||
iTitlePix->load(locate("appdata", "pics/" + tmpStr));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
iTitlePix = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void delete_pixmaps()
|
|
||||||
{
|
|
||||||
for(int i=0; i < 8; ++i)
|
|
||||||
delete framePixmaps[i];
|
|
||||||
|
|
||||||
delete menuPix;
|
|
||||||
delete iconifyPix;
|
|
||||||
delete closePix;
|
|
||||||
delete maxPix;
|
|
||||||
delete minmaxPix;
|
|
||||||
delete pinupPix;
|
|
||||||
delete pindownPix;
|
|
||||||
delete aTitlePix;
|
|
||||||
aTitlePix = 0;
|
|
||||||
delete iTitlePix;
|
|
||||||
iTitlePix = 0;
|
|
||||||
|
|
||||||
titleGradient = true;
|
|
||||||
pixmaps_created = false;
|
|
||||||
titleSunken = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void KWMThemeClient::slotReset()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void MyButton::drawButtonLabel(QPainter *p)
|
|
||||||
{
|
|
||||||
if(pixmap()){
|
|
||||||
// If we have a theme who's button covers the entire width or
|
|
||||||
// entire height, we shift down/right by 1 pixel so we have
|
|
||||||
// some visual notification of button presses. i.e. for MGBriezh
|
|
||||||
int offset = (isDown() && ((pixmap()->width() >= width()) ||
|
|
||||||
(pixmap()->height() >= height()))) ? 1 : 0;
|
|
||||||
style().drawItem(p, offset, offset, width(), height(),
|
|
||||||
AlignCenter, colorGroup(),
|
|
||||||
true, pixmap(), QString::null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
KWMThemeClient::KWMThemeClient( Workspace *ws, WId w, QWidget *parent,
|
|
||||||
const char *name )
|
|
||||||
: Client( ws, w, parent, name, WResizeNoErase | WNorthWestGravity)
|
|
||||||
{
|
|
||||||
stickyBtn = maxBtn = mnuBtn = 0;
|
|
||||||
connect(options, SIGNAL(resetClients()), this, SLOT(slotReset()));
|
|
||||||
layout = new QGridLayout(this);
|
|
||||||
layout->addColSpacing(0, maxExtent);
|
|
||||||
layout->addColSpacing(2, maxExtent);
|
|
||||||
|
|
||||||
layout->addRowSpacing(0, maxExtent);
|
|
||||||
|
|
||||||
layout->addItem(new QSpacerItem(1, 1, QSizePolicy::Fixed,
|
|
||||||
QSizePolicy::Expanding));
|
|
||||||
|
|
||||||
layout->addWidget(windowWrapper(), 2, 1);
|
|
||||||
// Without the next line, shading flickers
|
|
||||||
layout->addItem( new QSpacerItem(0, 0, QSizePolicy::Fixed, QSizePolicy::Expanding) );
|
|
||||||
layout->addRowSpacing(3, maxExtent);
|
|
||||||
layout->setRowStretch(2, 10);
|
|
||||||
layout->setColStretch(1, 10);
|
|
||||||
|
|
||||||
QHBoxLayout* hb = new QHBoxLayout;
|
|
||||||
layout->addLayout( hb, 1, 1 );
|
|
||||||
|
|
||||||
KConfig *config = KGlobal::config();
|
|
||||||
config->setGroup("Buttons");
|
|
||||||
QString val;
|
|
||||||
MyButton *btn;
|
|
||||||
int i;
|
|
||||||
static const char *defaultButtons[]={"Menu","Sticky","Off","Iconify",
|
|
||||||
"Maximize","Close"};
|
|
||||||
static const char keyOffsets[]={"ABCDEF"};
|
|
||||||
for(i=0; i < 6; ++i){
|
|
||||||
if(i == 3){
|
|
||||||
titlebar = new QSpacerItem(10, 20, QSizePolicy::Expanding,
|
|
||||||
QSizePolicy::Minimum );
|
|
||||||
hb->addItem( titlebar );
|
|
||||||
}
|
|
||||||
QString key("Button");
|
|
||||||
key += QChar(keyOffsets[i]);
|
|
||||||
val = config->readEntry(key, defaultButtons[i]);
|
|
||||||
if(val == "Menu"){
|
|
||||||
mnuBtn = new MyButton(this, "menu");
|
|
||||||
iconChange();
|
|
||||||
hb->addWidget(mnuBtn);
|
|
||||||
mnuBtn->setFixedSize(20, 20);
|
|
||||||
connect(mnuBtn, SIGNAL(pressed()), this,
|
|
||||||
SLOT(menuButtonPressed()));
|
|
||||||
}
|
|
||||||
else if(val == "Sticky"){
|
|
||||||
stickyBtn = new MyButton(this, "sticky");
|
|
||||||
if (isSticky())
|
|
||||||
stickyBtn->setPixmap(*pindownPix);
|
|
||||||
else
|
|
||||||
stickyBtn->setPixmap(*pinupPix);
|
|
||||||
connect(stickyBtn, SIGNAL( clicked() ), this, SLOT(toggleSticky()));
|
|
||||||
hb->addWidget(stickyBtn);
|
|
||||||
stickyBtn->setFixedSize(20, 20);
|
|
||||||
}
|
|
||||||
else if((val == "Iconify") && isMinimizable()){
|
|
||||||
btn = new MyButton(this, "iconify");
|
|
||||||
btn->setPixmap(*iconifyPix);
|
|
||||||
connect(btn, SIGNAL(clicked()), this, SLOT(iconify()));
|
|
||||||
hb->addWidget(btn);
|
|
||||||
btn->setFixedSize(20, 20);
|
|
||||||
}
|
|
||||||
else if((val == "Maximize") && isMaximizable()){
|
|
||||||
maxBtn = new MyButton(this, "max");
|
|
||||||
maxBtn->setPixmap(*maxPix);
|
|
||||||
connect(maxBtn, SIGNAL(clicked()), this, SLOT(maximize()));
|
|
||||||
hb->addWidget(maxBtn);
|
|
||||||
maxBtn->setFixedSize(20, 20);
|
|
||||||
}
|
|
||||||
else if(val == "Close"){
|
|
||||||
btn = new MyButton(this, "close");
|
|
||||||
btn->setPixmap(*closePix);
|
|
||||||
connect(btn, SIGNAL(clicked()), this, SLOT(closeWindow()));
|
|
||||||
hb->addWidget(btn);
|
|
||||||
btn->setFixedSize(20, 20);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
if((val != "Off") &&
|
|
||||||
((val == "Iconify") && !isMinimizable()) &&
|
|
||||||
((val == "Maximize") && !isMaximizable()))
|
|
||||||
qWarning("KWin: Unrecognized button value: %s", val.latin1());
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(titleGradient){
|
|
||||||
aGradient = new KPixmap;
|
|
||||||
iGradient = new KPixmap;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
aGradient = 0;
|
|
||||||
iGradient = 0;
|
|
||||||
}
|
|
||||||
setBackgroundMode(NoBackground);
|
|
||||||
}
|
|
||||||
|
|
||||||
void KWMThemeClient::drawTitle(QPainter &dest)
|
|
||||||
{
|
|
||||||
QRect titleRect = titlebar->geometry();
|
|
||||||
QRect r(0, 0, titleRect.width(), titleRect.height());
|
|
||||||
QPixmap buffer;
|
|
||||||
|
|
||||||
if(buffer.width() == r.width())
|
|
||||||
return;
|
|
||||||
|
|
||||||
buffer.resize(r.size());
|
|
||||||
QPainter p;
|
|
||||||
p.begin(&buffer);
|
|
||||||
|
|
||||||
if(titleSunken){
|
|
||||||
qDrawShadeRect(&p, r, options->colorGroup(Options::Frame, isActive()),
|
|
||||||
true, 1, 0);
|
|
||||||
r.setRect(r.x()+1, r.y()+1, r.width()-2, r.height()-2);
|
|
||||||
}
|
|
||||||
|
|
||||||
KPixmap *fill = isActive() ? aTitlePix : iTitlePix;
|
|
||||||
if(fill)
|
|
||||||
p.drawTiledPixmap(r, *fill);
|
|
||||||
else if(titleGradient){
|
|
||||||
fill = isActive() ? aGradient : iGradient;
|
|
||||||
if(fill->width() != r.width()){
|
|
||||||
fill->resize(r.width(), 20);
|
|
||||||
KPixmapEffect::gradient(*fill,
|
|
||||||
options->color(Options::TitleBar, isActive()),
|
|
||||||
options->color(Options::TitleBlend, isActive()),
|
|
||||||
grType);
|
|
||||||
}
|
|
||||||
p.drawTiledPixmap(r, *fill);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
p.fillRect(r, options->colorGroup(Options::TitleBar, isActive()).
|
|
||||||
brush(QColorGroup::Button));
|
|
||||||
}
|
|
||||||
p.setFont(options->font(isActive()));
|
|
||||||
p.setPen(options->color(Options::Font, isActive()));
|
|
||||||
// Add left & right margin
|
|
||||||
r.setLeft(r.left()+5);
|
|
||||||
r.setRight(r.right()-5);
|
|
||||||
p.drawText(r, titleAlign, caption());
|
|
||||||
p.end();
|
|
||||||
|
|
||||||
dest.drawPixmap(titleRect.x(), titleRect.y(), buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void KWMThemeClient::resizeEvent( QResizeEvent* e)
|
|
||||||
{
|
|
||||||
Client::resizeEvent( e );
|
|
||||||
doShape();
|
|
||||||
repaint();
|
|
||||||
}
|
|
||||||
|
|
||||||
void KWMThemeClient::captionChange( const QString& )
|
|
||||||
{
|
|
||||||
repaint( titlebar->geometry(), false );
|
|
||||||
}
|
|
||||||
|
|
||||||
void KWMThemeClient::paintEvent( QPaintEvent *)
|
|
||||||
{
|
|
||||||
QPainter p;
|
|
||||||
p.begin(this);
|
|
||||||
int x,y;
|
|
||||||
// first the corners
|
|
||||||
int w1 = framePixmaps[FrameTopLeft]->width();
|
|
||||||
int h1 = framePixmaps[FrameTopLeft]->height();
|
|
||||||
if (w1 > width()/2) w1 = width()/2;
|
|
||||||
if (h1 > height()/2) h1 = height()/2;
|
|
||||||
p.drawPixmap(0,0,*framePixmaps[FrameTopLeft],
|
|
||||||
0,0,w1, h1);
|
|
||||||
int w2 = framePixmaps[FrameTopRight]->width();
|
|
||||||
int h2 = framePixmaps[FrameTopRight]->height();
|
|
||||||
if (w2 > width()/2) w2 = width()/2;
|
|
||||||
if (h2 > height()/2) h2 = height()/2;
|
|
||||||
p.drawPixmap(width()-w2,0,*framePixmaps[FrameTopRight],
|
|
||||||
framePixmaps[FrameTopRight]->width()-w2,0,w2, h2);
|
|
||||||
|
|
||||||
int w3 = framePixmaps[FrameBottomLeft]->width();
|
|
||||||
int h3 = framePixmaps[FrameBottomLeft]->height();
|
|
||||||
if (w3 > width()/2) w3 = width()/2;
|
|
||||||
if (h3 > height()/2) h3 = height()/2;
|
|
||||||
p.drawPixmap(0,height()-h3,*framePixmaps[FrameBottomLeft],
|
|
||||||
0,framePixmaps[FrameBottomLeft]->height()-h3,w3, h3);
|
|
||||||
|
|
||||||
int w4 = framePixmaps[FrameBottomRight]->width();
|
|
||||||
int h4 = framePixmaps[FrameBottomRight]->height();
|
|
||||||
if (w4 > width()/2) w4 = width()/2;
|
|
||||||
if (h4 > height()/2) h4 = height()/2;
|
|
||||||
p.drawPixmap(width()-w4,height()-h4,*(framePixmaps[FrameBottomRight]),
|
|
||||||
framePixmaps[FrameBottomRight]->width()-w4,
|
|
||||||
framePixmaps[FrameBottomRight]->height()-h4,
|
|
||||||
w4, h4);
|
|
||||||
|
|
||||||
QPixmap pm;
|
|
||||||
QWMatrix m;
|
|
||||||
int n,s,w;
|
|
||||||
//top
|
|
||||||
pm = *framePixmaps[FrameTop];
|
|
||||||
|
|
||||||
if (pm.width() > 0){
|
|
||||||
s = width()-w2-w1;
|
|
||||||
n = s/pm.width();
|
|
||||||
w = n>0?s/n:s;
|
|
||||||
m.reset();
|
|
||||||
m.scale(w/(float)pm.width(), 1);
|
|
||||||
pm = pm.xForm(m);
|
|
||||||
|
|
||||||
x = w1;
|
|
||||||
while (1){
|
|
||||||
if (pm.width() < width()-w2-x){
|
|
||||||
p.drawPixmap(x,maxExtent-pm.height()-1,
|
|
||||||
pm);
|
|
||||||
x += pm.width();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
p.drawPixmap(x,maxExtent-pm.height()-1,
|
|
||||||
pm,
|
|
||||||
0,0,width()-w2-x,pm.height());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//bottom
|
|
||||||
pm = *framePixmaps[FrameBottom];
|
|
||||||
|
|
||||||
if (pm.width() > 0){
|
|
||||||
s = width()-w4-w3;
|
|
||||||
n = s/pm.width();
|
|
||||||
w = n>0?s/n:s;
|
|
||||||
m.reset();
|
|
||||||
m.scale(w/(float)pm.width(), 1);
|
|
||||||
pm = pm.xForm(m);
|
|
||||||
|
|
||||||
x = w3;
|
|
||||||
while (1){
|
|
||||||
if (pm.width() < width()-w4-x){
|
|
||||||
p.drawPixmap(x,height()-maxExtent+1,pm);
|
|
||||||
x += pm.width();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
p.drawPixmap(x,height()-maxExtent+1,pm,
|
|
||||||
0,0,width()-w4-x,pm.height());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//left
|
|
||||||
pm = *framePixmaps[FrameLeft];
|
|
||||||
|
|
||||||
if (pm.height() > 0){
|
|
||||||
s = height()-h3-h1;
|
|
||||||
n = s/pm.height();
|
|
||||||
w = n>0?s/n:s;
|
|
||||||
m.reset();
|
|
||||||
m.scale(1, w/(float)pm.height());
|
|
||||||
pm = pm.xForm(m);
|
|
||||||
|
|
||||||
y = h1;
|
|
||||||
while (1){
|
|
||||||
if (pm.height() < height()-h3-y){
|
|
||||||
p.drawPixmap(maxExtent-pm.width()-1, y,
|
|
||||||
pm);
|
|
||||||
y += pm.height();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
p.drawPixmap(maxExtent-pm.width()-1, y,
|
|
||||||
pm,
|
|
||||||
0,0, pm.width(),
|
|
||||||
height()-h3-y);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//right
|
|
||||||
pm = *framePixmaps[FrameRight];
|
|
||||||
|
|
||||||
if (pm.height() > 0){
|
|
||||||
s = height()-h4-h2;
|
|
||||||
n = s/pm.height();
|
|
||||||
w = n>0?s/n:s;
|
|
||||||
m.reset();
|
|
||||||
m.scale(1, w/(float)pm.height());
|
|
||||||
pm = pm.xForm(m);
|
|
||||||
|
|
||||||
y = h2;
|
|
||||||
while (1){
|
|
||||||
if (pm.height() < height()-h4-y){
|
|
||||||
p.drawPixmap(width()-maxExtent+1, y,
|
|
||||||
pm);
|
|
||||||
y += pm.height();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
p.drawPixmap(width()-maxExtent+1, y,
|
|
||||||
pm,
|
|
||||||
0,0, pm.width(),
|
|
||||||
height()-h4-y);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
drawTitle(p);
|
|
||||||
|
|
||||||
QColor c = colorGroup().background();
|
|
||||||
|
|
||||||
// KWM evidently had a 1 pixel border around the client window. We
|
|
||||||
// emulate it here, but should be removed at some point in order to
|
|
||||||
// seamlessly mesh widget themes
|
|
||||||
p.setPen(c);
|
|
||||||
p.drawRect(maxExtent-1, maxExtent-1, width()-(maxExtent-1)*2,
|
|
||||||
height()-(maxExtent-1)*2);
|
|
||||||
|
|
||||||
// We fill the area behind the wrapped widget to ensure that
|
|
||||||
// shading animation is drawn as smoothly as possible
|
|
||||||
QRect r(layout->cellGeometry(2, 1));
|
|
||||||
p.fillRect( r.x(), r.y(), r.width(), r.height(), c);
|
|
||||||
p.end();
|
|
||||||
}
|
|
||||||
|
|
||||||
void KWMThemeClient::doShape()
|
|
||||||
{
|
|
||||||
|
|
||||||
QBitmap shapemask(width(), height());
|
|
||||||
shapemask.fill(color0);
|
|
||||||
QPainter p;
|
|
||||||
p.begin(&shapemask);
|
|
||||||
p.setBrush(color1);
|
|
||||||
p.setPen(color1);
|
|
||||||
int x,y;
|
|
||||||
// first the corners
|
|
||||||
int w1 = framePixmaps[FrameTopLeft]->width();
|
|
||||||
int h1 = framePixmaps[FrameTopLeft]->height();
|
|
||||||
if (w1 > width()/2) w1 = width()/2;
|
|
||||||
if (h1 > height()/2) h1 = height()/2;
|
|
||||||
p.drawPixmap(0,0,*framePixmaps[FrameTopLeft]->mask(),
|
|
||||||
0,0,w1, h1);
|
|
||||||
int w2 = framePixmaps[FrameTopRight]->width();
|
|
||||||
int h2 = framePixmaps[FrameTopRight]->height();
|
|
||||||
if (w2 > width()/2) w2 = width()/2;
|
|
||||||
if (h2 > height()/2) h2 = height()/2;
|
|
||||||
p.drawPixmap(width()-w2,0,*framePixmaps[FrameTopRight]->mask(),
|
|
||||||
framePixmaps[FrameTopRight]->width()-w2,0,w2, h2);
|
|
||||||
|
|
||||||
int w3 = framePixmaps[FrameBottomLeft]->width();
|
|
||||||
int h3 = framePixmaps[FrameBottomLeft]->height();
|
|
||||||
if (w3 > width()/2) w3 = width()/2;
|
|
||||||
if (h3 > height()/2) h3 = height()/2;
|
|
||||||
p.drawPixmap(0,height()-h3,*framePixmaps[FrameBottomLeft]->mask(),
|
|
||||||
0,framePixmaps[FrameBottomLeft]->height()-h3,w3, h3);
|
|
||||||
|
|
||||||
int w4 = framePixmaps[FrameBottomRight]->width();
|
|
||||||
int h4 = framePixmaps[FrameBottomRight]->height();
|
|
||||||
if (w4 > width()/2) w4 = width()/2;
|
|
||||||
if (h4 > height()/2) h4 = height()/2;
|
|
||||||
p.drawPixmap(width()-w4,height()-h4,*framePixmaps[FrameBottomRight]->mask(),
|
|
||||||
framePixmaps[FrameBottomRight]->width()-w4,
|
|
||||||
framePixmaps[FrameBottomRight]->height()-h4,
|
|
||||||
w4, h4);
|
|
||||||
|
|
||||||
QPixmap pm;
|
|
||||||
QWMatrix m;
|
|
||||||
int n,s,w;
|
|
||||||
//top
|
|
||||||
pm = *framePixmaps[FrameTop]->mask();
|
|
||||||
|
|
||||||
s = width()-w2-w1;
|
|
||||||
n = s/pm.width();
|
|
||||||
w = n>0?s/n:s;
|
|
||||||
m.reset();
|
|
||||||
m.scale(w/(float)pm.width(), 1);
|
|
||||||
pm = pm.xForm(m);
|
|
||||||
|
|
||||||
x = w1;
|
|
||||||
while (1){
|
|
||||||
if (pm.width() < width()-w2-x){
|
|
||||||
p.drawPixmap(x,maxExtent-pm.height()-1,
|
|
||||||
pm);
|
|
||||||
x += pm.width();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
p.drawPixmap(x,maxExtent-pm.height()-1,
|
|
||||||
pm,
|
|
||||||
0,0,width()-w2-x,pm.height());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//bottom
|
|
||||||
pm = *framePixmaps[FrameBottom]->mask();
|
|
||||||
|
|
||||||
s = width()-w4-w3;
|
|
||||||
n = s/pm.width();
|
|
||||||
w = n>0?s/n:s;
|
|
||||||
m.reset();
|
|
||||||
m.scale(w/(float)pm.width(), 1);
|
|
||||||
pm = pm.xForm(m);
|
|
||||||
|
|
||||||
x = w3;
|
|
||||||
while (1){
|
|
||||||
if (pm.width() < width()-w4-x){
|
|
||||||
p.drawPixmap(x,height()-maxExtent+1,pm);
|
|
||||||
x += pm.width();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
p.drawPixmap(x,height()-maxExtent+1,pm,
|
|
||||||
0,0,width()-w4-x,pm.height());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//left
|
|
||||||
pm = *framePixmaps[FrameLeft]->mask();
|
|
||||||
|
|
||||||
s = height()-h3-h1;
|
|
||||||
n = s/pm.height();
|
|
||||||
w = n>0?s/n:s;
|
|
||||||
m.reset();
|
|
||||||
m.scale(1, w/(float)pm.height());
|
|
||||||
pm = pm.xForm(m);
|
|
||||||
|
|
||||||
y = h1;
|
|
||||||
while (1){
|
|
||||||
if (pm.height() < height()-h3-y){
|
|
||||||
p.drawPixmap(maxExtent-pm.width()-1, y,
|
|
||||||
pm);
|
|
||||||
y += pm.height();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
p.drawPixmap(maxExtent-pm.width()-1, y,
|
|
||||||
pm,
|
|
||||||
0,0, pm.width(),
|
|
||||||
height()-h3-y);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//right
|
|
||||||
pm = *framePixmaps[FrameRight]->mask();
|
|
||||||
|
|
||||||
s = height()-h4-h2;
|
|
||||||
n = s/pm.height();
|
|
||||||
w = n>0?s/n:s;
|
|
||||||
m.reset();
|
|
||||||
m.scale(1, w/(float)pm.height());
|
|
||||||
pm = pm.xForm(m);
|
|
||||||
|
|
||||||
y = h2;
|
|
||||||
while (1){
|
|
||||||
if (pm.height() < height()-h4-y){
|
|
||||||
p.drawPixmap(width()-maxExtent+1, y,
|
|
||||||
pm);
|
|
||||||
y += pm.height();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
p.drawPixmap(width()-maxExtent+1, y,
|
|
||||||
pm,
|
|
||||||
0,0, pm.width(),
|
|
||||||
height()-h4-y);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
p.fillRect(maxExtent-1, maxExtent-1, width()-2*maxExtent+2, height()-2*maxExtent+2, color1);
|
|
||||||
setMask(shapemask);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void KWMThemeClient::showEvent(QShowEvent *ev)
|
|
||||||
{
|
|
||||||
Client::showEvent(ev);
|
|
||||||
doShape();
|
|
||||||
repaint(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void KWMThemeClient::windowWrapperShowEvent( QShowEvent* )
|
|
||||||
{
|
|
||||||
doShape();
|
|
||||||
}
|
|
||||||
|
|
||||||
void KWMThemeClient::mouseDoubleClickEvent( QMouseEvent * e )
|
|
||||||
{
|
|
||||||
if (titlebar->geometry().contains( e->pos() ) )
|
|
||||||
setShade( !isShade() );
|
|
||||||
workspace()->requestFocus( this );
|
|
||||||
}
|
|
||||||
|
|
||||||
void KWMThemeClient::stickyChange(bool on)
|
|
||||||
{
|
|
||||||
if (stickyBtn)
|
|
||||||
stickyBtn->setPixmap(on ? *pindownPix : *pinupPix);
|
|
||||||
}
|
|
||||||
|
|
||||||
void KWMThemeClient::maximizeChange(bool m)
|
|
||||||
{
|
|
||||||
if (maxBtn)
|
|
||||||
maxBtn->setPixmap(m ? *minmaxPix : *maxPix);
|
|
||||||
}
|
|
||||||
|
|
||||||
Client::MousePosition KWMThemeClient::mousePosition(const QPoint &p) const
|
|
||||||
{
|
|
||||||
MousePosition m = Client::mousePosition(p);
|
|
||||||
// corners
|
|
||||||
if(p.y() < framePixmaps[FrameTop]->height() &&
|
|
||||||
p.x() < framePixmaps[FrameLeft]->width()){
|
|
||||||
m = TopLeft;
|
|
||||||
}
|
|
||||||
else if(p.y() < framePixmaps[FrameTop]->height() &&
|
|
||||||
p.x() > width()-framePixmaps[FrameRight]->width()){
|
|
||||||
m = TopRight;
|
|
||||||
}
|
|
||||||
else if(p.y() > height()-framePixmaps[FrameBottom]->height() &&
|
|
||||||
p.x() < framePixmaps[FrameLeft]->width()){
|
|
||||||
m = BottomLeft;
|
|
||||||
}
|
|
||||||
else if(p.y() > height()-framePixmaps[FrameBottom]->height() &&
|
|
||||||
p.x() > width()-framePixmaps[FrameRight]->width()){
|
|
||||||
m = BottomRight;
|
|
||||||
} // edges
|
|
||||||
else if(p.y() < framePixmaps[FrameTop]->height())
|
|
||||||
m = Top;
|
|
||||||
else if(p.y() > height()-framePixmaps[FrameBottom]->height())
|
|
||||||
m = Bottom;
|
|
||||||
else if(p.x() < framePixmaps[FrameLeft]->width())
|
|
||||||
m = Left;
|
|
||||||
else if(p.x() > width()-framePixmaps[FrameRight]->width())
|
|
||||||
m = Right;
|
|
||||||
return(m);
|
|
||||||
}
|
|
||||||
|
|
||||||
void KWMThemeClient::menuButtonPressed()
|
|
||||||
{
|
|
||||||
static QTime* t = 0;
|
|
||||||
static KWMThemeClient* tc = 0;
|
|
||||||
if ( !t )
|
|
||||||
t = new QTime;
|
|
||||||
|
|
||||||
if ( tc != this || t->elapsed() > QApplication::doubleClickInterval() ){
|
|
||||||
mnuBtn->setDown(false); // will stay down if I don't do this
|
|
||||||
workspace()->clientPopup(this)->
|
|
||||||
popup(mnuBtn->mapToGlobal(mnuBtn->rect().bottomLeft()));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
mnuBtn->setPopup( 0 );
|
|
||||||
closeWindow();
|
|
||||||
}
|
|
||||||
t->start();
|
|
||||||
tc = this;
|
|
||||||
}
|
|
||||||
|
|
||||||
void KWMThemeClient::iconChange()
|
|
||||||
{
|
|
||||||
if(mnuBtn){
|
|
||||||
if(miniIcon().isNull()){
|
|
||||||
mnuBtn->setPixmap(*menuPix);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
mnuBtn->setPixmap(miniIcon());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void KWMThemeClient::init()
|
|
||||||
{
|
|
||||||
//
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C"
|
|
||||||
{
|
|
||||||
Client *allocate(Workspace *ws, WId w)
|
|
||||||
{
|
|
||||||
return(new KWMThemeClient(ws, w));
|
|
||||||
}
|
|
||||||
void init()
|
|
||||||
{
|
|
||||||
create_pixmaps();
|
|
||||||
}
|
|
||||||
void reset()
|
|
||||||
{
|
|
||||||
delete_pixmaps();
|
|
||||||
create_pixmaps();
|
|
||||||
}
|
|
||||||
void deinit()
|
|
||||||
{
|
|
||||||
delete_pixmaps();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#include "kwmthemeclient.moc"
|
|
|
@ -1,58 +0,0 @@
|
||||||
#ifndef __KWMTHEMECLIENT_H
|
|
||||||
#define __KWMTHEMECLIENT_H
|
|
||||||
|
|
||||||
#include <qbutton.h>
|
|
||||||
#include <qtoolbutton.h>
|
|
||||||
#include <kpixmap.h>
|
|
||||||
#include "../../client.h"
|
|
||||||
class QLabel;
|
|
||||||
class QSpacerItem;
|
|
||||||
class QGridLayout;
|
|
||||||
|
|
||||||
namespace KWinInternal{
|
|
||||||
|
|
||||||
// QToolButton uses a 1 pixel border :P
|
|
||||||
class MyButton : public QToolButton
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
MyButton(QWidget *parent=0, const char *name=0)
|
|
||||||
: QToolButton(parent, name){setAutoRaise(true);}
|
|
||||||
protected:
|
|
||||||
void drawButtonLabel(QPainter *p);
|
|
||||||
};
|
|
||||||
|
|
||||||
class KWMThemeClient : public KWinInternal::Client
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
KWMThemeClient( Workspace *ws, WId w, QWidget *parent=0, const char *name=0 );
|
|
||||||
~KWMThemeClient(){;}
|
|
||||||
protected:
|
|
||||||
void doShape();
|
|
||||||
void drawTitle(QPainter &p);
|
|
||||||
void resizeEvent( QResizeEvent* );
|
|
||||||
void paintEvent( QPaintEvent* );
|
|
||||||
void showEvent( QShowEvent* );
|
|
||||||
void windowWrapperShowEvent( QShowEvent* );
|
|
||||||
void mouseDoubleClickEvent( QMouseEvent * );
|
|
||||||
void init();
|
|
||||||
void captionChange( const QString& name );
|
|
||||||
void stickyChange(bool on);
|
|
||||||
void maximizeChange(bool m);
|
|
||||||
void iconChange();
|
|
||||||
MousePosition mousePosition(const QPoint &) const;
|
|
||||||
protected slots:
|
|
||||||
void slotReset();
|
|
||||||
void menuButtonPressed();
|
|
||||||
private:
|
|
||||||
QPixmap buffer;
|
|
||||||
KPixmap *aGradient, *iGradient;
|
|
||||||
MyButton *maxBtn, *stickyBtn, *mnuBtn;
|
|
||||||
QSpacerItem *titlebar;
|
|
||||||
QGridLayout* layout;
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
|
|
||||||
INCLUDES = $(all_includes)
|
|
||||||
|
|
||||||
kde_module_LTLIBRARIES = libkwinlaptop.la
|
|
||||||
|
|
||||||
libkwinlaptop_la_SOURCES = laptopclient.cpp
|
|
||||||
libkwinlaptop_la_LIBADD = ../../kwin.la
|
|
||||||
libkwinlaptop_la_LDFLAGS = $(all_libraries) $(KDE_PLUGIN)
|
|
||||||
|
|
||||||
METASOURCES = AUTO
|
|
||||||
noinst_HEADERS = laptopclient.h
|
|
||||||
|
|
||||||
lnkdir = $(kde_datadir)/kwin/
|
|
||||||
lnk_DATA = laptop.desktop
|
|
||||||
|
|
||||||
EXTRA_DIST = $(lnk_DATA)
|
|
||||||
|
|
||||||
|
|
||||||
###KMAKE-start (don't edit or delete this block)
|
|
||||||
|
|
||||||
###KMAKE-end
|
|
|
@ -1,28 +0,0 @@
|
||||||
[Desktop Entry]
|
|
||||||
Name=Laptop
|
|
||||||
Name[ca]=Portàtil
|
|
||||||
Name[da]=Bærbar
|
|
||||||
Name[el]=Φορητό
|
|
||||||
Name[eo]=Portkomputilo
|
|
||||||
Name[es]=Portátil
|
|
||||||
Name[fi]=Kannettava
|
|
||||||
Name[fr]=Ordinateur portable
|
|
||||||
Name[gl]=Portátil
|
|
||||||
Name[is]=Ferðavél
|
|
||||||
Name[it]=Portatile
|
|
||||||
Name[ja]=ラップトップ
|
|
||||||
Name[ko]=랩탑
|
|
||||||
Name[lv]=Laptops
|
|
||||||
Name[mk]=Лаптоп
|
|
||||||
Name[nl]=Schootcomputer
|
|
||||||
Name[no]=Bærbar
|
|
||||||
Name[no_NY]=Bærbar
|
|
||||||
Name[oc]=Portatil
|
|
||||||
Name[pt]=Portátil
|
|
||||||
Name[sl]=Prenosnik
|
|
||||||
Name[sv]=Bärbar dator
|
|
||||||
Name[tr]=Dizüstü
|
|
||||||
Name[uk]=Мобільний комп'ютер (лептоп)
|
|
||||||
Name[zh_CN.GB2312]=膝上计算机
|
|
||||||
Name[zh_TW.Big5]=膝上型電腦
|
|
||||||
X-KDE-Library=libkwinlaptop
|
|
|
@ -1,704 +0,0 @@
|
||||||
|
|
||||||
#include <kconfig.h> // up here to avoid X11 header conflict :P
|
|
||||||
#include "laptopclient.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 <kdrawutil.h>
|
|
||||||
#include <kglobal.h>
|
|
||||||
#include <kapp.h>
|
|
||||||
#include <qbitmap.h>
|
|
||||||
#include "../../workspace.h"
|
|
||||||
#include "../../options.h"
|
|
||||||
|
|
||||||
using namespace KWinInternal;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static unsigned char iconify_bits[] = {
|
|
||||||
0xff, 0xff, 0x00, 0xff, 0xff, 0x7e, 0x3c, 0x18};
|
|
||||||
|
|
||||||
static unsigned char close_bits[] = {
|
|
||||||
0x42, 0xe7, 0x7e, 0x3c, 0x3c, 0x7e, 0xe7, 0x42};
|
|
||||||
|
|
||||||
static unsigned char maximize_bits[] = {
|
|
||||||
0x18, 0x3c, 0x7e, 0xff, 0xff, 0x00, 0xff, 0xff };
|
|
||||||
|
|
||||||
static unsigned char minmax_bits[] = {
|
|
||||||
0x0c, 0x18, 0x33, 0x67, 0xcf, 0x9f, 0x3f, 0x3f};
|
|
||||||
|
|
||||||
static unsigned char question_bits[] = {
|
|
||||||
0x3c, 0x66, 0x60, 0x30, 0x18, 0x00, 0x18, 0x18};
|
|
||||||
|
|
||||||
static unsigned char unsticky_bits[] = {
|
|
||||||
0x3c, 0x42, 0x99, 0xbd, 0xbd, 0x99, 0x42, 0x3c};
|
|
||||||
|
|
||||||
static unsigned char sticky_bits[] = {
|
|
||||||
0x3c, 0x42, 0x81, 0x81, 0x81, 0x81, 0x42, 0x3c};
|
|
||||||
|
|
||||||
static QPixmap *titlePix=0;
|
|
||||||
static KPixmap *aUpperGradient=0;
|
|
||||||
static KPixmap *iUpperGradient=0;
|
|
||||||
// buttons active, inactive, up, down, and 2 sizes :P
|
|
||||||
static KPixmap *btnPix1=0;
|
|
||||||
static KPixmap *iBtnPix1=0;
|
|
||||||
static KPixmap *btnDownPix1=0;
|
|
||||||
static KPixmap *iBtnDownPix1=0;
|
|
||||||
static KPixmap *btnPix2=0;
|
|
||||||
static KPixmap *btnDownPix2=0;
|
|
||||||
static KPixmap *iBtnPix2=0;
|
|
||||||
static KPixmap *iBtnDownPix2=0;
|
|
||||||
static QColor btnForeground;
|
|
||||||
|
|
||||||
static bool pixmaps_created = false;
|
|
||||||
|
|
||||||
static int titleHeight = 14; // configurable title height not implemented yet
|
|
||||||
static int btnWidth1 = 17;
|
|
||||||
static int btnWidth2 = 27;
|
|
||||||
|
|
||||||
|
|
||||||
static void drawButtonFrame(KPixmap *pix, const QColorGroup &g, bool sunken)
|
|
||||||
{
|
|
||||||
QPainter p;
|
|
||||||
int w = pix->width();
|
|
||||||
int h = pix->height();
|
|
||||||
int x2 = w-1;
|
|
||||||
int y2 = h-1;
|
|
||||||
p.begin(pix);
|
|
||||||
|
|
||||||
if(sunken){
|
|
||||||
qDrawShadePanel(&p, 0, 0, w, h, g, true, 2);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
p.setPen(g.dark());
|
|
||||||
p.drawRect(0, 0, w-1, h-1);
|
|
||||||
p.setPen(g.light());
|
|
||||||
p.drawLine(x2, 0, x2, y2);
|
|
||||||
p.drawLine(0, y2, x2, y2);
|
|
||||||
p.drawLine(1, 1, x2-2, 1);
|
|
||||||
p.drawLine(1, 1, 1, y2-2);
|
|
||||||
p.end();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void create_pixmaps()
|
|
||||||
{
|
|
||||||
if(pixmaps_created)
|
|
||||||
return;
|
|
||||||
pixmaps_created = true;
|
|
||||||
|
|
||||||
// titlebar
|
|
||||||
QPainter p;
|
|
||||||
QPainter maskPainter;
|
|
||||||
int i, x, y;
|
|
||||||
titlePix = new QPixmap(33, 12);
|
|
||||||
QBitmap mask(33, 12);
|
|
||||||
mask.fill(Qt::color0);
|
|
||||||
|
|
||||||
p.begin(titlePix);
|
|
||||||
maskPainter.begin(&mask);
|
|
||||||
maskPainter.setPen(Qt::color1);
|
|
||||||
for(i=0, y=2; i < 3; ++i, y+=4){
|
|
||||||
for(x=1; x <= 33; x+=3){
|
|
||||||
p.setPen(options->color(Options::TitleBar, true).light(150));
|
|
||||||
p.drawPoint(x, y);
|
|
||||||
maskPainter.drawPoint(x, y);
|
|
||||||
p.setPen(options->color(Options::TitleBar, true).dark(150));
|
|
||||||
p.drawPoint(x+1, y+1);
|
|
||||||
maskPainter.drawPoint(x+1, y+1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
p.end();
|
|
||||||
maskPainter.end();
|
|
||||||
titlePix->setMask(mask);
|
|
||||||
|
|
||||||
if(QPixmap::defaultDepth() > 8){
|
|
||||||
aUpperGradient = new KPixmap;
|
|
||||||
aUpperGradient->resize(32, titleHeight+2);
|
|
||||||
iUpperGradient = new KPixmap;
|
|
||||||
iUpperGradient->resize(32, titleHeight+2);
|
|
||||||
QColor bgColor = options->color(Options::TitleBar, true);
|
|
||||||
KPixmapEffect::gradient(*aUpperGradient,
|
|
||||||
bgColor.light(120),
|
|
||||||
bgColor.dark(120),
|
|
||||||
KPixmapEffect::VerticalGradient);
|
|
||||||
bgColor = options->color(Options::TitleBar, false);
|
|
||||||
KPixmapEffect::gradient(*iUpperGradient,
|
|
||||||
bgColor.light(120),
|
|
||||||
bgColor.dark(120),
|
|
||||||
KPixmapEffect::VerticalGradient);
|
|
||||||
}
|
|
||||||
// buttons (active/inactive, sunken/unsunken, 2 sizes each)
|
|
||||||
QColorGroup g = options->colorGroup(Options::ButtonBg, true);
|
|
||||||
QColor c = g.background();
|
|
||||||
btnPix1 = new KPixmap;
|
|
||||||
btnPix1->resize(btnWidth1, titleHeight);
|
|
||||||
btnDownPix1 = new KPixmap;
|
|
||||||
btnDownPix1->resize(btnWidth1, titleHeight);
|
|
||||||
btnPix2 = new KPixmap;
|
|
||||||
btnPix2->resize(btnWidth2, titleHeight);
|
|
||||||
btnDownPix2 = new KPixmap;
|
|
||||||
btnDownPix2->resize(btnWidth2, titleHeight);
|
|
||||||
iBtnPix1 = new KPixmap;
|
|
||||||
iBtnPix1->resize(btnWidth1, titleHeight);
|
|
||||||
iBtnDownPix1 = new KPixmap;
|
|
||||||
iBtnDownPix1->resize(btnWidth1, titleHeight);
|
|
||||||
iBtnPix2 = new KPixmap;
|
|
||||||
iBtnPix2->resize(btnWidth2, titleHeight);
|
|
||||||
iBtnDownPix2 = new KPixmap;
|
|
||||||
iBtnDownPix2->resize(btnWidth2, titleHeight);
|
|
||||||
if(QPixmap::defaultDepth() > 8){
|
|
||||||
KPixmapEffect::gradient(*btnPix1, c.light(120), c.dark(130),
|
|
||||||
KPixmapEffect::DiagonalGradient);
|
|
||||||
KPixmapEffect::gradient(*btnDownPix1, c.dark(130), c.light(120),
|
|
||||||
KPixmapEffect::DiagonalGradient);
|
|
||||||
KPixmapEffect::gradient(*btnPix2, c.light(120), c.dark(130),
|
|
||||||
KPixmapEffect::DiagonalGradient);
|
|
||||||
KPixmapEffect::gradient(*btnDownPix2, c.dark(130), c.light(120),
|
|
||||||
KPixmapEffect::DiagonalGradient);
|
|
||||||
g = options->colorGroup(Options::ButtonBg, false);
|
|
||||||
c = g.background();
|
|
||||||
KPixmapEffect::gradient(*iBtnPix1, c.light(120), c.dark(130),
|
|
||||||
KPixmapEffect::DiagonalGradient);
|
|
||||||
KPixmapEffect::gradient(*iBtnDownPix1, c.dark(130), c.light(120),
|
|
||||||
KPixmapEffect::DiagonalGradient);
|
|
||||||
KPixmapEffect::gradient(*iBtnPix2, c.light(120), c.dark(130),
|
|
||||||
KPixmapEffect::DiagonalGradient);
|
|
||||||
KPixmapEffect::gradient(*iBtnDownPix2, c.dark(130), c.light(120),
|
|
||||||
KPixmapEffect::DiagonalGradient);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
btnPix1->fill(c.rgb());
|
|
||||||
btnDownPix1->fill(c.rgb());
|
|
||||||
btnPix2->fill(c.rgb());
|
|
||||||
btnDownPix2->fill(c.rgb());
|
|
||||||
g = options->colorGroup(Options::ButtonBg, false);
|
|
||||||
c = g.background();
|
|
||||||
iBtnPix1->fill(c.rgb());
|
|
||||||
iBtnDownPix1->fill(c.rgb());
|
|
||||||
iBtnPix2->fill(c.rgb());
|
|
||||||
iBtnDownPix2->fill(c.rgb());
|
|
||||||
}
|
|
||||||
g = options->colorGroup(Options::ButtonBg, true);
|
|
||||||
c = g.background();
|
|
||||||
drawButtonFrame(btnPix1, g, false);
|
|
||||||
drawButtonFrame(btnDownPix1, g, true);
|
|
||||||
drawButtonFrame(btnPix2, g, false);
|
|
||||||
drawButtonFrame(btnDownPix2, g, true);
|
|
||||||
g = options->colorGroup(Options::ButtonBg, false);
|
|
||||||
c = g.background();
|
|
||||||
drawButtonFrame(iBtnPix1, g, false);
|
|
||||||
drawButtonFrame(iBtnDownPix1, g, true);
|
|
||||||
drawButtonFrame(iBtnPix2, g, false);
|
|
||||||
drawButtonFrame(iBtnDownPix2, g, true);
|
|
||||||
|
|
||||||
if(qGray(options->color(Options::ButtonBg, true).rgb()) > 128)
|
|
||||||
btnForeground = Qt::black;
|
|
||||||
else
|
|
||||||
btnForeground = Qt::white;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void delete_pixmaps()
|
|
||||||
{
|
|
||||||
delete titlePix;
|
|
||||||
if(aUpperGradient){
|
|
||||||
delete aUpperGradient;
|
|
||||||
delete iUpperGradient;
|
|
||||||
delete btnPix1;
|
|
||||||
delete btnDownPix1;
|
|
||||||
delete iBtnPix1;
|
|
||||||
delete iBtnDownPix1;
|
|
||||||
delete btnPix2;
|
|
||||||
delete btnDownPix2;
|
|
||||||
delete iBtnPix2;
|
|
||||||
delete iBtnDownPix2;
|
|
||||||
}
|
|
||||||
pixmaps_created = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
LaptopClientButton::LaptopClientButton(int w, int h, Client *parent, const char *name,
|
|
||||||
const unsigned char *bitmap)
|
|
||||||
: QButton(parent, name)
|
|
||||||
{
|
|
||||||
client = parent;
|
|
||||||
defaultSize = QSize(w, h);
|
|
||||||
setFixedHeight(h);
|
|
||||||
resize(defaultSize);
|
|
||||||
if(bitmap)
|
|
||||||
setBitmap(bitmap);
|
|
||||||
//setBackgroundMode(QWidget::NoBackground);
|
|
||||||
}
|
|
||||||
|
|
||||||
QSize LaptopClientButton::sizeHint() const
|
|
||||||
{
|
|
||||||
return(defaultSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
void LaptopClientButton::reset()
|
|
||||||
{
|
|
||||||
repaint(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void LaptopClientButton::setBitmap(const unsigned char *bitmap)
|
|
||||||
{
|
|
||||||
deco = QBitmap(8, 8, bitmap, true);
|
|
||||||
deco.setMask(deco);
|
|
||||||
repaint();
|
|
||||||
}
|
|
||||||
|
|
||||||
void LaptopClientButton::drawButton(QPainter *p)
|
|
||||||
{
|
|
||||||
bool smallBtn = width() == btnWidth1;
|
|
||||||
if(btnPix1){
|
|
||||||
if(client->isActive()){
|
|
||||||
if(isDown())
|
|
||||||
p->drawPixmap(0, 0, smallBtn ? *btnDownPix1 : *btnDownPix2);
|
|
||||||
else
|
|
||||||
p->drawPixmap(0, 0, smallBtn ? *btnPix1 : *btnPix2);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
if(isDown())
|
|
||||||
p->drawPixmap(0, 0, smallBtn ? *iBtnDownPix1 : *iBtnDownPix2);
|
|
||||||
else
|
|
||||||
p->drawPixmap(0, 0, smallBtn ? *iBtnPix1 : *iBtnPix2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
QColorGroup g = options->colorGroup(Options::ButtonBg,
|
|
||||||
client->isActive());
|
|
||||||
int w = width();
|
|
||||||
int h = height();
|
|
||||||
p->fillRect(1, 1, w-2, h-2, isDown() ? g.mid() : g.button());
|
|
||||||
p->setPen(isDown() ? g.dark() : g.light());
|
|
||||||
p->drawLine(0, 0, w-1, 0);
|
|
||||||
p->drawLine(0, 0, 0, w-1);
|
|
||||||
p->setPen(isDown() ? g.light() : g.dark());
|
|
||||||
p->drawLine(w-1, 0, w-1, h-1);
|
|
||||||
p->drawLine(0, h-1, w-1, h-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
p->setPen(btnForeground);
|
|
||||||
int xOff = (width()-8)/2;
|
|
||||||
int yOff = (height()-8)/2;
|
|
||||||
p->drawPixmap(isDown() ? xOff+1: xOff, isDown() ? yOff+1 : yOff, deco);
|
|
||||||
}
|
|
||||||
|
|
||||||
void LaptopClient::slotReset()
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
for(i=0; i < 5; ++i){
|
|
||||||
if(button[i])
|
|
||||||
button[i]->reset();
|
|
||||||
}
|
|
||||||
repaint();
|
|
||||||
}
|
|
||||||
|
|
||||||
LaptopClient::LaptopClient( Workspace *ws, WId w, QWidget *parent,
|
|
||||||
const char *name )
|
|
||||||
: Client( ws, w, parent, name, WResizeNoErase | WNorthWestGravity )
|
|
||||||
{
|
|
||||||
lastButtonWidth = 0;
|
|
||||||
lastBufferWidth = 0;
|
|
||||||
|
|
||||||
connect(options, SIGNAL(resetClients()), this, SLOT(slotReset()));
|
|
||||||
bool help = providesContextHelp();
|
|
||||||
|
|
||||||
|
|
||||||
QGridLayout* g = new QGridLayout(this, 0, 0, 0);
|
|
||||||
g->setResizeMode(QLayout::FreeResize);
|
|
||||||
g->addRowSpacing(0, 3);
|
|
||||||
g->addRowSpacing(2, 1);
|
|
||||||
g->addWidget(windowWrapper(), 3, 1);
|
|
||||||
g->setRowStretch(3, 10);
|
|
||||||
g->addRowSpacing(4, 8); // bottom handles
|
|
||||||
g->addColSpacing(0, 4);
|
|
||||||
g->addColSpacing(2, 4);
|
|
||||||
|
|
||||||
int th = titleHeight;
|
|
||||||
if ( isTool() )
|
|
||||||
th -= 2;
|
|
||||||
|
|
||||||
button[BtnClose] = new LaptopClientButton(27, th, this, "close", close_bits);
|
|
||||||
button[BtnSticky] = new LaptopClientButton(17, th, this, "sticky");
|
|
||||||
if(isSticky())
|
|
||||||
button[BtnSticky]->setBitmap(unsticky_bits);
|
|
||||||
else
|
|
||||||
button[BtnSticky]->setBitmap(sticky_bits);
|
|
||||||
button[BtnIconify] = new LaptopClientButton(27, th, this, "iconify",
|
|
||||||
iconify_bits);
|
|
||||||
button[BtnMax] = new LaptopClientButton(27, th, this, "maximize",
|
|
||||||
maximize_bits);
|
|
||||||
if(help){
|
|
||||||
button[BtnHelp] = new LaptopClientButton(17, th, this, "help",
|
|
||||||
question_bits);
|
|
||||||
connect(button[BtnHelp], SIGNAL( clicked() ), this, ( SLOT( contextHelp() ) ) );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
button[BtnHelp] = NULL;
|
|
||||||
|
|
||||||
connect( button[BtnClose], SIGNAL( clicked() ), this, ( SLOT( closeWindow() ) ) );
|
|
||||||
connect( button[BtnSticky], SIGNAL( clicked() ), this, ( SLOT( toggleSticky() ) ) );
|
|
||||||
connect( button[BtnIconify], SIGNAL( clicked() ), this, ( SLOT( iconify() ) ) );
|
|
||||||
connect( button[BtnMax], SIGNAL( clicked() ), this, ( SLOT( slotMaximize() ) ) );
|
|
||||||
|
|
||||||
hb = new QHBoxLayout();
|
|
||||||
hb->setResizeMode(QLayout::FreeResize);
|
|
||||||
g->addLayout( hb, 1, 1 );
|
|
||||||
hb->addWidget( button[BtnClose]);
|
|
||||||
hb->addSpacing(1);
|
|
||||||
titlebar = new QSpacerItem(10, th, QSizePolicy::Expanding,
|
|
||||||
QSizePolicy::Minimum);
|
|
||||||
hb->addItem(titlebar);
|
|
||||||
hb->addSpacing(1);
|
|
||||||
if(help){
|
|
||||||
hb->addWidget( button[BtnHelp]);
|
|
||||||
}
|
|
||||||
hb->addWidget( button[BtnSticky]);
|
|
||||||
hb->addWidget( button[BtnIconify]);
|
|
||||||
hb->addWidget( button[BtnMax]);
|
|
||||||
|
|
||||||
if ( isTransient() || isTool() )
|
|
||||||
button[BtnSticky]->hide();
|
|
||||||
if ( !isMinimizable() )
|
|
||||||
button[BtnIconify]->hide();
|
|
||||||
if ( !isMaximizable() )
|
|
||||||
button[BtnMax]->hide();
|
|
||||||
|
|
||||||
hiddenItems = false;
|
|
||||||
bufferDirty = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void LaptopClient::slotMaximize()
|
|
||||||
{
|
|
||||||
if ( button[BtnMax]->last_button == MidButton )
|
|
||||||
maximize( MaximizeVertical );
|
|
||||||
else if ( button[BtnMax]->last_button == RightButton )
|
|
||||||
maximize( MaximizeHorizontal );
|
|
||||||
else
|
|
||||||
maximize();
|
|
||||||
}
|
|
||||||
|
|
||||||
void LaptopClient::resizeEvent( QResizeEvent* e)
|
|
||||||
{
|
|
||||||
Client::resizeEvent( e );
|
|
||||||
|
|
||||||
doShape();
|
|
||||||
calcHiddenButtons();
|
|
||||||
if ( isVisibleToTLW() ) {
|
|
||||||
int dx = 0;
|
|
||||||
int dy = 0;
|
|
||||||
if ( e->oldSize().width() != width() )
|
|
||||||
dx = 32 + QABS( e->oldSize().width() - width() );
|
|
||||||
if ( e->oldSize().height() != height() )
|
|
||||||
dy = 8 + QABS( e->oldSize().height() - height() );
|
|
||||||
if ( dy )
|
|
||||||
update( 0, height() - dy + 1, width(), dy );
|
|
||||||
if ( dx ) {
|
|
||||||
update( width() - dx + 1, 0, dx, height() );
|
|
||||||
update( QRect( QPoint(4,4), titlebar->geometry().bottomLeft() - QPoint(1,0) ) );
|
|
||||||
update( QRect( titlebar->geometry().topRight(), QPoint( width() - 4, titlebar->geometry().bottom() ) ) );
|
|
||||||
// titlebar needs no background
|
|
||||||
QApplication::postEvent( this, new QPaintEvent( titlebar->geometry(), FALSE ) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void LaptopClient::captionChange( const QString& )
|
|
||||||
{
|
|
||||||
bufferDirty = true;
|
|
||||||
repaint( titlebar->geometry(), false );
|
|
||||||
}
|
|
||||||
|
|
||||||
void LaptopClient::paintEvent( QPaintEvent* )
|
|
||||||
{
|
|
||||||
QPainter p(this);
|
|
||||||
QColorGroup g = options->colorGroup(Options::Frame, isActive());
|
|
||||||
|
|
||||||
QRect r(rect());
|
|
||||||
p.setPen(Qt::black);
|
|
||||||
p.drawRect(r);
|
|
||||||
// outer frame
|
|
||||||
p.setPen(g.light());
|
|
||||||
p.drawLine(r.x()+1, r.y()+1, r.right()-1, r.y()+1);
|
|
||||||
p.drawLine(r.x()+1, r.y()+1, r.x()+1, r.bottom()-1);
|
|
||||||
p.setPen(g.dark());
|
|
||||||
p.drawLine(r.right()-1, r.y()+1, r.right()-1, r.bottom()-1);
|
|
||||||
p.drawLine(r.x()+1, r.bottom()-1, r.right()-1, r.bottom()-1);
|
|
||||||
|
|
||||||
int th = titleHeight;
|
|
||||||
if ( isTool() )
|
|
||||||
th -= 2;
|
|
||||||
|
|
||||||
// inner rect
|
|
||||||
p.drawRect(r.x()+3, r.y()+th+3, r.width()-6,
|
|
||||||
r.height()-th-10);
|
|
||||||
// handles
|
|
||||||
if(r.width() > 44){
|
|
||||||
qDrawShadePanel(&p, r.x()+1, r.bottom()-6, 20,
|
|
||||||
6, g, false, 1, &g.brush(QColorGroup::Mid));
|
|
||||||
qDrawShadePanel(&p, r.x()+21, r.bottom()-6, r.width()-42, 6,
|
|
||||||
g, false, 1, isActive() ?
|
|
||||||
&g.brush(QColorGroup::Background) :
|
|
||||||
&g.brush(QColorGroup::Mid));
|
|
||||||
qDrawShadePanel(&p, r.right()-20, r.bottom()-6, 20, 6,
|
|
||||||
g, false, 1, &g.brush(QColorGroup::Mid));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
qDrawShadePanel(&p, r.x()+1, r.bottom()-6, r.width()-2, 6, g,
|
|
||||||
false, 1, isActive() ?
|
|
||||||
&g.brush(QColorGroup::Background) :
|
|
||||||
&g.brush(QColorGroup::Mid));
|
|
||||||
|
|
||||||
r = titlebar->geometry();
|
|
||||||
r.setRight(r.right()-1);
|
|
||||||
|
|
||||||
if(isActive()){
|
|
||||||
updateActiveBuffer();
|
|
||||||
p.drawPixmap(r.x(), r.y(), activeBuffer);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
if(iUpperGradient)
|
|
||||||
p.drawTiledPixmap(r.x(), r.y(), r.width(), r.height()-1,
|
|
||||||
*iUpperGradient);
|
|
||||||
else
|
|
||||||
p.fillRect(r.x(), r.y(), r.width(), r.height()-1,
|
|
||||||
options->color(Options::TitleBar, false));
|
|
||||||
|
|
||||||
p.setFont(options->font(false, isTool() ));
|
|
||||||
QFontMetrics fm(options->font(false));
|
|
||||||
g = options->colorGroup(Options::TitleBar, false);
|
|
||||||
if(iUpperGradient)
|
|
||||||
p.drawTiledPixmap(r.x()+((r.width()-fm.width(caption()))/2)-4,
|
|
||||||
r.y(), fm.width(caption())+8, r.height()-1,
|
|
||||||
*iUpperGradient);
|
|
||||||
else
|
|
||||||
p.fillRect(r.x()+((r.width()-fm.width(caption()))/2)-4, r.y(),
|
|
||||||
fm.width(caption())+8, r.height()-1,
|
|
||||||
g.brush(QColorGroup::Background));
|
|
||||||
p.setPen(g.mid());
|
|
||||||
p.drawLine(r.x(), r.y(), r.right(), r.y());
|
|
||||||
p.drawLine(r.x(), r.y(), r.x(), r.bottom());
|
|
||||||
p.setPen(g.button());
|
|
||||||
p.drawLine(r.right(), r.y(), r.right(), r.bottom());
|
|
||||||
p.drawLine(r.x(), r.bottom(), r.right(), r.bottom());
|
|
||||||
p.setPen(options->color(Options::Font, false));
|
|
||||||
p.drawText(r.x(), r.y(), r.width(), r.height()-1,
|
|
||||||
AlignCenter, caption() );
|
|
||||||
g = options->colorGroup(Options::Frame, true);
|
|
||||||
p.setPen(g.background());
|
|
||||||
p.drawPoint(r.x(), r.y());
|
|
||||||
p.drawPoint(r.right(), r.y());
|
|
||||||
p.drawLine(r.right()+1, r.y(), r.right()+1, r.bottom());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#define QCOORDARRLEN(x) sizeof(x)/(sizeof(QCOORD)*2)
|
|
||||||
|
|
||||||
void LaptopClient::doShape()
|
|
||||||
{
|
|
||||||
QRegion mask(QRect(0, 0, width(), height()));
|
|
||||||
mask -= QRect(0, 0, 1, 1);
|
|
||||||
mask -= QRect(width()-1, 0, 1, 1);
|
|
||||||
mask -= QRect(0, height()-1, 1, 1);
|
|
||||||
mask -= QRect(width()-1, height()-1, 1, 1);
|
|
||||||
|
|
||||||
setMask(mask);
|
|
||||||
}
|
|
||||||
|
|
||||||
void LaptopClient::showEvent(QShowEvent *ev)
|
|
||||||
{
|
|
||||||
Client::showEvent(ev);
|
|
||||||
doShape();
|
|
||||||
repaint();
|
|
||||||
}
|
|
||||||
|
|
||||||
void LaptopClient::windowWrapperShowEvent( QShowEvent* )
|
|
||||||
{
|
|
||||||
doShape();
|
|
||||||
}
|
|
||||||
|
|
||||||
void LaptopClient::mouseDoubleClickEvent( QMouseEvent * e )
|
|
||||||
{
|
|
||||||
if (titlebar->geometry().contains( e->pos() ) )
|
|
||||||
workspace()->performWindowOperation( this, options->operationTitlebarDblClick() );
|
|
||||||
workspace()->requestFocus( this );
|
|
||||||
}
|
|
||||||
|
|
||||||
void LaptopClient::stickyChange(bool on)
|
|
||||||
{
|
|
||||||
button[BtnSticky]->setBitmap(on ? unsticky_bits : sticky_bits);
|
|
||||||
}
|
|
||||||
|
|
||||||
void LaptopClient::maximizeChange(bool m)
|
|
||||||
{
|
|
||||||
button[BtnMax]->setBitmap(m ? minmax_bits : maximize_bits);
|
|
||||||
}
|
|
||||||
|
|
||||||
void LaptopClient::init()
|
|
||||||
{
|
|
||||||
//
|
|
||||||
}
|
|
||||||
|
|
||||||
void LaptopClient::activeChange(bool)
|
|
||||||
{
|
|
||||||
repaint(false);
|
|
||||||
int i;
|
|
||||||
for(i=0; i < 5; ++i){
|
|
||||||
if(button[i])
|
|
||||||
button[i]->reset();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void LaptopClient::calcHiddenButtons()
|
|
||||||
{
|
|
||||||
// order of hiding is help, sticky, maximize, minimize, close;
|
|
||||||
// buttons can have
|
|
||||||
int minWidth = 32 + btnWidth2*3 + (providesContextHelp() ? btnWidth1*2 :
|
|
||||||
btnWidth1);
|
|
||||||
|
|
||||||
if(lastButtonWidth > width()){ // shrinking
|
|
||||||
lastButtonWidth = width();
|
|
||||||
if(width() < minWidth){
|
|
||||||
hiddenItems = true;
|
|
||||||
int i;
|
|
||||||
for(i=0; i<5; ++i){
|
|
||||||
if(button[i]){
|
|
||||||
if( !button[i]->isHidden() ) {
|
|
||||||
button[i]->hide();
|
|
||||||
}
|
|
||||||
minWidth-=button[i]->sizeHint().width();
|
|
||||||
if(width() >= minWidth)
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(hiddenItems){ // expanding
|
|
||||||
lastButtonWidth = width();
|
|
||||||
int i;
|
|
||||||
int totalSize=32;
|
|
||||||
for(i=4; i>=0; --i){
|
|
||||||
if(button[i]){
|
|
||||||
if(button[i]->sizeHint().width() + totalSize <= width()){
|
|
||||||
totalSize+=button[i]->sizeHint().width();
|
|
||||||
if(button[i]->isHidden() &&
|
|
||||||
( !isTransient() || !isTransient() || i != BtnSticky ) &&
|
|
||||||
( isMinimizable() || i != BtnIconify ) &&
|
|
||||||
( isMaximizable() || ( i != BtnIconify && i != BtnSticky && i != BtnMax ) )
|
|
||||||
|
|
||||||
) {
|
|
||||||
button[i]->resize(button[i]->sizeHint());
|
|
||||||
button[i]->show();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// all items shown now
|
|
||||||
hiddenItems = false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
lastButtonWidth = width();
|
|
||||||
}
|
|
||||||
|
|
||||||
void LaptopClient::updateActiveBuffer( )
|
|
||||||
{
|
|
||||||
if( !bufferDirty && (lastBufferWidth == titlebar->geometry().width()))
|
|
||||||
return;
|
|
||||||
if ( titlebar->geometry().width() <= 0 || titlebar->geometry().height() <= 0 )
|
|
||||||
return;
|
|
||||||
lastBufferWidth = titlebar->geometry().width();
|
|
||||||
bufferDirty = false;
|
|
||||||
|
|
||||||
activeBuffer.resize(titlebar->geometry().width(),
|
|
||||||
titlebar->geometry().height());
|
|
||||||
QPainter p;
|
|
||||||
QRect r(0, 0, activeBuffer.width()-1, activeBuffer.height());
|
|
||||||
p.begin(&activeBuffer);
|
|
||||||
if(aUpperGradient){
|
|
||||||
p.drawTiledPixmap(r, *aUpperGradient);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
p.fillRect(r, options->color(Options::TitleBar, true));
|
|
||||||
}
|
|
||||||
if(titlePix)
|
|
||||||
p.drawTiledPixmap(r, *titlePix);
|
|
||||||
|
|
||||||
p.setFont(options->font(true, isTool() ));
|
|
||||||
QFontMetrics fm(options->font(true));
|
|
||||||
QColorGroup g = options->colorGroup(Options::TitleBar, true);
|
|
||||||
if(aUpperGradient)
|
|
||||||
p.drawTiledPixmap(r.x()+((r.width()-fm.width(caption()))/2)-4,
|
|
||||||
r.y(), fm.width(caption())+8, r.height()-1,
|
|
||||||
*aUpperGradient);
|
|
||||||
else
|
|
||||||
p.fillRect(r.x()+((r.width()-fm.width(caption()))/2)-4, 0,
|
|
||||||
fm.width(caption())+8, r.height(),
|
|
||||||
g.brush(QColorGroup::Background));
|
|
||||||
p.setPen(g.mid());
|
|
||||||
p.drawLine(r.x(), r.y(), r.right(), r.y());
|
|
||||||
p.drawLine(r.x(), r.y(), r.x(), r.bottom());
|
|
||||||
p.setPen(g.button());
|
|
||||||
p.drawLine(r.right(), r.y(), r.right(), r.bottom());
|
|
||||||
p.drawLine(r.x(), r.bottom(), r.right(), r.bottom());
|
|
||||||
p.setPen(options->color(Options::Font, true));
|
|
||||||
p.drawText(r.x(), r.y(), r.width(), r.height()-1,
|
|
||||||
AlignCenter, caption() );
|
|
||||||
g = options->colorGroup(Options::Frame, true);
|
|
||||||
p.setPen(g.background());
|
|
||||||
p.drawPoint(r.x(), r.y());
|
|
||||||
p.drawPoint(r.right(), r.y());
|
|
||||||
p.drawLine(r.right()+1, r.y(), r.right()+1, r.bottom());
|
|
||||||
p.end();
|
|
||||||
}
|
|
||||||
|
|
||||||
Client::MousePosition
|
|
||||||
LaptopClient::mousePosition( const QPoint& p ) const
|
|
||||||
{
|
|
||||||
MousePosition m = Nowhere;
|
|
||||||
|
|
||||||
if (p.y() < (height() - 7))
|
|
||||||
m = Client::mousePosition(p);
|
|
||||||
|
|
||||||
else {
|
|
||||||
if (p.x() >= (width() - 20))
|
|
||||||
m = BottomRight;
|
|
||||||
else if (p.x() <= 20)
|
|
||||||
m = BottomLeft;
|
|
||||||
else
|
|
||||||
m = Bottom;
|
|
||||||
}
|
|
||||||
|
|
||||||
return m;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C"
|
|
||||||
{
|
|
||||||
Client *allocate(Workspace *ws, WId w, int)
|
|
||||||
{
|
|
||||||
return(new LaptopClient(ws, w));
|
|
||||||
}
|
|
||||||
void init()
|
|
||||||
{
|
|
||||||
create_pixmaps();
|
|
||||||
}
|
|
||||||
void reset()
|
|
||||||
{
|
|
||||||
delete_pixmaps();
|
|
||||||
create_pixmaps();
|
|
||||||
}
|
|
||||||
void deinit()
|
|
||||||
{
|
|
||||||
delete_pixmaps();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#include "laptopclient.moc"
|
|
|
@ -1,86 +0,0 @@
|
||||||
#ifndef __KDECLIENT_H
|
|
||||||
#define __KDECLIENT_H
|
|
||||||
|
|
||||||
#include <qbutton.h>
|
|
||||||
#include <qbitmap.h>
|
|
||||||
#include <kpixmap.h>
|
|
||||||
#include "../../client.h"
|
|
||||||
class QLabel;
|
|
||||||
class QSpacerItem;
|
|
||||||
class QHBoxLayout;
|
|
||||||
|
|
||||||
namespace KWinInternal {
|
|
||||||
|
|
||||||
// get rid of autohide :P
|
|
||||||
class LaptopClientButton : public QButton
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
LaptopClientButton(int w, int h, Client *parent=0, const char *name=0,
|
|
||||||
const unsigned char *bitmap=NULL);
|
|
||||||
void setBitmap(const unsigned char *bitmap);
|
|
||||||
void reset();
|
|
||||||
QSize sizeHint() const;
|
|
||||||
int last_button;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
void mousePressEvent( QMouseEvent* e )
|
|
||||||
{
|
|
||||||
last_button = e->button();
|
|
||||||
QMouseEvent me ( e->type(), e->pos(), e->globalPos(), LeftButton, e->state() );
|
|
||||||
QButton::mousePressEvent( &me );
|
|
||||||
}
|
|
||||||
void mouseReleaseEvent( QMouseEvent* e )
|
|
||||||
{
|
|
||||||
last_button = e->button();
|
|
||||||
QMouseEvent me ( e->type(), e->pos(), e->globalPos(), LeftButton, e->state() );
|
|
||||||
QButton::mouseReleaseEvent( &me );
|
|
||||||
}
|
|
||||||
virtual void drawButton(QPainter *p);
|
|
||||||
void drawButtonLabel(QPainter *){;}
|
|
||||||
QSize defaultSize;
|
|
||||||
QBitmap deco;
|
|
||||||
Client *client;
|
|
||||||
};
|
|
||||||
|
|
||||||
class LaptopClient : public KWinInternal::Client
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
enum Buttons{BtnHelp=0, BtnSticky, BtnMax, BtnIconify, BtnClose};
|
|
||||||
LaptopClient( Workspace *ws, WId w, QWidget *parent=0, const char *name=0 );
|
|
||||||
~LaptopClient(){;}
|
|
||||||
protected:
|
|
||||||
void resizeEvent( QResizeEvent* );
|
|
||||||
void paintEvent( QPaintEvent* );
|
|
||||||
void showEvent( QShowEvent* );
|
|
||||||
void windowWrapperShowEvent( QShowEvent* );
|
|
||||||
void mouseDoubleClickEvent( QMouseEvent * );
|
|
||||||
void init();
|
|
||||||
void captionChange( const QString& name );
|
|
||||||
void stickyChange(bool on);
|
|
||||||
void maximizeChange(bool m);
|
|
||||||
void doShape();
|
|
||||||
void activeChange(bool);
|
|
||||||
|
|
||||||
void calcHiddenButtons();
|
|
||||||
void updateActiveBuffer();
|
|
||||||
|
|
||||||
MousePosition mousePosition(const QPoint &) const;
|
|
||||||
|
|
||||||
protected slots:
|
|
||||||
void slotReset();
|
|
||||||
void slotMaximize();
|
|
||||||
private:
|
|
||||||
LaptopClientButton* button[5];
|
|
||||||
int lastButtonWidth;
|
|
||||||
QSpacerItem* titlebar;
|
|
||||||
bool hiddenItems;
|
|
||||||
QHBoxLayout *hb;
|
|
||||||
KPixmap activeBuffer;
|
|
||||||
bool bufferDirty;
|
|
||||||
int lastBufferWidth;
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,20 +0,0 @@
|
||||||
# $Id$
|
|
||||||
|
|
||||||
INCLUDES = $(all_includes)
|
|
||||||
|
|
||||||
SUBDIRS = config
|
|
||||||
|
|
||||||
kde_module_LTLIBRARIES = libkwinmodernsys.la
|
|
||||||
|
|
||||||
libkwinmodernsys_la_SOURCES = modernsys.cpp
|
|
||||||
libkwinmodernsys_la_LIBADD = ../../kwin.la
|
|
||||||
libkwinmodernsys_la_LDFLAGS = $(all_libraries) $(KDE_PLUGIN)
|
|
||||||
|
|
||||||
METASOURCES = AUTO
|
|
||||||
noinst_HEADERS = modernsys.h
|
|
||||||
|
|
||||||
lnkdir = $(kde_datadir)/kwin/
|
|
||||||
lnk_DATA = modernsystem.desktop
|
|
||||||
|
|
||||||
EXTRA_DIST = $(lnk_DATA)
|
|
||||||
|
|
|
@ -1,93 +0,0 @@
|
||||||
/* XPM */
|
|
||||||
static const char * btnhighcolor_xpm[] = {
|
|
||||||
"14 15 75 1",
|
|
||||||
" c None",
|
|
||||||
". c #6E6E6E",
|
|
||||||
"+ c #757575",
|
|
||||||
"@ c #878787",
|
|
||||||
"# c #7D7D7D",
|
|
||||||
"$ c #9E9E9E",
|
|
||||||
"% c #B9B9B9",
|
|
||||||
"& c #C6C6C6",
|
|
||||||
"* c #BABABA",
|
|
||||||
"= c #A5A5A5",
|
|
||||||
"- c #7F7F7F",
|
|
||||||
"; c #848484",
|
|
||||||
"> c #A7A7A7",
|
|
||||||
", c #BFBFBF",
|
|
||||||
"' c #D1D1D1",
|
|
||||||
") c #D7D7D7",
|
|
||||||
"! c #DADADA",
|
|
||||||
"~ c #CBCBCB",
|
|
||||||
"{ c #ABABAB",
|
|
||||||
"] c #B3B3B3",
|
|
||||||
"^ c #C2C2C2",
|
|
||||||
"/ c #CACACA",
|
|
||||||
"( c #C9C9C9",
|
|
||||||
"_ c #B6B6B6",
|
|
||||||
": c #9A9A9A",
|
|
||||||
"< c #999999",
|
|
||||||
"[ c #B0B0B0",
|
|
||||||
"} c #C4C4C4",
|
|
||||||
"| c #C3C3C3",
|
|
||||||
"1 c #C0C0C0",
|
|
||||||
"2 c #AEAEAE",
|
|
||||||
"3 c #969696",
|
|
||||||
"4 c #C1C1C1",
|
|
||||||
"5 c #CCCCCC",
|
|
||||||
"6 c #C5C5C5",
|
|
||||||
"7 c #BEBEBE",
|
|
||||||
"8 c #AAAAAA",
|
|
||||||
"9 c #CECECE",
|
|
||||||
"0 c #D4D4D4",
|
|
||||||
"a c #DBDBDB",
|
|
||||||
"b c #DEDEDE",
|
|
||||||
"c c #D5D5D5",
|
|
||||||
"d c #D3D3D3",
|
|
||||||
"e c #BCBCBC",
|
|
||||||
"f c #CDCDCD",
|
|
||||||
"g c #E0E0E0",
|
|
||||||
"h c #E4E4E4",
|
|
||||||
"i c #E8E8E8",
|
|
||||||
"j c #EBEBEB",
|
|
||||||
"k c #E9E9E9",
|
|
||||||
"l c #E6E6E6",
|
|
||||||
"m c #DDDDDD",
|
|
||||||
"n c #E1E1E1",
|
|
||||||
"o c #EDEDED",
|
|
||||||
"p c #F1F1F1",
|
|
||||||
"q c #F5F5F5",
|
|
||||||
"r c #F8F8F8",
|
|
||||||
"s c #F6F6F6",
|
|
||||||
"t c #F3F3F3",
|
|
||||||
"u c #EEEEEE",
|
|
||||||
"v c #E5E5E5",
|
|
||||||
"w c #DCDCDC",
|
|
||||||
"x c #B7B7B7",
|
|
||||||
"y c #E2E2E2",
|
|
||||||
"z c #FDFDFD",
|
|
||||||
"A c #FFFFFF",
|
|
||||||
"B c #FCFCFC",
|
|
||||||
"C c #F7F7F7",
|
|
||||||
"D c #B5B5B5",
|
|
||||||
"E c #F2F2F2",
|
|
||||||
"F c #FAFAFA",
|
|
||||||
"G c #9B9B9B",
|
|
||||||
"H c #FBFBFB",
|
|
||||||
"I c #A9A9A9",
|
|
||||||
"J c #747474",
|
|
||||||
" .... ",
|
|
||||||
" ..+@@+.. ",
|
|
||||||
" .#$%&&*=-. ",
|
|
||||||
" .;>,')!)~{#. ",
|
|
||||||
" .$]^///(&_:. ",
|
|
||||||
".<[*^}||11*23.",
|
|
||||||
".[4&5555~(678.",
|
|
||||||
".,90!aba)cd~e.",
|
|
||||||
".faghijklhm06.",
|
|
||||||
".'nopqrstuvw/.",
|
|
||||||
".xyprzAzBCunD.",
|
|
||||||
" .'EzAAAAFpf. ",
|
|
||||||
" .GcHAAAAF0<. ",
|
|
||||||
" ..I5kk5I.. ",
|
|
||||||
" J..... "};
|
|
|
@ -1,42 +0,0 @@
|
||||||
/* Image bits processed by KPixmap2Bitmaps */
|
|
||||||
|
|
||||||
#define lowcolor_mask_width 14
|
|
||||||
#define lowcolor_mask_height 15
|
|
||||||
static unsigned char lowcolor_mask_bits[] = {
|
|
||||||
0xf0,0x03,0xf8,0x07,0xfc,0xcf,0xfe,0x1f,0xfe,0x1f,0xff,0xff,0xff,0xff,0xff,
|
|
||||||
0x3f,0xff,0x3f,0xff,0xbf,0xfe,0xdf,0xfe,0x9f,0xfc,0x0f,0xf8,0x07,0xf0,0x03,
|
|
||||||
0x00,0x40,0x80,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x7c,0xfe,0x87,0x40,0x00,
|
|
||||||
0x00,0x64,0x00,0x20,0x00,0x64,0x00,0x86,0xfe,0x87,0x40,0x00,0x00,0x65,0x00 };
|
|
||||||
|
|
||||||
#define lowcolor_6a696a_width 14
|
|
||||||
#define lowcolor_6a696a_height 15
|
|
||||||
static unsigned char lowcolor_6a696a_bits[] = {
|
|
||||||
0xf0,0x03,0x18,0x06,0x04,0xcc,0x06,0x18,0x02,0x10,0x00,0xc0,0x00,0xc0,0x00,
|
|
||||||
0x00,0x00,0x00,0x00,0xc0,0x00,0xc0,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
|
|
||||||
0x00,0x40,0x80,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,
|
|
||||||
0x00,0x00,0x00,0x80,0x24,0x0e,0x08,0x61,0x00,0x00,0x00,0xf0,0xd9,0x0c,0x08 };
|
|
||||||
|
|
||||||
#define lowcolor_949194_width 14
|
|
||||||
#define lowcolor_949194_height 15
|
|
||||||
static unsigned char lowcolor_949194_bits[] = {
|
|
||||||
0x00,0x40,0xe0,0x01,0x08,0x02,0x00,0x04,0x04,0x08,0x07,0x78,0x03,0xf0,0x01,
|
|
||||||
0xe0,0x01,0x60,0x01,0x20,0x00,0xc0,0x02,0x90,0x04,0x08,0x08,0x04,0xf0,0x03,
|
|
||||||
0x00,0x40,0x80,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0xc8,0x51,0x0c,0x08,0x0e,
|
|
||||||
0x01,0x00,0x00,0x37,0x00,0x00,0x00,0x58,0x5f,0x49,0x6d,0x61,0x67,0x65,0x54 };
|
|
||||||
|
|
||||||
#define lowcolor_b4b6b4_width 14
|
|
||||||
#define lowcolor_b4b6b4_height 15
|
|
||||||
static unsigned char lowcolor_b4b6b4_bits[] = {
|
|
||||||
0x00,0x40,0x00,0x00,0x10,0x00,0x08,0x02,0x18,0x06,0xb8,0x47,0x0c,0xce,0x0e,
|
|
||||||
0xd8,0x06,0x58,0x02,0x10,0x02,0xd0,0x00,0x80,0x00,0x00,0x10,0x02,0x00,0x00,
|
|
||||||
0x00,0x40,0x80,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,
|
|
||||||
0x00,0x08,0x00,0x02,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x38,0x5b,0x0c,0x08 };
|
|
||||||
|
|
||||||
#define lowcolor_e6e6e6_width 14
|
|
||||||
#define lowcolor_e6e6e6_height 15
|
|
||||||
static unsigned char lowcolor_e6e6e6_bits[] = {
|
|
||||||
0x00,0x40,0x00,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0x00,0x40,0x00,0xc0,0x00,
|
|
||||||
0xc0,0x00,0x40,0xe0,0xc0,0xe0,0xc1,0xe0,0x81,0xf0,0x03,0xc0,0x00,0x00,0x00,
|
|
||||||
0x00,0x40,0x80,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x08,0x19,0x0d,0x08,0x00,
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00 };
|
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
# $Id$
|
|
||||||
|
|
||||||
INCLUDES = $(all_includes)
|
|
||||||
|
|
||||||
kde_module_LTLIBRARIES = libkwinmodernsys_config.la
|
|
||||||
|
|
||||||
libkwinmodernsys_config_la_SOURCES = config.cpp
|
|
||||||
libkwinmodernsys_config_la_LDFLAGS = $(all_libraries) $(KDE_PLUGIN)
|
|
||||||
libkwinmodernsys_config_la_LIBADD = $(LIB_KDEUI)
|
|
||||||
|
|
||||||
METASOURCES = AUTO
|
|
||||||
noinst_HEADERS = config.h
|
|
||||||
|
|
||||||
lnkdir = $(kde_datadir)/kwin/
|
|
||||||
|
|
|
@ -1,77 +0,0 @@
|
||||||
// $Id$
|
|
||||||
// Melchior FRANZ <a8603365@unet.univie.ac.at> -- 2001-04-22
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
#include <kconfig.h>
|
|
||||||
#include <klocale.h>
|
|
||||||
#include <qwhatsthis.h>
|
|
||||||
|
|
||||||
|
|
||||||
extern "C"
|
|
||||||
{
|
|
||||||
QObject* allocate_config( KConfig* conf, QWidget* parent )
|
|
||||||
{
|
|
||||||
return(new ModernSysConfig(conf, parent));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// 'conf' is a pointer to the kwindecoration modules open kwin config,
|
|
||||||
// and is by default set to the "Style" group.
|
|
||||||
//
|
|
||||||
// 'parent' is the parent of the QObject, which is a VBox inside the
|
|
||||||
// Configure tab in kwindecoration
|
|
||||||
|
|
||||||
ModernSysConfig::ModernSysConfig(KConfig* conf, QWidget* parent) : QObject(parent)
|
|
||||||
{
|
|
||||||
clientrc = new KConfig("kwinmodernsysrc");
|
|
||||||
gb = new QGroupBox(1, Qt::Horizontal, i18n("Decoration Settings"), parent);
|
|
||||||
cbShowHandle = new QCheckBox(i18n("&Show resize handle"), gb);
|
|
||||||
QWhatsThis::add(cbShowHandle, i18n("When selected, all windows are drawn with a resize "
|
|
||||||
"handle at the lower right corner."));
|
|
||||||
connect(cbShowHandle, SIGNAL(clicked()), this, SLOT(slotSelectionChanged()));
|
|
||||||
load(conf);
|
|
||||||
gb->show();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
ModernSysConfig::~ModernSysConfig()
|
|
||||||
{
|
|
||||||
delete cbShowHandle;
|
|
||||||
delete gb;
|
|
||||||
delete clientrc;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void ModernSysConfig::slotSelectionChanged()
|
|
||||||
{
|
|
||||||
emit changed();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void ModernSysConfig::load(KConfig* /*conf*/)
|
|
||||||
{
|
|
||||||
clientrc->setGroup("General");
|
|
||||||
bool i = clientrc->readBoolEntry("ShowHandle", true );
|
|
||||||
cbShowHandle->setChecked(i);
|
|
||||||
handle_width = clientrc->readUnsignedNumEntry("HandleWidth", 6);
|
|
||||||
handle_size = clientrc->readUnsignedNumEntry("HandleSize", 30);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void ModernSysConfig::save(KConfig* /*conf*/)
|
|
||||||
{
|
|
||||||
clientrc->setGroup("General");
|
|
||||||
clientrc->writeEntry("ShowHandle", cbShowHandle->isChecked());
|
|
||||||
clientrc->writeEntry("HandleWidth", handle_width);
|
|
||||||
clientrc->writeEntry("HandleSize", handle_size);
|
|
||||||
clientrc->sync();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void ModernSysConfig::defaults()
|
|
||||||
{
|
|
||||||
cbShowHandle->setChecked(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
#include "config.moc"
|
|
|
@ -1,38 +0,0 @@
|
||||||
// $Id$
|
|
||||||
#ifndef __KDE_MODSYSTEMCONFIG_H
|
|
||||||
#define __KDE_MODSYSTEMCONFIG_H
|
|
||||||
|
|
||||||
#include <qcheckbox.h>
|
|
||||||
#include <qgroupbox.h>
|
|
||||||
#include <kconfig.h>
|
|
||||||
|
|
||||||
class ModernSysConfig : public QObject
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
ModernSysConfig( KConfig* conf, QWidget* parent );
|
|
||||||
~ModernSysConfig();
|
|
||||||
|
|
||||||
// These public signals/slots work similar to KCM modules
|
|
||||||
signals:
|
|
||||||
void changed();
|
|
||||||
|
|
||||||
public slots:
|
|
||||||
void load( KConfig* conf );
|
|
||||||
void save( KConfig* conf );
|
|
||||||
void defaults();
|
|
||||||
|
|
||||||
protected slots:
|
|
||||||
void slotSelectionChanged(); // Internal use
|
|
||||||
|
|
||||||
private:
|
|
||||||
KConfig *clientrc;
|
|
||||||
QGroupBox *gb;
|
|
||||||
QCheckBox *cbShowHandle;
|
|
||||||
unsigned handle_width;
|
|
||||||
unsigned handle_size;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,646 +0,0 @@
|
||||||
// $Id$
|
|
||||||
// Daniel M. DULEY <mosfet@kde.org> original work
|
|
||||||
// Melchior FRANZ <a8603365@unet.univie.ac.at> configuration options
|
|
||||||
|
|
||||||
#include <kconfig.h>
|
|
||||||
#include <kglobal.h>
|
|
||||||
#include <qlayout.h>
|
|
||||||
#include <qdrawutil.h>
|
|
||||||
#include <kpixmapeffect.h>
|
|
||||||
#include <kdrawutil.h>
|
|
||||||
#include <qbitmap.h>
|
|
||||||
#include "../../workspace.h"
|
|
||||||
#include "../../options.h"
|
|
||||||
#include "modernsys.h"
|
|
||||||
|
|
||||||
#include "buttondata.h"
|
|
||||||
#include "btnhighcolor.h"
|
|
||||||
|
|
||||||
using namespace KWinInternal;
|
|
||||||
|
|
||||||
|
|
||||||
static unsigned char iconify_bits[] = {
|
|
||||||
0x00, 0x00, 0xff, 0xff, 0x7e, 0x3c, 0x18, 0x00};
|
|
||||||
|
|
||||||
static unsigned char close_bits[] = {
|
|
||||||
0x00, 0x66, 0x7e, 0x3c, 0x3c, 0x7e, 0x66, 0x00};
|
|
||||||
|
|
||||||
static unsigned char maximize_bits[] = {
|
|
||||||
0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x00, 0x00};
|
|
||||||
|
|
||||||
static unsigned char minmax_bits[] = {
|
|
||||||
0x0c, 0x18, 0x33, 0x67, 0xcf, 0x9f, 0x3f, 0x3f};
|
|
||||||
|
|
||||||
static unsigned char unsticky_bits[] = {
|
|
||||||
0x3c, 0x42, 0x99, 0xbd, 0xbd, 0x99, 0x42, 0x3c};
|
|
||||||
|
|
||||||
static unsigned char sticky_bits[] = {
|
|
||||||
0x3c, 0x42, 0x81, 0x81, 0x81, 0x81, 0x42, 0x3c};
|
|
||||||
|
|
||||||
static unsigned char question_bits[] = {
|
|
||||||
0x3c, 0x66, 0x60, 0x30, 0x18, 0x00, 0x18, 0x18};
|
|
||||||
|
|
||||||
static unsigned char btnhighcolor_mask_bits[] = {
|
|
||||||
0xe0,0x41,0xf8,0x07,0xfc,0x0f,0xfe,0xdf,0xfe,0x1f,0xff,0x3f,0xff,0xff,0xff,
|
|
||||||
0x3f,0xff,0x3f,0xff,0xff,0xff,0xff,0xfe,0x9f,0xfe,0x1f,0xfc,0x0f,0xf0,0x03,
|
|
||||||
0x00,0x40,0x80,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x20,0x99,0x0f,0x08,0xc4,
|
|
||||||
0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x58,0x5f,0x43,0x68,0x61,0x6e,0x67,0x65 };
|
|
||||||
|
|
||||||
static KPixmap *aUpperGradient=0;
|
|
||||||
static KPixmap *iUpperGradient=0;
|
|
||||||
static QPixmap *buttonPix=0;
|
|
||||||
static QPixmap *buttonPixDown=0;
|
|
||||||
static QPixmap *iButtonPix=0;
|
|
||||||
static QPixmap *iButtonPixDown=0;
|
|
||||||
|
|
||||||
static QColor *buttonFg;
|
|
||||||
static bool pixmaps_created = false;
|
|
||||||
|
|
||||||
static QBitmap *lcDark1;
|
|
||||||
static QBitmap *lcDark2;
|
|
||||||
static QBitmap *lcDark3;
|
|
||||||
static QBitmap *lcLight1;
|
|
||||||
static QImage *btnSource;
|
|
||||||
|
|
||||||
static QString *button_pattern = NULL;
|
|
||||||
static bool show_handle;
|
|
||||||
static int handle_size;
|
|
||||||
static int handle_width;
|
|
||||||
static bool config_changed;
|
|
||||||
|
|
||||||
static void make_button_fx(const QColorGroup &g, QPixmap *pix, bool light=false)
|
|
||||||
{
|
|
||||||
pix->fill(g.background());
|
|
||||||
QPainter p(pix);
|
|
||||||
|
|
||||||
if(QPixmap::defaultDepth() > 8){
|
|
||||||
int i, destH, destS, destV, srcH, srcS, srcV;
|
|
||||||
QColor btnColor = g.background();
|
|
||||||
|
|
||||||
if(btnSource->depth() < 32)
|
|
||||||
*btnSource = btnSource->convertDepth(32);
|
|
||||||
if(light)
|
|
||||||
btnColor = btnColor.light(120);
|
|
||||||
btnColor.hsv(&destH, &destS, &destV);
|
|
||||||
QImage btnDest(14, 15, 32);
|
|
||||||
|
|
||||||
unsigned int *srcData = (unsigned int *)btnSource->bits();
|
|
||||||
unsigned int *destData = (unsigned int *)btnDest.bits();
|
|
||||||
QColor srcColor;
|
|
||||||
for(i=0; i < btnSource->width()*btnSource->height(); ++i){
|
|
||||||
srcColor.setRgb(srcData[i]);
|
|
||||||
srcColor.hsv(&srcH, &srcS, &srcV);
|
|
||||||
srcColor.setHsv(destH, destS, srcV);
|
|
||||||
destData[i] = srcColor.rgb();
|
|
||||||
}
|
|
||||||
pix->convertFromImage(btnDest);
|
|
||||||
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
if(!lcDark1->mask()){
|
|
||||||
lcDark1->setMask(*lcDark1);
|
|
||||||
lcDark2->setMask(*lcDark2);
|
|
||||||
lcDark3->setMask(*lcDark3);
|
|
||||||
lcLight1->setMask(*lcLight1);
|
|
||||||
}
|
|
||||||
p.setPen(g.dark());
|
|
||||||
p.drawPixmap(0, 0, *lcDark2);
|
|
||||||
p.drawPixmap(0, 0, *lcDark1);
|
|
||||||
p.setPen(g.mid());
|
|
||||||
p.drawPixmap(0, 0, *lcDark3);
|
|
||||||
p.setPen(g.light());
|
|
||||||
p.drawPixmap(0, 0, *lcLight1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void create_pixmaps()
|
|
||||||
{
|
|
||||||
if(pixmaps_created)
|
|
||||||
return;
|
|
||||||
pixmaps_created = true;
|
|
||||||
|
|
||||||
lcDark1 = new QBitmap(14, 15, lowcolor_6a696a_bits, true);
|
|
||||||
lcDark2 = new QBitmap(14, 15, lowcolor_949194_bits, true);
|
|
||||||
lcDark3 = new QBitmap(14, 15, lowcolor_b4b6b4_bits, true);
|
|
||||||
lcLight1 = new QBitmap(14, 15, lowcolor_e6e6e6_bits, true);
|
|
||||||
btnSource = new QImage(btnhighcolor_xpm);
|
|
||||||
|
|
||||||
if(QPixmap::defaultDepth() > 8){
|
|
||||||
aUpperGradient = new KPixmap;
|
|
||||||
aUpperGradient->resize(32, 18);
|
|
||||||
iUpperGradient = new KPixmap;
|
|
||||||
iUpperGradient->resize(32, 18);
|
|
||||||
KPixmapEffect::gradient(*aUpperGradient,
|
|
||||||
options->color(Options::TitleBar, true).light(130),
|
|
||||||
options->color(Options::TitleBlend, true),
|
|
||||||
KPixmapEffect::VerticalGradient);
|
|
||||||
KPixmapEffect::gradient(*iUpperGradient,
|
|
||||||
options->color(Options::TitleBar, false).light(130),
|
|
||||||
options->color(Options::TitleBlend, false),
|
|
||||||
KPixmapEffect::VerticalGradient);
|
|
||||||
}
|
|
||||||
// buttons
|
|
||||||
QColorGroup btnColor(options->colorGroup(Options::ButtonBg, true));
|
|
||||||
buttonPix = new QPixmap(14, 15);
|
|
||||||
make_button_fx(btnColor, buttonPix);
|
|
||||||
buttonPixDown = new QPixmap(14, 15);
|
|
||||||
make_button_fx(btnColor, buttonPixDown, true);
|
|
||||||
|
|
||||||
btnColor = options->colorGroup(Options::ButtonBg, false);
|
|
||||||
iButtonPix = new QPixmap(14, 15);
|
|
||||||
make_button_fx(btnColor, iButtonPix);
|
|
||||||
iButtonPixDown = new QPixmap(14, 15);
|
|
||||||
make_button_fx(btnColor, iButtonPixDown, true);
|
|
||||||
|
|
||||||
|
|
||||||
if(qGray(btnColor.background().rgb()) < 150)
|
|
||||||
buttonFg = new QColor(Qt::white);
|
|
||||||
else
|
|
||||||
buttonFg = new QColor(Qt::black);
|
|
||||||
|
|
||||||
delete lcDark1;
|
|
||||||
delete lcDark2;
|
|
||||||
delete lcDark3;
|
|
||||||
delete lcLight1;
|
|
||||||
delete btnSource;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void delete_pixmaps()
|
|
||||||
{
|
|
||||||
if(aUpperGradient){
|
|
||||||
delete aUpperGradient;
|
|
||||||
delete iUpperGradient;
|
|
||||||
}
|
|
||||||
delete buttonPix;
|
|
||||||
delete buttonPixDown;
|
|
||||||
delete iButtonPix;
|
|
||||||
delete iButtonPixDown;
|
|
||||||
|
|
||||||
delete buttonFg;
|
|
||||||
|
|
||||||
pixmaps_created = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool read_config()
|
|
||||||
{
|
|
||||||
bool showh;
|
|
||||||
int hsize, hwidth;
|
|
||||||
QString bpatt;
|
|
||||||
|
|
||||||
KConfig c("kwinmodernsysrc");
|
|
||||||
c.setGroup("General");
|
|
||||||
showh = c.readBoolEntry("ShowHandle", true);
|
|
||||||
|
|
||||||
hwidth = c.readUnsignedNumEntry("HandleWidth", 6);
|
|
||||||
hsize = c.readUnsignedNumEntry("HandleSize", 30);
|
|
||||||
if (!(showh && hsize && hwidth)) {
|
|
||||||
showh = false;
|
|
||||||
hwidth = hsize = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (options->customButtonPositions()) {
|
|
||||||
bpatt = "2" + options->titleButtonsLeft() + "3t3"
|
|
||||||
+ options->titleButtonsRight() + "2";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
bpatt = "2X3t3HSIA2";
|
|
||||||
|
|
||||||
if (showh == show_handle && hwidth == handle_width && hsize == handle_size
|
|
||||||
&& bpatt == *button_pattern)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
show_handle = showh;
|
|
||||||
handle_width = hwidth;
|
|
||||||
handle_size = hsize;
|
|
||||||
*button_pattern = bpatt;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
ModernButton::ModernButton(Client *parent, const char *name,
|
|
||||||
const unsigned char *bitmap)
|
|
||||||
: QButton(parent, name)
|
|
||||||
{
|
|
||||||
setBackgroundMode( NoBackground );
|
|
||||||
QBitmap mask(14, 15, QPixmap::defaultDepth() > 8 ?
|
|
||||||
btnhighcolor_mask_bits : lowcolor_mask_bits, true);
|
|
||||||
resize(14, 15);
|
|
||||||
|
|
||||||
if(bitmap)
|
|
||||||
setBitmap(bitmap);
|
|
||||||
setMask(mask);
|
|
||||||
client = parent;
|
|
||||||
hide();
|
|
||||||
}
|
|
||||||
|
|
||||||
QSize ModernButton::sizeHint() const
|
|
||||||
{
|
|
||||||
return(QSize(14, 15));
|
|
||||||
}
|
|
||||||
|
|
||||||
void ModernButton::reset()
|
|
||||||
{
|
|
||||||
repaint(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ModernButton::setBitmap(const unsigned char *bitmap)
|
|
||||||
{
|
|
||||||
deco = QBitmap(8, 8, bitmap, true);
|
|
||||||
deco.setMask(deco);
|
|
||||||
repaint();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ModernButton::drawButton(QPainter *p)
|
|
||||||
{
|
|
||||||
if(client->isActive()){
|
|
||||||
if(buttonPix)
|
|
||||||
p->drawPixmap(0, 0, isDown() ? *buttonPixDown : *buttonPix);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
if(iButtonPix)
|
|
||||||
p->drawPixmap(0, 0, isDown() ? *iButtonPixDown : *iButtonPix);
|
|
||||||
}
|
|
||||||
if(!deco.isNull()){
|
|
||||||
p->setPen(*buttonFg);
|
|
||||||
p->drawPixmap(isDown() ? 4 : 3, isDown() ? 5 : 4, deco);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ModernButton::mousePressEvent( QMouseEvent* e )
|
|
||||||
{
|
|
||||||
last_button = e->button();
|
|
||||||
QMouseEvent me ( e->type(), e->pos(), e->globalPos(), LeftButton, e->state() );
|
|
||||||
QButton::mousePressEvent( &me );
|
|
||||||
}
|
|
||||||
|
|
||||||
void ModernButton::mouseReleaseEvent( QMouseEvent* e )
|
|
||||||
{
|
|
||||||
QMouseEvent me ( e->type(), e->pos(), e->globalPos(), LeftButton, e->state() );
|
|
||||||
QButton::mouseReleaseEvent( &me );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void ModernSys::slotReset()
|
|
||||||
{
|
|
||||||
if (config_changed) {
|
|
||||||
workspace()->slotResetAllClientsDelayed();
|
|
||||||
config_changed = false;
|
|
||||||
}
|
|
||||||
titleBuffer.resize(0, 0);
|
|
||||||
recalcTitleBuffer();
|
|
||||||
for (int i = 0; i < 5; button[i++]->reset());
|
|
||||||
repaint();
|
|
||||||
}
|
|
||||||
|
|
||||||
ModernSys::ModernSys( Workspace *ws, WId w, QWidget *parent,
|
|
||||||
const char *name )
|
|
||||||
: Client( ws, w, parent, name, WResizeNoErase )
|
|
||||||
{
|
|
||||||
connect(options, SIGNAL(resetClients()), this, SLOT(slotReset()));
|
|
||||||
bool help = providesContextHelp();
|
|
||||||
|
|
||||||
QGridLayout* g = new QGridLayout(this, 0, 0, 2);
|
|
||||||
g->addWidget(windowWrapper(), 1, 1 );
|
|
||||||
g->setRowStretch(1, 10);
|
|
||||||
g->addItem( new QSpacerItem( 0, 0, QSizePolicy::Fixed, QSizePolicy::Expanding ) );
|
|
||||||
|
|
||||||
g->addColSpacing(0, 2);
|
|
||||||
g->addColSpacing(2, 2 + handle_width);
|
|
||||||
|
|
||||||
g->addRowSpacing(2, 2 + handle_width);
|
|
||||||
|
|
||||||
QHBoxLayout* hb = new QHBoxLayout(0);
|
|
||||||
hb->setResizeMode(QLayout::FreeResize);
|
|
||||||
titlebar = new QSpacerItem(10, 16, QSizePolicy::Expanding,
|
|
||||||
QSizePolicy::Minimum);
|
|
||||||
|
|
||||||
button[BtnClose] = new ModernButton(this, "close", close_bits);
|
|
||||||
button[BtnSticky] = new ModernButton(this, "sticky");
|
|
||||||
button[BtnMinimize] = new ModernButton(this, "iconify", iconify_bits);
|
|
||||||
button[BtnMaximize] = new ModernButton(this, "maximize", maximize_bits);
|
|
||||||
button[BtnHelp] = new ModernButton(this, "help", question_bits);
|
|
||||||
|
|
||||||
connect( button[BtnClose], SIGNAL( clicked() ), this, ( SLOT( closeWindow() ) ) );
|
|
||||||
connect( button[BtnSticky], SIGNAL( clicked() ), this, ( SLOT( toggleSticky() ) ) );
|
|
||||||
connect( button[BtnMinimize], SIGNAL( clicked() ), this, ( SLOT( iconify() ) ) );
|
|
||||||
connect( button[BtnMaximize], SIGNAL( clicked() ), this, ( SLOT( maxButtonClicked() ) ) );
|
|
||||||
connect( button[BtnHelp], SIGNAL( clicked() ), this, ( SLOT( contextHelp() ) ) );
|
|
||||||
|
|
||||||
for (int i = 0; i < (int)button_pattern->length();) {
|
|
||||||
QChar c = (*button_pattern)[i++];
|
|
||||||
if (c == '_')
|
|
||||||
c = '3';
|
|
||||||
|
|
||||||
if (c.isDigit()) {
|
|
||||||
hb->addSpacing(int(c - '0'));
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
else if (c == 'X') {
|
|
||||||
hb->addWidget(button[BtnClose]);
|
|
||||||
button[BtnClose]->show();
|
|
||||||
}
|
|
||||||
else if (c == 'S') {
|
|
||||||
if(isSticky())
|
|
||||||
button[BtnSticky]->setBitmap(unsticky_bits);
|
|
||||||
else
|
|
||||||
button[BtnSticky]->setBitmap(sticky_bits);
|
|
||||||
hb->addWidget(button[BtnSticky]);
|
|
||||||
button[BtnSticky]->show();
|
|
||||||
}
|
|
||||||
else if (c == 'I' && isMinimizable()) {
|
|
||||||
hb->addWidget(button[BtnMinimize]);
|
|
||||||
button[BtnMinimize]->show();
|
|
||||||
}
|
|
||||||
else if (c == 'A' && isMaximizable()) {
|
|
||||||
hb->addWidget(button[BtnMaximize]);
|
|
||||||
button[BtnMaximize]->show();
|
|
||||||
}
|
|
||||||
else if (help && c == 'H') {
|
|
||||||
hb->addWidget(button[BtnHelp]);
|
|
||||||
button[BtnHelp]->show();
|
|
||||||
}
|
|
||||||
else if (c == 't')
|
|
||||||
hb->addItem(titlebar);
|
|
||||||
|
|
||||||
if ((*button_pattern)[i] >= 'A' && (*button_pattern)[i] <= 'Z')
|
|
||||||
hb->addSpacing(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
g->addLayout( hb, 0, 1 );
|
|
||||||
setBackgroundMode(NoBackground);
|
|
||||||
recalcTitleBuffer();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void ModernSys::maxButtonClicked( )
|
|
||||||
{
|
|
||||||
switch ( button[BtnMaximize]->last_button ) {
|
|
||||||
case MidButton:
|
|
||||||
maximize( MaximizeVertical );
|
|
||||||
break;
|
|
||||||
case RightButton:
|
|
||||||
maximize( MaximizeHorizontal );
|
|
||||||
break;
|
|
||||||
default: //LeftButton:
|
|
||||||
maximize( MaximizeFull );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ModernSys::resizeEvent( QResizeEvent* )
|
|
||||||
{
|
|
||||||
recalcTitleBuffer();
|
|
||||||
doShape();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ModernSys::recalcTitleBuffer()
|
|
||||||
{
|
|
||||||
if(oldTitle == caption() && width() == titleBuffer.width())
|
|
||||||
return;
|
|
||||||
QFontMetrics fm(options->font(true));
|
|
||||||
titleBuffer.resize(width(), 18);
|
|
||||||
QPainter p;
|
|
||||||
p.begin(&titleBuffer);
|
|
||||||
if(aUpperGradient)
|
|
||||||
p.drawTiledPixmap(0, 0, width(), 18, *aUpperGradient);
|
|
||||||
else
|
|
||||||
p.fillRect(0, 0, width(), 18,
|
|
||||||
options->colorGroup(Options::TitleBar, true).
|
|
||||||
brush(QColorGroup::Button));
|
|
||||||
|
|
||||||
QRect t = titlebar->geometry();
|
|
||||||
t.setTop( 2 );
|
|
||||||
t.setLeft( t.left() );
|
|
||||||
t.setRight( t.right() - 2 );
|
|
||||||
|
|
||||||
QRegion r(t.x(), 0, t.width(), 18);
|
|
||||||
r -= QRect(t.x()+((t.width()-fm.width(caption()))/2)-4,
|
|
||||||
0, fm.width(caption())+8, 18);
|
|
||||||
p.setClipRegion(r);
|
|
||||||
int i, ly;
|
|
||||||
for(i=0, ly=4; i < 4; ++i, ly+=3){
|
|
||||||
p.setPen(options->color(Options::TitleBar, true).light(150));
|
|
||||||
p.drawLine(0, ly, width()-1, ly);
|
|
||||||
p.setPen(options->color(Options::TitleBar, true).dark(120));
|
|
||||||
p.drawLine(0, ly+1, width()-1, ly+1);
|
|
||||||
}
|
|
||||||
p.setClipRect(t);
|
|
||||||
p.setPen(options->color(Options::Font, true));
|
|
||||||
p.setFont(options->font(true));
|
|
||||||
|
|
||||||
p.drawText(t.x()+((t.width()-fm.width(caption()))/2)-4,
|
|
||||||
0, fm.width(caption())+8, 18, AlignCenter, caption());
|
|
||||||
p.setClipping(false);
|
|
||||||
p.end();
|
|
||||||
oldTitle = caption();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ModernSys::captionChange( const QString &)
|
|
||||||
{
|
|
||||||
recalcTitleBuffer();
|
|
||||||
repaint( titlebar->geometry(), false );
|
|
||||||
}
|
|
||||||
|
|
||||||
void ModernSys::drawRoundFrame(QPainter &p, int x, int y, int w, int h)
|
|
||||||
{
|
|
||||||
kDrawRoundButton(&p, x, y, w, h,
|
|
||||||
options->colorGroup(Options::Frame, isActive()), false);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void ModernSys::paintEvent( QPaintEvent* )
|
|
||||||
{
|
|
||||||
int hs = handle_size;
|
|
||||||
int hw = handle_width;
|
|
||||||
|
|
||||||
QPainter p( this );
|
|
||||||
QRect t = titlebar->geometry();
|
|
||||||
|
|
||||||
QBrush fillBrush(colorGroup().brush(QColorGroup::Background).pixmap() ?
|
|
||||||
colorGroup().brush(QColorGroup::Background) :
|
|
||||||
options->colorGroup(Options::Frame, isActive()).
|
|
||||||
brush(QColorGroup::Button));
|
|
||||||
|
|
||||||
p.fillRect(1, 16, width()-2, height()-16, fillBrush);
|
|
||||||
p.fillRect(width()-6, 0, width()-1, height(), fillBrush);
|
|
||||||
|
|
||||||
t.setTop( 2 );
|
|
||||||
t.setLeft( t.left() );
|
|
||||||
t.setRight( t.right() - 2 );
|
|
||||||
|
|
||||||
int w = width() - hw; // exclude handle
|
|
||||||
int h = height() - hw;
|
|
||||||
|
|
||||||
// titlebar
|
|
||||||
QColorGroup g = options->colorGroup(Options::TitleBar, isActive());
|
|
||||||
if(isActive()){
|
|
||||||
p.drawPixmap(1, 1, titleBuffer, 0, 0, w-2, 18);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
if(iUpperGradient)
|
|
||||||
p.drawTiledPixmap(1, 1, w-2, 18, *iUpperGradient);
|
|
||||||
else
|
|
||||||
p.fillRect(1, 1, w-2, 18, fillBrush);
|
|
||||||
p.setPen(options->color(Options::Font, isActive()));
|
|
||||||
p.setFont(options->font(isActive()));
|
|
||||||
p.drawText(t, AlignCenter, caption() );
|
|
||||||
}
|
|
||||||
|
|
||||||
// titlebar highlight
|
|
||||||
p.setPen(g.light());
|
|
||||||
p.drawLine(1, 1, 1, 19);
|
|
||||||
p.drawLine(1, 1, w-3, 1);
|
|
||||||
p.setPen(g.dark());
|
|
||||||
p.drawLine(w-2, 1, w-2, 19);
|
|
||||||
p.drawLine(0, 18, w-2, 18);
|
|
||||||
|
|
||||||
// frame
|
|
||||||
g = options->colorGroup(Options::Frame, isActive());
|
|
||||||
p.setPen(g.light());
|
|
||||||
p.drawLine(1, 19, 1, h-2);
|
|
||||||
p.setPen(g.dark());
|
|
||||||
p.drawLine(2, h-2, w-2, h-2);
|
|
||||||
p.drawLine(w-2, 19, w-2, h-2);
|
|
||||||
//p.drawPoint(w-3, 19);
|
|
||||||
//p.drawPoint(2, 19);
|
|
||||||
|
|
||||||
qDrawShadePanel(&p, 3, 19, w-6, h-22, g, true);
|
|
||||||
|
|
||||||
if (show_handle) {
|
|
||||||
p.setPen(g.dark());
|
|
||||||
p.drawLine(width()-3, height()-hs-1, width()-3, height()-3);
|
|
||||||
p.drawLine(width()-hs-1, height()-3, width()-3, height()-3);
|
|
||||||
|
|
||||||
p.setPen(g.light());
|
|
||||||
p.drawLine(width()-hw, height()-hs-1, width()-hw, height()-hw);
|
|
||||||
p.drawLine(width()-hs-1, height()-hw, width()-hw, height()-hw);
|
|
||||||
p.drawLine(width()-hw, height()-hs-1, width()-4, height()-hs-1);
|
|
||||||
p.drawLine(width()-hs-1, height()-hw, width()-hs-1, height()-4);
|
|
||||||
|
|
||||||
p.setPen(Qt::black);
|
|
||||||
p.drawRect(0, 0, w, h);
|
|
||||||
|
|
||||||
// handle outline
|
|
||||||
p.drawLine(width()-hw, height()-hs, width(), height()-hs);
|
|
||||||
p.drawLine(width()-2, height()-hs, width()-2, height()-2);
|
|
||||||
p.drawLine(width()-hs, height()-2, width()-2, height()-2);
|
|
||||||
p.drawLine(width()-hs, height()-hw, width()-hs, height()-2);
|
|
||||||
} else {
|
|
||||||
p.setPen(Qt::black);
|
|
||||||
p.drawRect(0, 0, w, h);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ModernSys::doShape()
|
|
||||||
{
|
|
||||||
int hs = handle_size;
|
|
||||||
int hw = handle_width;
|
|
||||||
QRegion mask;
|
|
||||||
mask += QRect(0, 0, width()-hw, height()-hw);
|
|
||||||
//single points
|
|
||||||
mask -= QRect(0, 0, 1, 1);
|
|
||||||
mask -= QRect(width()-hw-1, 0, 1, 1);
|
|
||||||
mask -= QRect(0, height()-hw-1, 1, 1);
|
|
||||||
|
|
||||||
if (show_handle) {
|
|
||||||
mask += QRect(width()-hs, height()-hs, hs-1, hs-1);
|
|
||||||
mask -= QRect(width()-2, height()-2, 1, 1);
|
|
||||||
mask -= QRect(width()-2, height()-hs, 1, 1);
|
|
||||||
mask -= QRect(width()-hs, height()-2, 1, 1);
|
|
||||||
} else
|
|
||||||
mask -= QRect(width()-1, height()-1, 1, 1);
|
|
||||||
|
|
||||||
setMask(mask);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ModernSys::showEvent(QShowEvent *ev)
|
|
||||||
{
|
|
||||||
Client::showEvent(ev);
|
|
||||||
doShape();
|
|
||||||
repaint();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ModernSys::windowWrapperShowEvent( QShowEvent* )
|
|
||||||
{
|
|
||||||
doShape();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ModernSys::mouseDoubleClickEvent( QMouseEvent * e )
|
|
||||||
{
|
|
||||||
if (titlebar->geometry().contains( e->pos() ) )
|
|
||||||
workspace()->performWindowOperation( this, options->operationTitlebarDblClick() );
|
|
||||||
workspace()->requestFocus( this );
|
|
||||||
}
|
|
||||||
|
|
||||||
void ModernSys::stickyChange(bool on)
|
|
||||||
{
|
|
||||||
button[BtnSticky]->setBitmap(on ? unsticky_bits : sticky_bits);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ModernSys::maximizeChange(bool m)
|
|
||||||
{
|
|
||||||
button[BtnMaximize]->setBitmap(m ? minmax_bits : maximize_bits);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ModernSys::init()
|
|
||||||
{
|
|
||||||
//
|
|
||||||
}
|
|
||||||
|
|
||||||
void ModernSys::activeChange(bool)
|
|
||||||
{
|
|
||||||
repaint(false);
|
|
||||||
for (int i = 0; i < 5; button[i++]->reset());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Client::MousePosition ModernSys::mousePosition( const QPoint& p) const
|
|
||||||
{
|
|
||||||
MousePosition m = Client::mousePosition( p );
|
|
||||||
|
|
||||||
if ( show_handle && m == Center ) {
|
|
||||||
int border = handle_width + 4;
|
|
||||||
bool hx = (p.x() >= width() - border);
|
|
||||||
bool hy = (p.y() >= height() - border);
|
|
||||||
|
|
||||||
if (hx && hy)
|
|
||||||
m = BottomRight;
|
|
||||||
else if (hx)
|
|
||||||
m = Right;
|
|
||||||
else if (hy)
|
|
||||||
m = Bottom;
|
|
||||||
}
|
|
||||||
return m;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// KWin extended plugin interface
|
|
||||||
extern "C"
|
|
||||||
{
|
|
||||||
Client *allocate(Workspace *ws, WId w, int)
|
|
||||||
{
|
|
||||||
return(new ModernSys(ws, w));
|
|
||||||
}
|
|
||||||
void init()
|
|
||||||
{
|
|
||||||
button_pattern = new QString;
|
|
||||||
create_pixmaps();
|
|
||||||
read_config();
|
|
||||||
config_changed = true;
|
|
||||||
}
|
|
||||||
void reset()
|
|
||||||
{
|
|
||||||
if (read_config())
|
|
||||||
config_changed = true;
|
|
||||||
delete_pixmaps();
|
|
||||||
create_pixmaps();
|
|
||||||
}
|
|
||||||
void deinit()
|
|
||||||
{
|
|
||||||
delete_pixmaps();
|
|
||||||
delete button_pattern;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#include "modernsys.moc"
|
|
||||||
// vim:ts=4:sw=4
|
|
|
@ -1,70 +0,0 @@
|
||||||
// $Id$
|
|
||||||
#ifndef __MODSYSTEMCLIENT_H
|
|
||||||
#define __MODSYSTEMCLIENT_H
|
|
||||||
|
|
||||||
#include <qbutton.h>
|
|
||||||
#include <qbitmap.h>
|
|
||||||
#include <kpixmap.h>
|
|
||||||
#include "../../client.h"
|
|
||||||
class QLabel;
|
|
||||||
class QSpacerItem;
|
|
||||||
|
|
||||||
namespace KWinInternal {
|
|
||||||
|
|
||||||
// get rid of autohide :P
|
|
||||||
class ModernButton : public QButton
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
ModernButton(Client *parent=0, const char *name=0,
|
|
||||||
const unsigned char *bitmap=NULL);
|
|
||||||
void setBitmap(const unsigned char *bitmap);
|
|
||||||
void reset();
|
|
||||||
QSize sizeHint() const;
|
|
||||||
protected:
|
|
||||||
void mousePressEvent( QMouseEvent* e );
|
|
||||||
void mouseReleaseEvent( QMouseEvent* e );
|
|
||||||
|
|
||||||
virtual void drawButton(QPainter *p);
|
|
||||||
void drawButtonLabel(QPainter *){;}
|
|
||||||
QBitmap deco;
|
|
||||||
Client *client;
|
|
||||||
public:
|
|
||||||
int last_button;
|
|
||||||
};
|
|
||||||
|
|
||||||
class ModernSys : public KWinInternal::Client
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
ModernSys( Workspace *ws, WId w, QWidget *parent=0, const char *name=0 );
|
|
||||||
~ModernSys(){;}
|
|
||||||
protected:
|
|
||||||
void drawRoundFrame(QPainter &p, int x, int y, int w, int h);
|
|
||||||
void resizeEvent( QResizeEvent* );
|
|
||||||
void paintEvent( QPaintEvent* );
|
|
||||||
void showEvent( QShowEvent* );
|
|
||||||
void windowWrapperShowEvent( QShowEvent* );
|
|
||||||
void mouseDoubleClickEvent( QMouseEvent * );
|
|
||||||
void init();
|
|
||||||
void captionChange( const QString& name );
|
|
||||||
void stickyChange(bool on);
|
|
||||||
void maximizeChange(bool m);
|
|
||||||
void doShape();
|
|
||||||
void recalcTitleBuffer();
|
|
||||||
void activeChange(bool);
|
|
||||||
MousePosition mousePosition( const QPoint& ) const;
|
|
||||||
protected slots:
|
|
||||||
void slotReset();
|
|
||||||
void maxButtonClicked();
|
|
||||||
private:
|
|
||||||
enum Buttons{ BtnClose = 0, BtnSticky, BtnMinimize, BtnMaximize, BtnHelp };
|
|
||||||
ModernButton* button[5];
|
|
||||||
QSpacerItem* titlebar;
|
|
||||||
QPixmap titleBuffer;
|
|
||||||
QString oldTitle;
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,3 +0,0 @@
|
||||||
[Desktop Entry]
|
|
||||||
Name=ModSystem
|
|
||||||
X-KDE-Library=libkwinmodernsys
|
|
|
@ -1,21 +0,0 @@
|
||||||
|
|
||||||
INCLUDES = $(all_includes)
|
|
||||||
|
|
||||||
kde_module_LTLIBRARIES = libkwinsystem.la
|
|
||||||
|
|
||||||
libkwinsystem_la_SOURCES = systemclient.cpp
|
|
||||||
libkwinsystem_la_LIBADD = ../../kwin.la
|
|
||||||
libkwinsystem_la_LDFLAGS = $(all_libraries) $(KDE_PLUGIN)
|
|
||||||
|
|
||||||
METASOURCES = AUTO
|
|
||||||
noinst_HEADERS = systemclient.h
|
|
||||||
|
|
||||||
lnkdir = $(kde_datadir)/kwin/
|
|
||||||
lnk_DATA = system.desktop
|
|
||||||
|
|
||||||
EXTRA_DIST = $(lnk_DATA)
|
|
||||||
|
|
||||||
|
|
||||||
###KMAKE-start (don't edit or delete this block)
|
|
||||||
|
|
||||||
###KMAKE-end
|
|
|
@ -1,20 +0,0 @@
|
||||||
[Desktop Entry]
|
|
||||||
Name=System++
|
|
||||||
Name[ca]=Sistema++
|
|
||||||
Name[cs]=Systém++
|
|
||||||
Name[eo]=Sistemo++
|
|
||||||
Name[et]=Süsteem++
|
|
||||||
Name[fi]=Järjestelmä++
|
|
||||||
Name[fr]=Système++
|
|
||||||
Name[is]=Kerfi++
|
|
||||||
Name[ko]=시스템++
|
|
||||||
Name[lv]=Sistēma++
|
|
||||||
Name[mk]=Систем++
|
|
||||||
Name[nl]=Systeem++
|
|
||||||
Name[oc]=Sistemo++
|
|
||||||
Name[ro]=Sistem++
|
|
||||||
Name[sk]=Systém++
|
|
||||||
Name[sl]=Sistem++
|
|
||||||
Name[tr]=Sistem++
|
|
||||||
Name[zh_TW.Big5]=系統++
|
|
||||||
X-KDE-Library=libkwinsystem
|
|
|
@ -1,555 +0,0 @@
|
||||||
#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 <kdrawutil.h>
|
|
||||||
#include <kapp.h>
|
|
||||||
#include <qbitmap.h>
|
|
||||||
#include "../../workspace.h"
|
|
||||||
#include "../../options.h"
|
|
||||||
|
|
||||||
using namespace KWinInternal;
|
|
||||||
|
|
||||||
|
|
||||||
static unsigned char iconify_bits[] = {
|
|
||||||
0x00, 0x00, 0xff, 0xff, 0x7e, 0x3c, 0x18, 0x00};
|
|
||||||
|
|
||||||
static unsigned char maximize_bits[] = {
|
|
||||||
0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x00, 0x00};
|
|
||||||
|
|
||||||
static unsigned char minmax_bits[] = {
|
|
||||||
0x0c, 0x18, 0x33, 0x67, 0xcf, 0x9f, 0x3f, 0x3f};
|
|
||||||
|
|
||||||
static unsigned char unsticky_bits[] = {
|
|
||||||
0x00, 0x18, 0x18, 0x7e, 0x7e, 0x18, 0x18, 0x00};
|
|
||||||
|
|
||||||
static unsigned char sticky_bits[] = {
|
|
||||||
0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00};
|
|
||||||
|
|
||||||
static unsigned char question_bits[] = {
|
|
||||||
0x3c, 0x66, 0x60, 0x30, 0x18, 0x00, 0x18, 0x18};
|
|
||||||
|
|
||||||
static KPixmap *aUpperGradient=0;
|
|
||||||
static KPixmap *iUpperGradient=0;
|
|
||||||
|
|
||||||
static KPixmap *btnPix=0;
|
|
||||||
static KPixmap *btnPixDown=0;
|
|
||||||
static KPixmap *iBtnPix=0;
|
|
||||||
static KPixmap *iBtnPixDown=0;
|
|
||||||
static QColor *btnForeground;
|
|
||||||
|
|
||||||
static bool pixmaps_created = false;
|
|
||||||
|
|
||||||
static void drawButtonFrame(KPixmap *pix, const QColorGroup &g)
|
|
||||||
{
|
|
||||||
QPainter p;
|
|
||||||
p.begin(pix);
|
|
||||||
p.setPen(g.mid());
|
|
||||||
p.drawLine(0, 0, 13, 0);
|
|
||||||
p.drawLine(0, 0, 0, 13);
|
|
||||||
p.setPen(g.light());
|
|
||||||
p.drawLine(13, 0, 13, 13);
|
|
||||||
p.drawLine(0, 13, 13, 13);
|
|
||||||
p.setPen(g.dark());
|
|
||||||
p.drawRect(1, 1, 12, 12);
|
|
||||||
p.end();
|
|
||||||
}
|
|
||||||
|
|
||||||
static void create_pixmaps()
|
|
||||||
{
|
|
||||||
if(pixmaps_created)
|
|
||||||
return;
|
|
||||||
pixmaps_created = true;
|
|
||||||
|
|
||||||
if(QPixmap::defaultDepth() > 8){
|
|
||||||
// titlebar
|
|
||||||
aUpperGradient = new KPixmap;
|
|
||||||
aUpperGradient->resize(32, 18);
|
|
||||||
iUpperGradient = new KPixmap;
|
|
||||||
iUpperGradient->resize(32, 18);
|
|
||||||
QColor bgColor = kapp->palette().normal().background();
|
|
||||||
KPixmapEffect::gradient(*aUpperGradient,
|
|
||||||
options->color(Options::Frame, true).light(130),
|
|
||||||
bgColor,
|
|
||||||
KPixmapEffect::VerticalGradient);
|
|
||||||
KPixmapEffect::gradient(*iUpperGradient,
|
|
||||||
options->color(Options::Frame, false).light(130),
|
|
||||||
bgColor,
|
|
||||||
KPixmapEffect::VerticalGradient);
|
|
||||||
|
|
||||||
// buttons
|
|
||||||
KPixmap aPix;
|
|
||||||
aPix.resize(12, 12);
|
|
||||||
KPixmap iPix;
|
|
||||||
iPix.resize(12, 12);
|
|
||||||
KPixmap aInternal;
|
|
||||||
aInternal.resize(8, 8);
|
|
||||||
KPixmap iInternal;
|
|
||||||
iInternal.resize(8, 8);
|
|
||||||
|
|
||||||
QColor hColor(options->color(Options::ButtonBg, false));
|
|
||||||
KPixmapEffect::gradient(iInternal,
|
|
||||||
hColor.dark(120),
|
|
||||||
hColor.light(120),
|
|
||||||
KPixmapEffect::DiagonalGradient);
|
|
||||||
KPixmapEffect::gradient(iPix,
|
|
||||||
hColor.light(150),
|
|
||||||
hColor.dark(150),
|
|
||||||
KPixmapEffect::DiagonalGradient);
|
|
||||||
|
|
||||||
hColor =options->color(Options::ButtonBg, true);
|
|
||||||
KPixmapEffect::gradient(aInternal,
|
|
||||||
hColor.dark(120),
|
|
||||||
hColor.light(120),
|
|
||||||
KPixmapEffect::DiagonalGradient);
|
|
||||||
KPixmapEffect::gradient(aPix,
|
|
||||||
hColor.light(150),
|
|
||||||
hColor.dark(150),
|
|
||||||
KPixmapEffect::DiagonalGradient);
|
|
||||||
bitBlt(&aPix, 1, 1, &aInternal, 0, 0, 8, 8, Qt::CopyROP, true);
|
|
||||||
bitBlt(&iPix, 1, 1, &iInternal, 0, 0, 8, 8, Qt::CopyROP, true);
|
|
||||||
|
|
||||||
// normal buttons
|
|
||||||
btnPix = new KPixmap;
|
|
||||||
btnPix->resize(14, 14);
|
|
||||||
bitBlt(btnPix, 2, 2, &aPix, 0, 0, 10, 10, Qt::CopyROP, true);
|
|
||||||
drawButtonFrame(btnPix, options->colorGroup(Options::Frame, true));
|
|
||||||
|
|
||||||
iBtnPix = new KPixmap;
|
|
||||||
iBtnPix->resize(14, 14);
|
|
||||||
bitBlt(iBtnPix, 2, 2, &iPix, 0, 0, 10, 10, Qt::CopyROP, true);
|
|
||||||
drawButtonFrame(iBtnPix, options->colorGroup(Options::Frame, false));
|
|
||||||
|
|
||||||
|
|
||||||
// pressed buttons
|
|
||||||
hColor = options->color(Options::ButtonBg, false);
|
|
||||||
KPixmapEffect::gradient(iInternal,
|
|
||||||
hColor.light(130),
|
|
||||||
hColor.dark(130),
|
|
||||||
KPixmapEffect::DiagonalGradient);
|
|
||||||
KPixmapEffect::gradient(iPix,
|
|
||||||
hColor.light(150),
|
|
||||||
hColor.dark(150),
|
|
||||||
KPixmapEffect::DiagonalGradient);
|
|
||||||
|
|
||||||
hColor =options->color(Options::ButtonBg, true);
|
|
||||||
KPixmapEffect::gradient(aInternal,
|
|
||||||
hColor.light(130),
|
|
||||||
hColor.dark(130),
|
|
||||||
KPixmapEffect::DiagonalGradient);
|
|
||||||
KPixmapEffect::gradient(aPix,
|
|
||||||
hColor.light(150),
|
|
||||||
hColor.dark(150),
|
|
||||||
KPixmapEffect::DiagonalGradient);
|
|
||||||
bitBlt(&aPix, 1, 1, &aInternal, 0, 0, 8, 8, Qt::CopyROP, true);
|
|
||||||
bitBlt(&iPix, 1, 1, &iInternal, 0, 0, 8, 8, Qt::CopyROP, true);
|
|
||||||
|
|
||||||
btnPixDown = new KPixmap;
|
|
||||||
btnPixDown->resize(14, 14);
|
|
||||||
bitBlt(btnPixDown, 2, 2, &aPix, 0, 0, 10, 10, Qt::CopyROP, true);
|
|
||||||
drawButtonFrame(btnPixDown, options->colorGroup(Options::Frame,
|
|
||||||
true));
|
|
||||||
|
|
||||||
iBtnPixDown = new KPixmap;
|
|
||||||
iBtnPixDown->resize(14, 14);
|
|
||||||
bitBlt(iBtnPixDown, 2, 2, &iPix, 0, 0, 10, 10, Qt::CopyROP, true);
|
|
||||||
drawButtonFrame(iBtnPixDown, options->colorGroup(Options::Frame,
|
|
||||||
false));
|
|
||||||
}
|
|
||||||
if(qGray(options->color(Options::ButtonBg, true).rgb()) > 128)
|
|
||||||
btnForeground = new QColor(Qt::black);
|
|
||||||
else
|
|
||||||
btnForeground = new QColor(Qt::white);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void delete_pixmaps()
|
|
||||||
{
|
|
||||||
if(aUpperGradient){
|
|
||||||
delete aUpperGradient;
|
|
||||||
delete iUpperGradient;
|
|
||||||
delete btnPix;
|
|
||||||
delete btnPixDown;
|
|
||||||
delete iBtnPix;
|
|
||||||
delete iBtnPixDown;
|
|
||||||
aUpperGradient = 0;
|
|
||||||
}
|
|
||||||
delete btnForeground;
|
|
||||||
pixmaps_created = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
SystemButton::SystemButton(Client *parent, const char *name,
|
|
||||||
const unsigned char *bitmap)
|
|
||||||
: QToolButton(parent, name)
|
|
||||||
{
|
|
||||||
setBackgroundMode( NoBackground );
|
|
||||||
resize(14, 14);
|
|
||||||
connect( this, SIGNAL( clicked() ), this, SLOT( handleClicked() ) );
|
|
||||||
if(bitmap)
|
|
||||||
setBitmap(bitmap);
|
|
||||||
client = parent;
|
|
||||||
}
|
|
||||||
|
|
||||||
QSize SystemButton::sizeHint() const
|
|
||||||
{
|
|
||||||
return(QSize(14, 14));
|
|
||||||
}
|
|
||||||
|
|
||||||
void SystemButton::reset()
|
|
||||||
{
|
|
||||||
repaint(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void SystemButton::setBitmap(const unsigned char *bitmap)
|
|
||||||
{
|
|
||||||
deco = QBitmap(8, 8, bitmap, true);
|
|
||||||
deco.setMask(deco);
|
|
||||||
repaint();
|
|
||||||
}
|
|
||||||
|
|
||||||
void SystemButton::drawButton(QPainter *p)
|
|
||||||
{
|
|
||||||
if(btnPixDown){
|
|
||||||
if(client->isActive())
|
|
||||||
p->drawPixmap(0, 0, isDown() ? *btnPixDown : *btnPix);
|
|
||||||
else
|
|
||||||
p->drawPixmap(0, 0, isDown() ? *iBtnPixDown : *iBtnPix);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
QColorGroup g = options->colorGroup(Options::Frame,
|
|
||||||
client->isActive());
|
|
||||||
int x2 = width()-1;
|
|
||||||
int y2 = height()-1;
|
|
||||||
// outer frame
|
|
||||||
p->setPen(g.mid());
|
|
||||||
p->drawLine(0, 0, x2, 0);
|
|
||||||
p->drawLine(0, 0, 0, y2);
|
|
||||||
p->setPen(g.light());
|
|
||||||
p->drawLine(x2, 0, x2, y2);
|
|
||||||
p->drawLine(0, x2, y2, x2);
|
|
||||||
p->setPen(g.dark());
|
|
||||||
p->drawRect(1, 1, width()-2, height()-2);
|
|
||||||
// inner frame
|
|
||||||
g = options->colorGroup(Options::ButtonBg, client->isActive());
|
|
||||||
p->fillRect(3, 3, width()-6, height()-6, g.background());
|
|
||||||
p->setPen(isDown() ? g.mid() : g.light());
|
|
||||||
p->drawLine(2, 2, x2-2, 2);
|
|
||||||
p->drawLine(2, 2, 2, y2-2);
|
|
||||||
p->setPen(isDown() ? g.light() : g.mid());
|
|
||||||
p->drawLine(x2-2, 2, x2-2, y2-2);
|
|
||||||
p->drawLine(2, x2-2, y2-2, x2-2);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!deco.isNull()){
|
|
||||||
p->setPen(*btnForeground);
|
|
||||||
p->drawPixmap(isDown() ? 4 : 3, isDown() ? 4 : 3, deco);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void SystemButton::mousePressEvent( QMouseEvent* e )
|
|
||||||
{
|
|
||||||
last_button = e->button();
|
|
||||||
QMouseEvent me ( e->type(), e->pos(), e->globalPos(), LeftButton, e->state() );
|
|
||||||
QToolButton::mousePressEvent( &me );
|
|
||||||
}
|
|
||||||
|
|
||||||
void SystemButton::mouseReleaseEvent( QMouseEvent* e )
|
|
||||||
{
|
|
||||||
QMouseEvent me ( e->type(), e->pos(), e->globalPos(), LeftButton, e->state() );
|
|
||||||
QToolButton::mouseReleaseEvent( &me );
|
|
||||||
}
|
|
||||||
|
|
||||||
void SystemButton::handleClicked()
|
|
||||||
{
|
|
||||||
emit clicked( last_button );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void SystemClient::slotReset()
|
|
||||||
{
|
|
||||||
titleBuffer.resize(0, 0);
|
|
||||||
recalcTitleBuffer();
|
|
||||||
repaint();
|
|
||||||
button[0]->reset();
|
|
||||||
button[1]->reset();
|
|
||||||
button[2]->reset();
|
|
||||||
button[3]->reset();
|
|
||||||
if(button[4])
|
|
||||||
button[4]->reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
void SystemClient::maxButtonClicked( int button )
|
|
||||||
{
|
|
||||||
switch ( button ){
|
|
||||||
case MidButton:
|
|
||||||
maximize( MaximizeVertical );
|
|
||||||
break;
|
|
||||||
case RightButton:
|
|
||||||
maximize( MaximizeHorizontal );
|
|
||||||
break;
|
|
||||||
default: //LeftButton:
|
|
||||||
maximize( MaximizeFull );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SystemClient::SystemClient( Workspace *ws, WId w, QWidget *parent,
|
|
||||||
const char *name )
|
|
||||||
: Client( ws, w, parent, name, WResizeNoErase )
|
|
||||||
{
|
|
||||||
connect(options, SIGNAL(resetClients()), this, SLOT(slotReset()));
|
|
||||||
bool help = providesContextHelp();
|
|
||||||
|
|
||||||
QGridLayout* g = new QGridLayout(this, 0, 0, 2);
|
|
||||||
g->setRowStretch(1, 10);
|
|
||||||
g->addWidget(windowWrapper(), 1, 1 );
|
|
||||||
g->addItem( new QSpacerItem( 0, 0, QSizePolicy::Fixed, QSizePolicy::Expanding ) );
|
|
||||||
|
|
||||||
g->addColSpacing(0, 2);
|
|
||||||
g->addColSpacing(2, 2);
|
|
||||||
g->addRowSpacing(2, 6);
|
|
||||||
|
|
||||||
button[0] = new SystemButton(this, "close"/*, close_bits*/);
|
|
||||||
button[1] = new SystemButton(this, "sticky");
|
|
||||||
if(isSticky())
|
|
||||||
button[1]->setBitmap(unsticky_bits);
|
|
||||||
else
|
|
||||||
button[1]->setBitmap(sticky_bits);
|
|
||||||
button[2] = new SystemButton(this, "iconify", iconify_bits);
|
|
||||||
button[3] = new SystemButton(this, "maximize", maximize_bits);
|
|
||||||
if(help){
|
|
||||||
button[4] = new SystemButton(this, "help", question_bits);
|
|
||||||
connect( button[4], SIGNAL( clicked() ), this, ( SLOT( contextHelp() ) ) );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
button[4] = NULL;
|
|
||||||
|
|
||||||
connect( button[0], SIGNAL( clicked() ), this, ( SLOT( closeWindow() ) ) );
|
|
||||||
connect( button[1], SIGNAL( clicked() ), this, ( SLOT( toggleSticky() ) ) );
|
|
||||||
connect( button[2], SIGNAL( clicked() ), this, ( SLOT( iconify() ) ) );
|
|
||||||
connect( button[3], SIGNAL( clicked(int) ), this, ( SLOT( maxButtonClicked(int) ) ) );
|
|
||||||
|
|
||||||
QHBoxLayout* hb = new QHBoxLayout(0);
|
|
||||||
hb->setResizeMode(QLayout::FreeResize);
|
|
||||||
g->addLayout( hb, 0, 1 );
|
|
||||||
hb->addSpacing(3);
|
|
||||||
hb->addWidget( button[0]);
|
|
||||||
titlebar = new QSpacerItem(10, 14, QSizePolicy::Expanding,
|
|
||||||
QSizePolicy::Minimum);
|
|
||||||
hb->addSpacing(3);
|
|
||||||
hb->addItem(titlebar);
|
|
||||||
hb->addSpacing(3);
|
|
||||||
if(help){
|
|
||||||
hb->addWidget( button[4]);
|
|
||||||
hb->addSpacing(1);
|
|
||||||
}
|
|
||||||
hb->addWidget( button[1]);
|
|
||||||
hb->addSpacing(1);
|
|
||||||
hb->addWidget( button[2]);
|
|
||||||
hb->addSpacing(1);
|
|
||||||
hb->addWidget( button[3]);
|
|
||||||
hb->addSpacing(3);
|
|
||||||
|
|
||||||
setBackgroundMode(NoBackground);
|
|
||||||
recalcTitleBuffer();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void SystemClient::resizeEvent( QResizeEvent* )
|
|
||||||
{
|
|
||||||
//Client::resizeEvent( e );
|
|
||||||
recalcTitleBuffer();
|
|
||||||
doShape();
|
|
||||||
/*
|
|
||||||
if ( isVisibleToTLW() && !testWFlags( WNorthWestGravity )) {
|
|
||||||
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::recalcTitleBuffer()
|
|
||||||
{
|
|
||||||
if(oldTitle == caption() && width() == titleBuffer.width())
|
|
||||||
return;
|
|
||||||
QFontMetrics fm(options->font(true));
|
|
||||||
titleBuffer.resize(width(), 18);
|
|
||||||
QPainter p;
|
|
||||||
p.begin(&titleBuffer);
|
|
||||||
if(aUpperGradient)
|
|
||||||
p.drawTiledPixmap(0, 0, width(), 18, *aUpperGradient);
|
|
||||||
else
|
|
||||||
p.fillRect(0, 0, width(), 18,
|
|
||||||
options->colorGroup(Options::Frame, true).
|
|
||||||
brush(QColorGroup::Button));
|
|
||||||
|
|
||||||
QRect t = titlebar->geometry();
|
|
||||||
t.setTop( 2 );
|
|
||||||
t.setLeft( t.left() + 4 );
|
|
||||||
t.setRight( t.right() - 2 );
|
|
||||||
|
|
||||||
QRegion r(t.x(), 0, t.width(), 18);
|
|
||||||
r -= QRect(t.x()+((t.width()-fm.width(caption()))/2)-4,
|
|
||||||
0, fm.width(caption())+8, 18);
|
|
||||||
p.setClipRegion(r);
|
|
||||||
int i, ly;
|
|
||||||
for(i=0, ly=4; i < 4; ++i, ly+=3){
|
|
||||||
p.setPen(options->color(Options::TitleBar, true).light(150));
|
|
||||||
p.drawLine(0, ly, width()-1, ly);
|
|
||||||
p.setPen(options->color(Options::TitleBar, true).dark(120));
|
|
||||||
p.drawLine(0, ly+1, width()-1, ly+1);
|
|
||||||
}
|
|
||||||
p.setClipRect(t);
|
|
||||||
p.setPen(options->color(Options::Font, true));
|
|
||||||
p.setFont(options->font(true));
|
|
||||||
|
|
||||||
p.drawText(t.x()+((t.width()-fm.width(caption()))/2)-4,
|
|
||||||
0, fm.width(caption())+8, 18, AlignCenter, caption());
|
|
||||||
p.setClipping(false);
|
|
||||||
p.end();
|
|
||||||
oldTitle = caption();
|
|
||||||
}
|
|
||||||
|
|
||||||
void SystemClient::captionChange( const QString &)
|
|
||||||
{
|
|
||||||
recalcTitleBuffer();
|
|
||||||
repaint( titlebar->geometry(), false );
|
|
||||||
}
|
|
||||||
|
|
||||||
void SystemClient::drawRoundFrame(QPainter &p, int x, int y, int w, int h)
|
|
||||||
{
|
|
||||||
kDrawRoundButton(&p, x, y, w, h,
|
|
||||||
options->colorGroup(Options::Frame, isActive()), false);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void SystemClient::paintEvent( QPaintEvent* )
|
|
||||||
{
|
|
||||||
QPainter p( this );
|
|
||||||
QRect t = titlebar->geometry();
|
|
||||||
|
|
||||||
QBrush fillBrush(colorGroup().brush(QColorGroup::Background).pixmap() ?
|
|
||||||
colorGroup().brush(QColorGroup::Background) :
|
|
||||||
options->colorGroup(Options::Frame, isActive()).
|
|
||||||
brush(QColorGroup::Button));
|
|
||||||
|
|
||||||
p.fillRect(1, 18, width()-2, height()-19, fillBrush);
|
|
||||||
|
|
||||||
t.setTop( 2 );
|
|
||||||
t.setLeft( t.left() + 4 );
|
|
||||||
t.setRight( t.right() - 2 );
|
|
||||||
|
|
||||||
if(isActive())
|
|
||||||
p.drawPixmap(0, 0, titleBuffer);
|
|
||||||
else{
|
|
||||||
if(iUpperGradient)
|
|
||||||
p.drawTiledPixmap(0, 0, width(), 18, *iUpperGradient);
|
|
||||||
else
|
|
||||||
p.fillRect(0, 0, width(), 18, fillBrush);
|
|
||||||
p.setPen(options->color(Options::Font, isActive()));
|
|
||||||
p.setFont(options->font(isActive()));
|
|
||||||
p.drawText(t, AlignCenter, caption() );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
p.setPen(options->colorGroup(Options::Frame, isActive()).light());
|
|
||||||
p.drawLine(width()-20, height()-7, width()-10, height()-7);
|
|
||||||
p.drawLine(width()-20, height()-5, width()-10, height()-5);
|
|
||||||
p.setPen(options->colorGroup(Options::Frame, isActive()).dark());
|
|
||||||
p.drawLine(width()-20, height()-6, width()-10, height()-6);
|
|
||||||
p.drawLine(width()-20, height()-4, width()-10, height()-4);
|
|
||||||
|
|
||||||
drawRoundFrame(p, 0, 0, width(), height());
|
|
||||||
}
|
|
||||||
|
|
||||||
#define QCOORDARRLEN(x) sizeof(x)/(sizeof(QCOORD)*2)
|
|
||||||
|
|
||||||
void SystemClient::doShape()
|
|
||||||
{
|
|
||||||
// using a bunch of QRect lines seems much more efficent than bitmaps or
|
|
||||||
// point arrays
|
|
||||||
|
|
||||||
QRegion mask;
|
|
||||||
kRoundMaskRegion(mask, 0, 0, width(), height());
|
|
||||||
setMask(mask);
|
|
||||||
}
|
|
||||||
|
|
||||||
void SystemClient::showEvent(QShowEvent *ev)
|
|
||||||
{
|
|
||||||
Client::showEvent(ev);
|
|
||||||
doShape();
|
|
||||||
repaint();
|
|
||||||
}
|
|
||||||
|
|
||||||
void SystemClient::windowWrapperShowEvent( QShowEvent* )
|
|
||||||
{
|
|
||||||
doShape();
|
|
||||||
}
|
|
||||||
|
|
||||||
void SystemClient::mouseDoubleClickEvent( QMouseEvent * e )
|
|
||||||
{
|
|
||||||
if (titlebar->geometry().contains( e->pos() ) )
|
|
||||||
workspace()->performWindowOperation( this, options->operationTitlebarDblClick() );
|
|
||||||
workspace()->requestFocus( this );
|
|
||||||
}
|
|
||||||
|
|
||||||
void SystemClient::stickyChange(bool on)
|
|
||||||
{
|
|
||||||
button[1]->setBitmap(on ? unsticky_bits : sticky_bits);
|
|
||||||
}
|
|
||||||
|
|
||||||
void SystemClient::maximizeChange(bool m)
|
|
||||||
{
|
|
||||||
button[3]->setBitmap(m ? minmax_bits : maximize_bits);
|
|
||||||
}
|
|
||||||
|
|
||||||
void SystemClient::init()
|
|
||||||
{
|
|
||||||
//
|
|
||||||
}
|
|
||||||
|
|
||||||
void SystemClient::activeChange(bool)
|
|
||||||
{
|
|
||||||
repaint(false);
|
|
||||||
button[0]->reset();
|
|
||||||
button[1]->reset();
|
|
||||||
button[2]->reset();
|
|
||||||
button[3]->reset();
|
|
||||||
if(button[4])
|
|
||||||
button[4]->reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C"
|
|
||||||
{
|
|
||||||
Client *allocate(Workspace *ws, WId w, int)
|
|
||||||
{
|
|
||||||
return(new SystemClient(ws, w));
|
|
||||||
}
|
|
||||||
void init()
|
|
||||||
{
|
|
||||||
create_pixmaps();
|
|
||||||
}
|
|
||||||
void reset()
|
|
||||||
{
|
|
||||||
delete_pixmaps();
|
|
||||||
create_pixmaps();
|
|
||||||
}
|
|
||||||
void deinit()
|
|
||||||
{
|
|
||||||
delete_pixmaps();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#include "systemclient.moc"
|
|
|
@ -1,79 +0,0 @@
|
||||||
#ifndef __SYSTEMCLIENT_H
|
|
||||||
#define __SYSTEMCLIENT_H
|
|
||||||
|
|
||||||
#include <qbutton.h>
|
|
||||||
#include <qtoolbutton.h>
|
|
||||||
|
|
||||||
#include <qbitmap.h>
|
|
||||||
#include <kpixmap.h>
|
|
||||||
#include "../../client.h"
|
|
||||||
|
|
||||||
|
|
||||||
class QLabel;
|
|
||||||
class QSpacerItem;
|
|
||||||
|
|
||||||
namespace KWinInternal {
|
|
||||||
|
|
||||||
class SystemButton : public QToolButton
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
SystemButton(Client *parent=0, const char *name=0,
|
|
||||||
const unsigned char *bitmap=NULL);
|
|
||||||
void setBitmap(const unsigned char *bitmap);
|
|
||||||
void reset();
|
|
||||||
QSize sizeHint() const;
|
|
||||||
signals:
|
|
||||||
void clicked( int );
|
|
||||||
protected:
|
|
||||||
virtual void drawButton(QPainter *p);
|
|
||||||
void drawButtonLabel(QPainter *){;}
|
|
||||||
QBitmap deco;
|
|
||||||
Client *client;
|
|
||||||
|
|
||||||
void mousePressEvent( QMouseEvent* e );
|
|
||||||
void mouseReleaseEvent( QMouseEvent* e );
|
|
||||||
|
|
||||||
private slots:
|
|
||||||
void handleClicked();
|
|
||||||
|
|
||||||
private:
|
|
||||||
int last_button;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
class SystemClient : public KWinInternal::Client
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
SystemClient( Workspace *ws, WId w, QWidget *parent=0, const char *name=0 );
|
|
||||||
~SystemClient(){;}
|
|
||||||
protected:
|
|
||||||
void drawRoundFrame(QPainter &p, int x, int y, int w, int h);
|
|
||||||
void resizeEvent( QResizeEvent* );
|
|
||||||
void paintEvent( QPaintEvent* );
|
|
||||||
void showEvent( QShowEvent* );
|
|
||||||
void windowWrapperShowEvent( QShowEvent* );
|
|
||||||
void mouseDoubleClickEvent( QMouseEvent * );
|
|
||||||
void init();
|
|
||||||
void captionChange( const QString& name );
|
|
||||||
void stickyChange(bool on);
|
|
||||||
void maximizeChange(bool m);
|
|
||||||
void doShape();
|
|
||||||
void recalcTitleBuffer();
|
|
||||||
void activeChange(bool);
|
|
||||||
protected slots:
|
|
||||||
void slotReset();
|
|
||||||
private slots:
|
|
||||||
void maxButtonClicked( int );
|
|
||||||
|
|
||||||
private:
|
|
||||||
SystemButton* button[5];
|
|
||||||
QSpacerItem* titlebar;
|
|
||||||
QPixmap titleBuffer;
|
|
||||||
QString oldTitle;
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
Loading…
Reference in New Issue