1
#include "kwmthemeclient.h"
8
#include <kpixmapeffect.h>
9
#include <kstandarddirs.h>
20
/* static QPixmap stretchPixmap(QPixmap& src, bool stretchVert){
22
QBitmap *srcMask, *destMask;
26
if (src.isNull()) return src;
33
for (h2=h; h2<100; h2=h2<<1)
38
for (w2=w; w2<100; w2=w2<<1)
41
if (w2==w && h2==h) return src;
47
p.drawTiledPixmap(0, 0, w2, h2, src);
50
srcMask = (QBitmap*)src.mask();
52
destMask = (QBitmap*)dest.mask();
54
p.drawTiledPixmap(0, 0, w2, h2, *srcMask);
61
inline const KDecorationOptions* options() { return KDecoration::options(); }
63
enum FramePixmap{FrameTop=0, FrameBottom, FrameLeft, FrameRight, FrameTopLeft,
64
FrameTopRight, FrameBottomLeft, FrameBottomRight};
66
static QPixmap *framePixmaps[8];
67
static QPixmap *menuPix, *iconifyPix, *closePix, *maxPix, *minmaxPix,
68
*pinupPix, *pindownPix;
69
static QPixmap *aTitlePix = 0;
70
static QPixmap *iTitlePix = 0;
71
static KPixmapEffect::GradientType grType;
72
static int maxExtent, titleAlign;
73
static bool titleGradient = true;
74
static bool pixmaps_created = false;
75
static bool titleSunken = false;
76
static bool titleTransparent;
78
static void create_pixmaps()
80
const char *keys[] = {"wm_top", "wm_bottom", "wm_left", "wm_right",
81
"wm_topleft", "wm_topright", "wm_bottomleft", "wm_bottomright"};
85
pixmaps_created = true;
87
KSharedConfig::Ptr _config = KGlobal::config();
88
KConfigGroup config(_config, "General");
92
for(int i=0; i < 8; ++i)
94
framePixmaps[i] = new QPixmap(locate("data",
95
"kwin/pics/"+config.readEntry(keys[i], " ")));
96
if(framePixmaps[i]->isNull())
97
kWarning() << "Unable to load frame pixmap for " << keys[i] ;
100
*framePixmaps[FrameTop] = stretchPixmap(*framePixmaps[FrameTop], false);
101
*framePixmaps[FrameBottom] = stretchPixmap(*framePixmaps[FrameBottom], false);
102
*framePixmaps[FrameLeft] = stretchPixmap(*framePixmaps[FrameLeft], true);
103
*framePixmaps[FrameRight] = stretchPixmap(*framePixmaps[FrameRight], true);
105
maxExtent = framePixmaps[FrameTop]->height();
106
if(framePixmaps[FrameBottom]->height() > maxExtent)
107
maxExtent = framePixmaps[FrameBottom]->height();
108
if(framePixmaps[FrameLeft]->width() > maxExtent)
109
maxExtent = framePixmaps[FrameLeft]->width();
110
if(framePixmaps[FrameRight]->width() > maxExtent)
111
maxExtent = framePixmaps[FrameRight]->width();
115
menuPix = new QPixmap(locate("data",
116
"kwin/pics/"+config.readEntry("menu", " ")));
117
iconifyPix = new QPixmap(locate("data",
118
"kwin/pics/"+config.readEntry("iconify", " ")));
119
maxPix = new QPixmap(locate("appdata",
120
"pics/"+config.readEntry("maximize", " ")));
121
minmaxPix = new QPixmap(locate("data",
122
"kwin/pics/"+config.readEntry("maximizedown", " ")));
123
closePix = new QPixmap(locate("data",
124
"kwin/pics/"+config.readEntry("close", " ")));
125
pinupPix = new QPixmap(locate("data",
126
"kwin/pics/"+config.readEntry("pinup", " ")));
127
pindownPix = new QPixmap(locate("data",
128
"kwin/pics/"+config.readEntry("pindown", " ")));
129
if(menuPix->isNull())
130
menuPix->load(locate("data", "kwin/pics/menu.png"));
131
if(iconifyPix->isNull())
132
iconifyPix->load(locate("data", "kwin/pics/iconify.png"));
134
maxPix->load(locate("data", "kwin/pics/maximize.png"));
135
if(minmaxPix->isNull())
136
minmaxPix->load(locate("data", "kwin/pics/maximizedown.png"));
137
if(closePix->isNull())
138
closePix->load(locate("data", "kwin/pics/close.png"));
139
if(pinupPix->isNull())
140
pinupPix->load(locate("data", "kwin/pics/pinup.png"));
141
if(pindownPix->isNull())
142
pindownPix->load(locate("data", "kwin/pics/pindown.png"));
144
tmpStr = config.readEntry("TitleAlignment");
145
if(tmpStr == "right")
146
titleAlign = Qt::AlignRight | Qt::AlignVCenter;
147
else if(tmpStr == "middle")
148
titleAlign = Qt::AlignCenter;
150
titleAlign = Qt::AlignLeft | Qt::AlignVCenter;
151
titleSunken = config.readEntry("TitleFrameShaded", true );
152
// titleSunken = true; // is this fixed?
153
titleTransparent = config.readEntry("PixmapUnderTitleText", true);
155
tmpStr = config.readEntry("TitlebarLook");
156
if(tmpStr == "shadedVertical"){
157
aTitlePix = new QPixmap;
158
aTitlePix->resize(32, 20);
159
KPixmapEffect::gradient(*aTitlePix,
160
options()->color(KDecorationOptions::ColorTitleBar, true),
161
options()->color(KDecorationOptions::ColorTitleBlend, true),
162
KPixmapEffect::VerticalGradient);
163
iTitlePix = new QPixmap;
164
iTitlePix->resize(32, 20);
165
KPixmapEffect::gradient(*iTitlePix,
166
options()->color(KDecorationOptions::ColorTitleBar, false),
167
options()->color(KDecorationOptions::ColorTitleBlend, false),
168
KPixmapEffect::VerticalGradient);
169
titleGradient = false; // we can just tile this
172
else if(tmpStr == "shadedHorizontal")
173
grType = KPixmapEffect::HorizontalGradient;
174
else if(tmpStr == "shadedDiagonal")
175
grType = KPixmapEffect::DiagonalGradient;
176
else if(tmpStr == "shadedCrossDiagonal")
177
grType = KPixmapEffect::CrossDiagonalGradient;
178
else if(tmpStr == "shadedPyramid")
179
grType = KPixmapEffect::PyramidGradient;
180
else if(tmpStr == "shadedRectangle")
181
grType = KPixmapEffect::RectangleGradient;
182
else if(tmpStr == "shadedPipeCross")
183
grType = KPixmapEffect::PipeCrossGradient;
184
else if(tmpStr == "shadedElliptic")
185
grType = KPixmapEffect::EllipticGradient;
187
titleGradient = false;
188
tmpStr = config.readEntry("TitlebarPixmapActive", "");
189
if(!tmpStr.isEmpty()){
190
aTitlePix = new QPixmap;
191
aTitlePix->load(locate("data", "kwin/pics/" + tmpStr));
195
tmpStr = config.readEntry("TitlebarPixmapInactive", "");
196
if(!tmpStr.isEmpty()){
197
iTitlePix = new QPixmap;
198
iTitlePix->load(locate("data", "kwin/pics/" + tmpStr));
205
static void delete_pixmaps()
207
for(int i=0; i < 8; ++i)
208
delete framePixmaps[i];
222
titleGradient = true;
223
pixmaps_created = false;
227
void MyButton::drawButtonLabel(QPainter *p)
230
// If we have a theme who's button covers the entire width or
231
// entire height, we shift down/right by 1 pixel so we have
232
// some visual notification of button presses. i.e. for MGBriezh
233
int offset = (isDown() && ((pixmap()->width() >= width()) ||
234
(pixmap()->height() >= height()))) ? 1 : 0;
235
style().drawItem(p, QRect( offset, offset, width(), height() ),
236
AlignCenter, colorGroup(),
237
true, pixmap(), QString());
241
KWMThemeClient::KWMThemeClient( KDecorationBridge* b, KDecorationFactory* f )
242
: KDecoration( b, f )
246
void KWMThemeClient::init()
248
createMainWidget( WResizeNoErase | WStaticContents );
249
widget()->installEventFilter( this );
251
stickyBtn = maxBtn = mnuBtn = 0;
252
layout = new QGridLayout(widget());
253
layout->addColSpacing(0, maxExtent);
254
layout->addColSpacing(2, maxExtent);
256
layout->addRowSpacing(0, maxExtent);
258
layout->addItem(new QSpacerItem(1, 1, QSizePolicy::Fixed,
259
QSizePolicy::Expanding));
262
layout->addWidget( new QLabel( i18n( "<center><b>KWMTheme</b></center>" ), widget()), 2, 1);
264
layout->addItem( new QSpacerItem( 0, 0 ), 2, 1);
266
// Without the next line, shading flickers
267
layout->addItem( new QSpacerItem(0, 0, QSizePolicy::Fixed, QSizePolicy::Expanding) );
268
layout->addRowSpacing(3, maxExtent);
269
layout->setRowStretch(2, 10);
270
layout->setColumnStretch(1, 10);
272
QBoxLayout* hb = new QBoxLayout(0, QBoxLayout::LeftToRight, 0, 0, 0);
273
layout->addLayout( hb, 1, 1 );
275
KSharedConfig::Ptr _config = KGlobal::config();
276
KConfigGroup config(_config, "Buttons");
280
static const char *defaultButtons[]={"Menu","Sticky","Off","Iconify",
282
static const char keyOffsets[]={"ABCDEF"};
283
for(i=0; i < 6; ++i){
285
titlebar = new QSpacerItem(10, 20, QSizePolicy::Expanding,
286
QSizePolicy::Minimum );
287
hb->addItem( titlebar );
289
QString key("Button");
290
key += QChar(keyOffsets[i]);
291
val = config.readEntry(key, defaultButtons[i]);
293
mnuBtn = new MyButton(widget(), "menu");
294
mnuBtn->setToolTip( i18n("Menu"));
296
hb->addWidget(mnuBtn);
297
mnuBtn->setFixedSize(20, 20);
298
connect(mnuBtn, SIGNAL(pressed()), this,
299
SLOT(menuButtonPressed()));
301
else if(val == "Sticky"){
302
stickyBtn = new MyButton(widget(), "sticky");
303
stickyBtn->setToolTip( i18n("Sticky"));
304
if (isOnAllDesktops())
305
stickyBtn->setPixmap(*pindownPix);
307
stickyBtn->setPixmap(*pinupPix);
308
connect(stickyBtn, SIGNAL( clicked() ), this, SLOT(toggleOnAllDesktops()));
309
hb->addWidget(stickyBtn);
310
stickyBtn->setFixedSize(20, 20);
312
else if((val == "Iconify") && isMinimizable()){
313
btn = new MyButton(widget(), "iconify");
314
btn->setToolTip( i18n("Minimize"));
315
btn->setPixmap(*iconifyPix);
316
connect(btn, SIGNAL(clicked()), this, SLOT(minimize()));
318
btn->setFixedSize(20, 20);
320
else if((val == "Maximize") && isMaximizable()){
321
maxBtn = new MyButton(widget(), "max");
322
maxBtn->setToolTip( i18n("Maximize"));
323
maxBtn->setPixmap(*maxPix);
324
connect(maxBtn, SIGNAL(clicked()), this, SLOT(maximize()));
325
hb->addWidget(maxBtn);
326
maxBtn->setFixedSize(20, 20);
328
else if((val == "Close") && isCloseable()){
329
btn = new MyButton(widget(), "close");
330
btn->setToolTip( i18n("Close"));
331
btn->setPixmap(*closePix);
332
connect(btn, SIGNAL(clicked()), this, SLOT(closeWindow()));
334
btn->setFixedSize(20, 20);
338
((val == "Iconify") && !isMinimizable()) &&
339
((val == "Maximize") && !isMaximizable()))
340
kWarning() << "KWin: Unrecognized button value: " << val ;
345
aGradient = new QPixmap;
346
iGradient = new QPixmap;
352
widget()->setBackgroundMode(NoBackground);
355
void KWMThemeClient::drawTitle(QPainter &dest)
357
QRect titleRect = titlebar->geometry();
358
QRect r(0, 0, titleRect.width(), titleRect.height());
361
if(buffer.width() == r.width())
364
buffer.resize(r.size());
369
qDrawShadeRect(&p, r, options()->palette(KDecorationOptions::ColorFrame, isActive()).active(),
371
r.setRect(r.x()+1, r.y()+1, r.width()-2, r.height()-2);
374
QPixmap *fill = isActive() ? aTitlePix : iTitlePix;
376
p.drawTiledPixmap(r, *fill);
377
else if(titleGradient){
378
fill = isActive() ? aGradient : iGradient;
379
if(fill->width() != r.width()){
380
fill->resize(r.width(), 20);
381
KPixmapEffect::gradient(*fill,
382
options()->color(KDecorationOptions::ColorTitleBar, isActive()),
383
options()->color(KDecorationOptions::ColorTitleBlend, isActive()),
386
p.drawTiledPixmap(r, *fill);
389
p.fillRect(r, options()->palette(KDecorationOptions::ColorTitleBar, isActive()).active().
390
brush(QPalette::Button));
392
p.setFont(options()->font(isActive()));
393
p.setPen(options()->color(KDecorationOptions::ColorFont, isActive()));
394
// Add left & right margin
395
r.setLeft(r.left()+5);
396
r.setRight(r.right()-5);
397
p.drawText(r, titleAlign, caption());
400
dest.drawPixmap(titleRect.x(), titleRect.y(), buffer);
404
void KWMThemeClient::resizeEvent( QResizeEvent* )
410
void KWMThemeClient::captionChange()
412
widget()->repaint( titlebar->geometry(), false );
415
void KWMThemeClient::paintEvent( QPaintEvent *)
421
int w1 = framePixmaps[FrameTopLeft]->width();
422
int h1 = framePixmaps[FrameTopLeft]->height();
423
if (w1 > width()/2) w1 = width()/2;
424
if (h1 > height()/2) h1 = height()/2;
425
p.drawPixmap(0,0,*framePixmaps[FrameTopLeft],
427
int w2 = framePixmaps[FrameTopRight]->width();
428
int h2 = framePixmaps[FrameTopRight]->height();
429
if (w2 > width()/2) w2 = width()/2;
430
if (h2 > height()/2) h2 = height()/2;
431
p.drawPixmap(width()-w2,0,*framePixmaps[FrameTopRight],
432
framePixmaps[FrameTopRight]->width()-w2,0,w2, h2);
434
int w3 = framePixmaps[FrameBottomLeft]->width();
435
int h3 = framePixmaps[FrameBottomLeft]->height();
436
if (w3 > width()/2) w3 = width()/2;
437
if (h3 > height()/2) h3 = height()/2;
438
p.drawPixmap(0,height()-h3,*framePixmaps[FrameBottomLeft],
439
0,framePixmaps[FrameBottomLeft]->height()-h3,w3, h3);
441
int w4 = framePixmaps[FrameBottomRight]->width();
442
int h4 = framePixmaps[FrameBottomRight]->height();
443
if (w4 > width()/2) w4 = width()/2;
444
if (h4 > height()/2) h4 = height()/2;
445
p.drawPixmap(width()-w4,height()-h4,*(framePixmaps[FrameBottomRight]),
446
framePixmaps[FrameBottomRight]->width()-w4,
447
framePixmaps[FrameBottomRight]->height()-h4,
454
pm = *framePixmaps[FrameTop];
461
m.scale(w/(float)pm.width(), 1);
462
pm = pm.transformed(m);
466
if (pm.width() < width()-w2-x){
467
p.drawPixmap(x,maxExtent-pm.height()-1,
472
p.drawPixmap(x,maxExtent-pm.height()-1,
474
0,0,width()-w2-x,pm.height());
481
pm = *framePixmaps[FrameBottom];
488
m.scale(w/(float)pm.width(), 1);
489
pm = pm.transformed(m);
493
if (pm.width() < width()-w4-x){
494
p.drawPixmap(x,height()-maxExtent+1,pm);
498
p.drawPixmap(x,height()-maxExtent+1,pm,
499
0,0,width()-w4-x,pm.height());
506
pm = *framePixmaps[FrameLeft];
508
if (pm.height() > 0){
513
m.scale(1, w/(float)pm.height());
514
pm = pm.transformed(m);
518
if (pm.height() < height()-h3-y){
519
p.drawPixmap(maxExtent-pm.width()-1, y,
524
p.drawPixmap(maxExtent-pm.width()-1, y,
534
pm = *framePixmaps[FrameRight];
536
if (pm.height() > 0){
541
m.scale(1, w/(float)pm.height());
542
pm = pm.transformed(m);
546
if (pm.height() < height()-h4-y){
547
p.drawPixmap(width()-maxExtent+1, y,
552
p.drawPixmap(width()-maxExtent+1, y,
562
QColor c = widget()->colorGroup().background();
564
// KWM evidently had a 1 pixel border around the client window. We
565
// emulate it here, but should be removed at some point in order to
566
// seamlessly mesh widget themes
568
p.drawRect(maxExtent-1, maxExtent-1, width()-(maxExtent-1)*2,
569
height()-(maxExtent-1)*2);
571
// We fill the area behind the wrapped widget to ensure that
572
// shading animation is drawn as smoothly as possible
573
QRect r(layout->cellGeometry(2, 1));
574
p.fillRect( r.x(), r.y(), r.width(), r.height(), c);
578
void KWMThemeClient::doShape()
581
QBitmap shapemask(width(), height());
582
shapemask.fill(color0);
589
int w1 = framePixmaps[FrameTopLeft]->width();
590
int h1 = framePixmaps[FrameTopLeft]->height();
591
if (w1 > width()/2) w1 = width()/2;
592
if (h1 > height()/2) h1 = height()/2;
593
if (framePixmaps[FrameTopLeft]->mask())
594
p.drawPixmap(0,0,*framePixmaps[FrameTopLeft]->mask(),
597
p.fillRect(0,0,w1,h1,color1);
598
int w2 = framePixmaps[FrameTopRight]->width();
599
int h2 = framePixmaps[FrameTopRight]->height();
600
if (w2 > width()/2) w2 = width()/2;
601
if (h2 > height()/2) h2 = height()/2;
602
if (framePixmaps[FrameTopRight]->mask())
603
p.drawPixmap(width()-w2,0,*framePixmaps[FrameTopRight]->mask(),
604
framePixmaps[FrameTopRight]->width()-w2,0,w2, h2);
606
p.fillRect(width()-w2,0,w2, h2,color1);
608
int w3 = framePixmaps[FrameBottomLeft]->width();
609
int h3 = framePixmaps[FrameBottomLeft]->height();
610
if (w3 > width()/2) w3 = width()/2;
611
if (h3 > height()/2) h3 = height()/2;
612
if (framePixmaps[FrameBottomLeft]->mask())
613
p.drawPixmap(0,height()-h3,*framePixmaps[FrameBottomLeft]->mask(),
614
0,framePixmaps[FrameBottomLeft]->height()-h3,w3, h3);
616
p.fillRect(0,height()-h3,w3,h3,color1);
618
int w4 = framePixmaps[FrameBottomRight]->width();
619
int h4 = framePixmaps[FrameBottomRight]->height();
620
if (w4 > width()/2) w4 = width()/2;
621
if (h4 > height()/2) h4 = height()/2;
622
if (framePixmaps[FrameBottomRight]->mask())
623
p.drawPixmap(width()-w4,height()-h4,*framePixmaps[FrameBottomRight]->mask(),
624
framePixmaps[FrameBottomRight]->width()-w4,
625
framePixmaps[FrameBottomRight]->height()-h4,
628
p.fillRect(width()-w4,height()-h4,w4,h4,color1);
634
if (framePixmaps[FrameTop]->mask())
636
pm = *framePixmaps[FrameTop]->mask();
642
m.scale(w/(float)pm.width(), 1);
643
pm = pm.transformed(m);
647
if (pm.width() < width()-w2-x){
648
p.drawPixmap(x,maxExtent-pm.height()-1,
653
p.drawPixmap(x,maxExtent-pm.height()-1,
655
0,0,width()-w2-x,pm.height());
662
if (framePixmaps[FrameBottom]->mask())
664
pm = *framePixmaps[FrameBottom]->mask();
670
m.scale(w/(float)pm.width(), 1);
671
pm = pm.transformed(m);
675
if (pm.width() < width()-w4-x){
676
p.drawPixmap(x,height()-maxExtent+1,pm);
680
p.drawPixmap(x,height()-maxExtent+1,pm,
681
0,0,width()-w4-x,pm.height());
688
if (framePixmaps[FrameLeft]->mask())
690
pm = *framePixmaps[FrameLeft]->mask();
696
m.scale(1, w/(float)pm.height());
697
pm = pm.transformed(m);
701
if (pm.height() < height()-h3-y){
702
p.drawPixmap(maxExtent-pm.width()-1, y,
707
p.drawPixmap(maxExtent-pm.width()-1, y,
717
if (framePixmaps[FrameRight]->mask())
719
pm = *framePixmaps[FrameRight]->mask();
725
m.scale(1, w/(float)pm.height());
726
pm = pm.transformed(m);
730
if (pm.height() < height()-h4-y){
731
p.drawPixmap(width()-maxExtent+1, y,
736
p.drawPixmap(width()-maxExtent+1, y,
744
p.fillRect(maxExtent-1, maxExtent-1, width()-2*maxExtent+2, height()-2*maxExtent+2, color1);
749
void KWMThemeClient::showEvent(QShowEvent *)
752
widget()->repaint(false);
755
void KWMThemeClient::mouseDoubleClickEvent( QMouseEvent * e )
757
if (e->button() == LeftButton && titlebar->geometry().contains( e->pos() ) )
758
titlebarDblClickOperation();
761
void KWMThemeClient::desktopChange()
764
bool on = isOnAllDesktops();
765
stickyBtn->setPixmap(on ? *pindownPix : *pinupPix);
766
stickyBtn->setToolTip( on ? i18n("Unsticky") : i18n("Sticky") );
770
void KWMThemeClient::maximizeChange()
773
bool m = maximizeMode() == MaximizeFull;
774
maxBtn->setPixmap(m ? *minmaxPix : *maxPix);
775
maxBtn->setToolTip( m ? i18n("Restore") : i18n("Maximize"));
779
void KWMThemeClient::slotMaximize()
781
maximize( maximizeMode() == MaximizeFull ? MaximizeRestore : MaximizeFull );
784
void KWMThemeClient::activeChange()
789
KDecoration::Position KWMThemeClient::mousePosition(const QPoint &p) const
791
Position m = KDecoration::mousePosition(p);
793
if(p.y() < framePixmaps[FrameTop]->height() &&
794
p.x() < framePixmaps[FrameLeft]->width()){
797
else if(p.y() < framePixmaps[FrameTop]->height() &&
798
p.x() > width()-framePixmaps[FrameRight]->width()){
799
m = PositionTopRight;
801
else if(p.y() > height()-framePixmaps[FrameBottom]->height() &&
802
p.x() < framePixmaps[FrameLeft]->width()){
803
m = PositionBottomLeft;
805
else if(p.y() > height()-framePixmaps[FrameBottom]->height() &&
806
p.x() > width()-framePixmaps[FrameRight]->width()){
807
m = PositionBottomRight;
809
else if(p.y() < framePixmaps[FrameTop]->height())
811
else if(p.y() > height()-framePixmaps[FrameBottom]->height())
813
else if(p.x() < framePixmaps[FrameLeft]->width())
815
else if(p.x() > width()-framePixmaps[FrameRight]->width())
820
void KWMThemeClient::menuButtonPressed()
822
mnuBtn->setDown(false); // will stay down if I don't do this
823
QPoint pos = mnuBtn->mapToGlobal(mnuBtn->rect().bottomLeft());
824
showWindowMenu( pos );
827
void KWMThemeClient::iconChange()
830
if( icon().pixmap( QIcon::Small, QIcon::Normal ).isNull()){
831
mnuBtn->setPixmap(*menuPix);
834
mnuBtn->setPixmap(icon().pixmap( QIcon::Small, QIcon::Normal ));
839
bool KWMThemeClient::eventFilter( QObject* o, QEvent* e )
847
resizeEvent( static_cast< QResizeEvent* >( e ) );
851
paintEvent( static_cast< QPaintEvent* >( e ) );
854
case QEvent::MouseButtonDblClick:
855
mouseDoubleClickEvent( static_cast< QMouseEvent* >( e ) );
858
case QEvent::MouseButtonPress:
859
processMousePressEvent( static_cast< QMouseEvent* >( e ) );
863
showEvent( static_cast< QShowEvent* >( e ) );
871
QSize KWMThemeClient::minimumSize() const
873
return widget()->minimumSize().expandedTo( QSize( 100, 50 ));
876
void KWMThemeClient::resize( const QSize& s )
878
widget()->resize( s );
881
void KWMThemeClient::borders( int& left, int& right, int& top, int& bottom ) const
891
KWMThemeFactory::KWMThemeFactory()
896
KWMThemeFactory::~KWMThemeFactory()
901
KDecoration* KWMThemeFactory::createDecoration( KDecorationBridge* b )
903
return new KWMThemeClient( b, this );
906
bool KWMThemeFactory::reset( unsigned long mask )
908
bool needHardReset = false;
912
// doesn't obey the Border size setting
913
if( mask & ( SettingFont | SettingButtons ))
914
needHardReset = true;
916
if( mask & ( SettingFont | SettingColors )) {
917
KWMTheme::delete_pixmaps();
918
KWMTheme::create_pixmaps();
922
resetDecorations( mask );
923
return needHardReset;
930
KDE_EXPORT KDecorationFactory *create_factory()
932
return new KWMTheme::KWMThemeFactory();
936
#include "kwmthemeclient.moc"