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:
Daniel M. Duley 1999-11-09 11:01:31 +00:00
parent 7ef5cb7319
commit 0f3633e3f0
2 changed files with 45 additions and 14 deletions

View file

@ -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()
{ {

View file

@ -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;
}; };