Make it possible to increase shadow's size

svn path=/trunk/KDE/kdebase/workspace/; revision=718296
icc-effect-5.14.5
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 );
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 );

View File

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

View File

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

View File

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