Make it possible to increase shadow's size

svn path=/trunk/KDE/kdebase/workspace/; revision=718296
This commit is contained in:
Rivo Laks 2007-09-28 12:24:11 +00:00
parent 10de671bc9
commit 3c195c505d
4 changed files with 20 additions and 7 deletions

View file

@ -27,6 +27,7 @@ ShadowEffect::ShadowEffect()
shadowYOffset = conf.readEntry( "YOffset", 10 ); shadowYOffset = conf.readEntry( "YOffset", 10 );
shadowOpacity = conf.readEntry( "Opacity", 0.2 ); shadowOpacity = conf.readEntry( "Opacity", 0.2 );
shadowFuzzyness = conf.readEntry( "Fuzzyness", 10 ); shadowFuzzyness = conf.readEntry( "Fuzzyness", 10 );
shadowSize = conf.readEntry( "Size", 5 );
QString shadowtexture = KGlobal::dirs()->findResource("data", "kwin/shadow-texture.png"); QString shadowtexture = KGlobal::dirs()->findResource("data", "kwin/shadow-texture.png");
mShadowTexture = new GLTexture(shadowtexture); mShadowTexture = new GLTexture(shadowtexture);
@ -34,8 +35,9 @@ ShadowEffect::ShadowEffect()
QRect ShadowEffect::shadowRectangle(const QRect& windowRectangle) const QRect ShadowEffect::shadowRectangle(const QRect& windowRectangle) const
{ {
return windowRectangle.adjusted( shadowXOffset - shadowFuzzyness - 20, shadowYOffset - shadowFuzzyness - 20, int shadowGrow = shadowFuzzyness + shadowSize + 20;
shadowXOffset + shadowFuzzyness + 20, shadowYOffset + shadowFuzzyness + 20); return windowRectangle.adjusted( shadowXOffset - shadowGrow, shadowYOffset - shadowGrow,
shadowXOffset + shadowGrow, shadowYOffset + shadowGrow);
} }
void ShadowEffect::prePaintWindow( EffectWindow* w, WindowPrePaintData& data, int time ) 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; int fuzzy = shadowFuzzyness;
// Shadow's size must be a least 2*fuzzy in both directions (or the corners will be broken) // 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 w = qMax(fuzzy*2, window->width() + 2*shadowSize);
int h = qMax(fuzzy*2, window->height()); int h = qMax(fuzzy*2, window->height() + 2*shadowSize);
glPushMatrix(); glPushMatrix();
if( mask & PAINT_WINDOW_TRANSFORMED ) if( mask & PAINT_WINDOW_TRANSFORMED )
glTranslatef( data.xTranslate, data.yTranslate, 0 ); glTranslatef( data.xTranslate, data.yTranslate, 0 );
glTranslatef( window->x() + shadowXOffset - qMax(0, w - window->width()) / 2.0, glTranslatef( window->x() + shadowXOffset - shadowSize - qMax(0, w - window->width()) / 2.0,
window->y() + shadowYOffset - qMax(0, h - window->height()) / 2.0, 0 ); window->y() + shadowYOffset - shadowSize - qMax(0, h - window->height()) / 2.0, 0 );
if(( mask & PAINT_WINDOW_TRANSFORMED ) && ( data.xScale != 1 || data.yScale != 1 )) if(( mask & PAINT_WINDOW_TRANSFORMED ) && ( data.xScale != 1 || data.yScale != 1 ))
glScalef( data.xScale, data.yScale, 1 ); glScalef( data.xScale, data.yScale, 1 );

View file

@ -37,6 +37,7 @@ class ShadowEffect
int shadowXOffset, shadowYOffset; int shadowXOffset, shadowYOffset;
double shadowOpacity; double shadowOpacity;
int shadowFuzzyness; int shadowFuzzyness;
int shadowSize;
GLTexture* mShadowTexture; GLTexture* mShadowTexture;
}; };

View file

@ -57,7 +57,13 @@ ShadowEffectConfig::ShadowEffectConfig(QWidget* parent, const QVariantList& args
connect(mShadowFuzzyness, SIGNAL(valueChanged(int)), this, SLOT(changed())); connect(mShadowFuzzyness, SIGNAL(valueChanged(int)), this, SLOT(changed()));
layout->addWidget(mShadowFuzzyness, 3, 1); 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(); load();
} }
@ -77,6 +83,7 @@ void ShadowEffectConfig::load()
mShadowYOffset->setValue( conf.readEntry( "YOffset", 10 ) ); mShadowYOffset->setValue( conf.readEntry( "YOffset", 10 ) );
mShadowOpacity->setValue( (int)( conf.readEntry( "Opacity", 0.2 ) * 100 ) ); mShadowOpacity->setValue( (int)( conf.readEntry( "Opacity", 0.2 ) * 100 ) );
mShadowFuzzyness->setValue( conf.readEntry( "Fuzzyness", 10 ) ); mShadowFuzzyness->setValue( conf.readEntry( "Fuzzyness", 10 ) );
mShadowSize->setValue( conf.readEntry( "Size", 5 ) );
emit changed(false); emit changed(false);
} }
@ -91,6 +98,7 @@ void ShadowEffectConfig::save()
conf.writeEntry( "YOffset", mShadowYOffset->value() ); conf.writeEntry( "YOffset", mShadowYOffset->value() );
conf.writeEntry( "Opacity", mShadowOpacity->value() / 100.0 ); conf.writeEntry( "Opacity", mShadowOpacity->value() / 100.0 );
conf.writeEntry( "Fuzzyness", mShadowFuzzyness->value() ); conf.writeEntry( "Fuzzyness", mShadowFuzzyness->value() );
conf.writeEntry( "Size", mShadowSize->value() );
conf.sync(); conf.sync();
emit changed(false); emit changed(false);
@ -104,6 +112,7 @@ void ShadowEffectConfig::defaults()
mShadowYOffset->setValue( 10 ); mShadowYOffset->setValue( 10 );
mShadowOpacity->setValue( 20 ); mShadowOpacity->setValue( 20 );
mShadowFuzzyness->setValue( 10 ); mShadowFuzzyness->setValue( 10 );
mShadowSize->setValue( 5 );
emit changed(true); emit changed(true);
} }

View file

@ -36,6 +36,7 @@ class ShadowEffectConfig : public KCModule
QSpinBox* mShadowYOffset; QSpinBox* mShadowYOffset;
QSpinBox* mShadowOpacity; QSpinBox* mShadowOpacity;
QSpinBox* mShadowFuzzyness; QSpinBox* mShadowFuzzyness;
QSpinBox* mShadowSize;
}; };
} // namespace } // namespace