diff --git a/effects/shadow.cpp b/effects/shadow.cpp index 005ab05366..1b2c37c62a 100644 --- a/effects/shadow.cpp +++ b/effects/shadow.cpp @@ -27,6 +27,7 @@ ShadowEffect::ShadowEffect() shadowYOffset = conf.readEntry( "YOffset", 10 ); shadowOpacity = conf.readEntry( "Opacity", 0.2 ); shadowFuzzyness = conf.readEntry( "Fuzzyness", 10 ); + shadowSize = conf.readEntry( "Size", 5 ); QString shadowtexture = KGlobal::dirs()->findResource("data", "kwin/shadow-texture.png"); mShadowTexture = new GLTexture(shadowtexture); @@ -34,8 +35,9 @@ ShadowEffect::ShadowEffect() QRect ShadowEffect::shadowRectangle(const QRect& windowRectangle) const { - return windowRectangle.adjusted( shadowXOffset - shadowFuzzyness - 20, shadowYOffset - shadowFuzzyness - 20, - shadowXOffset + shadowFuzzyness + 20, shadowYOffset + shadowFuzzyness + 20); + int shadowGrow = shadowFuzzyness + shadowSize + 20; + return windowRectangle.adjusted( shadowXOffset - shadowGrow, shadowYOffset - shadowGrow, + shadowXOffset + shadowGrow, shadowYOffset + shadowGrow); } void ShadowEffect::prePaintWindow( EffectWindow* w, WindowPrePaintData& data, int time ) { @@ -80,14 +82,14 @@ void ShadowEffect::drawShadow( EffectWindow* window, int mask, QRegion region, W int fuzzy = shadowFuzzyness; // Shadow's size must be a least 2*fuzzy in both directions (or the corners will be broken) - int w = qMax(fuzzy*2, window->width()); - int h = qMax(fuzzy*2, window->height()); + int w = qMax(fuzzy*2, window->width() + 2*shadowSize); + int h = qMax(fuzzy*2, window->height() + 2*shadowSize); glPushMatrix(); if( mask & PAINT_WINDOW_TRANSFORMED ) glTranslatef( data.xTranslate, data.yTranslate, 0 ); - glTranslatef( window->x() + shadowXOffset - qMax(0, w - window->width()) / 2.0, - window->y() + shadowYOffset - qMax(0, h - window->height()) / 2.0, 0 ); + glTranslatef( window->x() + shadowXOffset - shadowSize - qMax(0, w - window->width()) / 2.0, + window->y() + shadowYOffset - shadowSize - qMax(0, h - window->height()) / 2.0, 0 ); if(( mask & PAINT_WINDOW_TRANSFORMED ) && ( data.xScale != 1 || data.yScale != 1 )) glScalef( data.xScale, data.yScale, 1 ); diff --git a/effects/shadow.h b/effects/shadow.h index a2434f3440..ba5c108fd2 100644 --- a/effects/shadow.h +++ b/effects/shadow.h @@ -37,6 +37,7 @@ class ShadowEffect int shadowXOffset, shadowYOffset; double shadowOpacity; int shadowFuzzyness; + int shadowSize; GLTexture* mShadowTexture; }; diff --git a/effects/shadow_config.cpp b/effects/shadow_config.cpp index ac82cf7541..4706d914cb 100644 --- a/effects/shadow_config.cpp +++ b/effects/shadow_config.cpp @@ -57,7 +57,13 @@ ShadowEffectConfig::ShadowEffectConfig(QWidget* parent, const QVariantList& args connect(mShadowFuzzyness, SIGNAL(valueChanged(int)), this, SLOT(changed())); layout->addWidget(mShadowFuzzyness, 3, 1); - layout->addItem(new QSpacerItem(10, 10, QSizePolicy::Minimum, QSizePolicy::Expanding), 4, 0, 1, 2); + layout->addWidget(new QLabel(i18n("Shadow size (relative to window):")), 4, 0); + mShadowSize = new QSpinBox; + mShadowSize->setRange(0, 20); + connect(mShadowSize, SIGNAL(valueChanged(int)), this, SLOT(changed())); + layout->addWidget(mShadowSize, 4, 1); + + layout->addItem(new QSpacerItem(10, 10, QSizePolicy::Minimum, QSizePolicy::Expanding), 5, 0, 1, 2); load(); } @@ -77,6 +83,7 @@ void ShadowEffectConfig::load() mShadowYOffset->setValue( conf.readEntry( "YOffset", 10 ) ); mShadowOpacity->setValue( (int)( conf.readEntry( "Opacity", 0.2 ) * 100 ) ); mShadowFuzzyness->setValue( conf.readEntry( "Fuzzyness", 10 ) ); + mShadowSize->setValue( conf.readEntry( "Size", 5 ) ); emit changed(false); } @@ -91,6 +98,7 @@ void ShadowEffectConfig::save() conf.writeEntry( "YOffset", mShadowYOffset->value() ); conf.writeEntry( "Opacity", mShadowOpacity->value() / 100.0 ); conf.writeEntry( "Fuzzyness", mShadowFuzzyness->value() ); + conf.writeEntry( "Size", mShadowSize->value() ); conf.sync(); emit changed(false); @@ -104,6 +112,7 @@ void ShadowEffectConfig::defaults() mShadowYOffset->setValue( 10 ); mShadowOpacity->setValue( 20 ); mShadowFuzzyness->setValue( 10 ); + mShadowSize->setValue( 5 ); emit changed(true); } diff --git a/effects/shadow_config.h b/effects/shadow_config.h index 3b44734436..7d59f60fae 100644 --- a/effects/shadow_config.h +++ b/effects/shadow_config.h @@ -36,6 +36,7 @@ class ShadowEffectConfig : public KCModule QSpinBox* mShadowYOffset; QSpinBox* mShadowOpacity; QSpinBox* mShadowFuzzyness; + QSpinBox* mShadowSize; }; } // namespace