Fixed shadow effect losing its shadows after making changes to the settings.
Added force mode to buildQuads() to allow refreshing the cache. Made EffectWindow::buildQuads() no longer internal. svn path=/trunk/KDE/kdebase/workspace/; revision=872836
This commit is contained in:
parent
b969ba71b7
commit
c07ba30b63
6 changed files with 19 additions and 9 deletions
|
@ -1381,9 +1381,9 @@ double EffectWindowImpl::shadowSaturation( ShadowType type ) const
|
||||||
return toplevel->workspace()->decorationShadowSaturation( type );
|
return toplevel->workspace()->decorationShadowSaturation( type );
|
||||||
}
|
}
|
||||||
|
|
||||||
WindowQuadList EffectWindowImpl::buildQuads() const
|
WindowQuadList EffectWindowImpl::buildQuads( bool force ) const
|
||||||
{
|
{
|
||||||
return sceneWindow()->buildQuads();
|
return sceneWindow()->buildQuads( force );
|
||||||
}
|
}
|
||||||
|
|
||||||
EffectWindow* effectWindow( Toplevel* w )
|
EffectWindow* effectWindow( Toplevel* w )
|
||||||
|
|
|
@ -243,7 +243,7 @@ class EffectWindowImpl : public EffectWindow
|
||||||
virtual double shadowBrightness( ShadowType type ) const;
|
virtual double shadowBrightness( ShadowType type ) const;
|
||||||
virtual double shadowSaturation( ShadowType type ) const;
|
virtual double shadowSaturation( ShadowType type ) const;
|
||||||
|
|
||||||
virtual WindowQuadList buildQuads() const;
|
virtual WindowQuadList buildQuads( bool force = false ) const;
|
||||||
|
|
||||||
const Toplevel* window() const;
|
const Toplevel* window() const;
|
||||||
Toplevel* window();
|
Toplevel* window();
|
||||||
|
|
|
@ -138,6 +138,9 @@ void ShadowEffect::reconfigure( ReconfigureFlags )
|
||||||
updateShadowColor();
|
updateShadowColor();
|
||||||
|
|
||||||
// Load decoration shadow related things
|
// Load decoration shadow related things
|
||||||
|
bool reconfiguring = false;
|
||||||
|
if( mShadowQuadTypes.count() )
|
||||||
|
reconfiguring = true;
|
||||||
mShadowQuadTypes.clear(); // Changed decoration? TODO: Unregister?
|
mShadowQuadTypes.clear(); // Changed decoration? TODO: Unregister?
|
||||||
#ifdef KWIN_HAVE_OPENGL_COMPOSITING
|
#ifdef KWIN_HAVE_OPENGL_COMPOSITING
|
||||||
if( effects->compositingType() == OpenGLCompositing )
|
if( effects->compositingType() == OpenGLCompositing )
|
||||||
|
@ -178,6 +181,12 @@ void ShadowEffect::reconfigure( ReconfigureFlags )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if( reconfiguring )
|
||||||
|
{ // Force rebuild of all quads to clear their caches
|
||||||
|
foreach( EffectWindow *w, effects->stackingOrder() )
|
||||||
|
w->buildQuads( true );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShadowEffect::updateShadowColor()
|
void ShadowEffect::updateShadowColor()
|
||||||
|
|
|
@ -837,9 +837,10 @@ class KWIN_EXPORT EffectWindow
|
||||||
* Returns the desired saturation of the shadow.
|
* Returns the desired saturation of the shadow.
|
||||||
*/
|
*/
|
||||||
virtual double shadowSaturation( ShadowType type ) const = 0;
|
virtual double shadowSaturation( ShadowType type ) const = 0;
|
||||||
|
/**
|
||||||
// TODO internal?
|
* Returns the unmodified window quad list. Can also be used to force rebuilding.
|
||||||
virtual WindowQuadList buildQuads() const = 0;
|
*/
|
||||||
|
virtual WindowQuadList buildQuads( bool force = false ) const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class KWIN_EXPORT EffectWindowGroup
|
class KWIN_EXPORT EffectWindowGroup
|
||||||
|
|
|
@ -447,9 +447,9 @@ void Scene::Window::disablePainting( int reason )
|
||||||
disable_painting |= reason;
|
disable_painting |= reason;
|
||||||
}
|
}
|
||||||
|
|
||||||
WindowQuadList Scene::Window::buildQuads() const
|
WindowQuadList Scene::Window::buildQuads( bool force ) const
|
||||||
{
|
{
|
||||||
if( cached_quad_list != NULL )
|
if( cached_quad_list != NULL && !force )
|
||||||
return *cached_quad_list;
|
return *cached_quad_list;
|
||||||
WindowQuadList ret;
|
WindowQuadList ret;
|
||||||
if( toplevel->clientPos() == QPoint( 0, 0 ) && toplevel->clientSize() == toplevel->size())
|
if( toplevel->clientPos() == QPoint( 0, 0 ) && toplevel->clientSize() == toplevel->size())
|
||||||
|
|
2
scene.h
2
scene.h
|
@ -182,7 +182,7 @@ class Scene::Window
|
||||||
void discardShape();
|
void discardShape();
|
||||||
void updateToplevel( Toplevel* c );
|
void updateToplevel( Toplevel* c );
|
||||||
// creates initial quad list for the window
|
// creates initial quad list for the window
|
||||||
virtual WindowQuadList buildQuads() const;
|
virtual WindowQuadList buildQuads( bool force = false ) const;
|
||||||
void suspendUnredirect( bool suspend );
|
void suspendUnredirect( bool suspend );
|
||||||
protected:
|
protected:
|
||||||
WindowQuadList makeQuads( WindowQuadType type, const QRegion& reg ) const;
|
WindowQuadList makeQuads( WindowQuadType type, const QRegion& reg ) const;
|
||||||
|
|
Loading…
Reference in a new issue