Add slight animations to the dim inactive effect. Also don't dim windows
when a fullscreen effect is active, fixes dimmed windows during coverswitch. BUG: 165295 svn path=/trunk/KDE/kdebase/workspace/; revision=922574
This commit is contained in:
parent
1db192a11d
commit
681cda92b5
2 changed files with 35 additions and 3 deletions
|
@ -31,7 +31,10 @@ KWIN_EFFECT( diminactive, DimInactiveEffect )
|
|||
DimInactiveEffect::DimInactiveEffect()
|
||||
{
|
||||
reconfigure( ReconfigureAll );
|
||||
timeline.setDuration( 250 );
|
||||
previousActiveTimeline.setDuration( 250 );
|
||||
active = effects->activeWindow();
|
||||
previousActive = NULL;
|
||||
}
|
||||
|
||||
void DimInactiveEffect::reconfigure( ReconfigureFlags )
|
||||
|
@ -43,12 +46,34 @@ void DimInactiveEffect::reconfigure( ReconfigureFlags )
|
|||
dim_strength = conf.readEntry("Strength", 25);
|
||||
}
|
||||
|
||||
void DimInactiveEffect::prePaintScreen( ScreenPrePaintData& data, int time )
|
||||
{
|
||||
double oldValue = timeline.value();
|
||||
if( effects->activeFullScreenEffect() )
|
||||
timeline.removeTime( time );
|
||||
else
|
||||
timeline.addTime( time );
|
||||
if( oldValue != timeline.value() )
|
||||
effects->addRepaintFull();
|
||||
if( previousActive )
|
||||
{ // We are fading out the previous window
|
||||
previousActive->addRepaintFull();
|
||||
previousActiveTimeline.addTime( time );
|
||||
}
|
||||
effects->prePaintScreen( data, time );
|
||||
}
|
||||
|
||||
void DimInactiveEffect::paintWindow( EffectWindow* w, int mask, QRegion region, WindowPaintData& data )
|
||||
{
|
||||
if( dimWindow( w ))
|
||||
if( dimWindow( w ) || w == previousActive )
|
||||
{
|
||||
data.brightness *= (1.0 - (dim_strength / 100.0));
|
||||
data.saturation *= (1.0 - (dim_strength / 100.0));
|
||||
double previous = 1.0;
|
||||
if( w == previousActive )
|
||||
previous = previousActiveTimeline.value();
|
||||
if( previousActiveTimeline.value() == 1.0 )
|
||||
previousActive = NULL;
|
||||
data.brightness *= (1.0 - (dim_strength / 100.0) * timeline.value() * previous );
|
||||
data.saturation *= (1.0 - (dim_strength / 100.0) * timeline.value() * previous );
|
||||
}
|
||||
effects->paintWindow( w, mask, region, data );
|
||||
}
|
||||
|
@ -76,6 +101,9 @@ void DimInactiveEffect::windowActivated( EffectWindow* w )
|
|||
{
|
||||
if( active != NULL )
|
||||
{
|
||||
previousActive = active;
|
||||
previousActiveTimeline.setProgress( 0.0 );
|
||||
|
||||
if( dim_by_group )
|
||||
{
|
||||
if(( w == NULL || w->group() != active->group()) && active->group() != NULL )
|
||||
|
|
|
@ -35,11 +35,15 @@ class DimInactiveEffect
|
|||
public:
|
||||
DimInactiveEffect();
|
||||
virtual void reconfigure( ReconfigureFlags );
|
||||
virtual void prePaintScreen( ScreenPrePaintData& data, int time );
|
||||
virtual void paintWindow( EffectWindow* w, int mask, QRegion region, WindowPaintData& data );
|
||||
virtual void windowActivated( EffectWindow* c );
|
||||
private:
|
||||
bool dimWindow( const EffectWindow* w ) const;
|
||||
TimeLine timeline;
|
||||
EffectWindow* active;
|
||||
EffectWindow* previousActive;
|
||||
TimeLine previousActiveTimeline;
|
||||
int dim_strength; // reduce saturation and brightness by this percentage
|
||||
bool dim_panels; // do/don't dim also all panels
|
||||
bool dim_desktop; // do/don't dim the desktop
|
||||
|
|
Loading…
Reference in a new issue