Sticky button for the system theme. I wasn't going to have it but Matthias
brought it up a few times ;-) svn path=/trunk/kdebase/kwin/; revision=33318
This commit is contained in:
parent
7ef5cb7319
commit
0f3633e3f0
2 changed files with 45 additions and 14 deletions
|
@ -20,6 +20,12 @@ static unsigned char close_bits[] = {
|
||||||
static unsigned char maximize_bits[] = {
|
static unsigned char maximize_bits[] = {
|
||||||
0x3f, 0x9f, 0xcf, 0x67, 0x33, 0x19, 0x0c, 0x06 };
|
0x3f, 0x9f, 0xcf, 0x67, 0x33, 0x19, 0x0c, 0x06 };
|
||||||
|
|
||||||
|
static unsigned char sticky_bits[] = {
|
||||||
|
0x00, 0x18, 0x18, 0x7e, 0x7e, 0x18, 0x18, 0x00};
|
||||||
|
|
||||||
|
static unsigned char unsticky_bits[] = {
|
||||||
|
0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00};
|
||||||
|
|
||||||
static QPixmap *titlePix=0;
|
static QPixmap *titlePix=0;
|
||||||
static KPixmap *aFramePix=0;
|
static KPixmap *aFramePix=0;
|
||||||
static KPixmap *iFramePix=0;
|
static KPixmap *iFramePix=0;
|
||||||
|
@ -79,8 +85,8 @@ static void create_pixmaps()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SystemButton::SystemButton(const unsigned char *bitmap, QWidget *parent,
|
SystemButton::SystemButton(QWidget *parent, const char *name,
|
||||||
const char *name)
|
const unsigned char *bitmap)
|
||||||
: QButton(parent, name)
|
: QButton(parent, name)
|
||||||
{
|
{
|
||||||
QPainter p;
|
QPainter p;
|
||||||
|
@ -132,8 +138,6 @@ SystemButton::SystemButton(const unsigned char *bitmap, QWidget *parent,
|
||||||
p.drawRect(0, 0, 16, 16);
|
p.drawRect(0, 0, 16, 16);
|
||||||
p.end();
|
p.end();
|
||||||
|
|
||||||
deco = QBitmap(8, 8, bitmap);
|
|
||||||
deco.setMask(deco);
|
|
||||||
resize(16, 16);
|
resize(16, 16);
|
||||||
|
|
||||||
QBitmap mask;
|
QBitmap mask;
|
||||||
|
@ -147,7 +151,16 @@ SystemButton::SystemButton(const unsigned char *bitmap, QWidget *parent,
|
||||||
p.drawPoint(15, 15);
|
p.drawPoint(15, 15);
|
||||||
p.end();
|
p.end();
|
||||||
setMask(mask);
|
setMask(mask);
|
||||||
|
|
||||||
|
if(bitmap)
|
||||||
|
setBitmap(bitmap);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SystemButton::setBitmap(const unsigned char *bitmap)
|
||||||
|
{
|
||||||
|
deco = QBitmap(8, 8, bitmap);
|
||||||
|
deco.setMask(deco);
|
||||||
|
repaint();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SystemButton::drawButton(QPainter *p)
|
void SystemButton::drawButton(QPainter *p)
|
||||||
|
@ -172,12 +185,19 @@ SystemClient::SystemClient( Workspace *ws, WId w, QWidget *parent,
|
||||||
g->addWidget(windowWrapper(), 1, 1 );
|
g->addWidget(windowWrapper(), 1, 1 );
|
||||||
g->addRowSpacing(2, 6);
|
g->addRowSpacing(2, 6);
|
||||||
|
|
||||||
button[0] = new SystemButton(close_bits, this );
|
button[0] = new SystemButton(this, "close", close_bits);
|
||||||
button[1] = new SystemButton(iconify_bits, this );
|
button[1] = new SystemButton(this, "sticky");
|
||||||
button[2] = new SystemButton(maximize_bits, this );
|
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);
|
||||||
|
|
||||||
connect( button[0], SIGNAL( clicked() ), this, ( SLOT( closeWindow() ) ) );
|
connect( button[0], SIGNAL( clicked() ), this, ( SLOT( closeWindow() ) ) );
|
||||||
connect( button[1], SIGNAL( clicked() ), this, ( SLOT( iconify() ) ) );
|
connect( button[1], SIGNAL( clicked() ), this, ( SLOT( toggleSticky() ) ) );
|
||||||
connect( button[2], SIGNAL( clicked() ), this, ( SLOT( maximize() ) ) );
|
connect( button[2], SIGNAL( clicked() ), this, ( SLOT( iconify() ) ) );
|
||||||
|
connect( button[3], SIGNAL( clicked() ), this, ( SLOT( maximize() ) ) );
|
||||||
|
|
||||||
QHBoxLayout* hb = new QHBoxLayout();
|
QHBoxLayout* hb = new QHBoxLayout();
|
||||||
g->addLayout( hb, 0, 1 );
|
g->addLayout( hb, 0, 1 );
|
||||||
|
@ -189,9 +209,10 @@ SystemClient::SystemClient( Workspace *ws, WId w, QWidget *parent,
|
||||||
hb->addSpacing(2);
|
hb->addSpacing(2);
|
||||||
hb->addWidget( button[1] );
|
hb->addWidget( button[1] );
|
||||||
hb->addWidget( button[2] );
|
hb->addWidget( button[2] );
|
||||||
|
hb->addWidget( button[3] );
|
||||||
hb->addSpacing(2);
|
hb->addSpacing(2);
|
||||||
|
|
||||||
for ( int i = 0; i < 3; i++) {
|
for ( int i = 0; i < 4; i++) {
|
||||||
button[i]->setMouseTracking( TRUE );
|
button[i]->setMouseTracking( TRUE );
|
||||||
button[i]->setFixedSize( 16, 16 );
|
button[i]->setFixedSize( 16, 16 );
|
||||||
}
|
}
|
||||||
|
@ -279,6 +300,14 @@ void SystemClient::mouseDoubleClickEvent( QMouseEvent * e )
|
||||||
workspace()->requestFocus( this );
|
workspace()->requestFocus( this );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SystemClient::stickyChange(bool on)
|
||||||
|
{
|
||||||
|
if(on)
|
||||||
|
button[1]->setBitmap(unsticky_bits);
|
||||||
|
else
|
||||||
|
button[1]->setBitmap(sticky_bits);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void SystemClient::init()
|
void SystemClient::init()
|
||||||
{
|
{
|
||||||
|
|
|
@ -13,8 +13,9 @@ class QSpacerItem;
|
||||||
class SystemButton : public QButton
|
class SystemButton : public QButton
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SystemButton(const unsigned char *bitmap, QWidget *parent=0,
|
SystemButton(QWidget *parent=0, const char *name=0,
|
||||||
const char *name=0);
|
const unsigned char *bitmap=NULL);
|
||||||
|
void setBitmap(const unsigned char *bitmap);
|
||||||
protected:
|
protected:
|
||||||
virtual void drawButton(QPainter *p);
|
virtual void drawButton(QPainter *p);
|
||||||
void drawButtonLabel(QPainter *){;}
|
void drawButtonLabel(QPainter *){;}
|
||||||
|
@ -35,8 +36,9 @@ protected:
|
||||||
void mouseDoubleClickEvent( QMouseEvent * );
|
void mouseDoubleClickEvent( QMouseEvent * );
|
||||||
void init();
|
void init();
|
||||||
void captionChange( const QString& name );
|
void captionChange( const QString& name );
|
||||||
|
void stickyChange(bool on);
|
||||||
private:
|
private:
|
||||||
SystemButton* button[3];
|
SystemButton* button[4];
|
||||||
QSpacerItem* titlebar;
|
QSpacerItem* titlebar;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue