Implement all missing Scene virtuals.

svn path=/branches/work/kwin_composite/; revision=591145
This commit is contained in:
Luboš Luňák 2006-10-01 21:14:53 +00:00
parent b59701f608
commit f14000b7fb
3 changed files with 36 additions and 3 deletions

View file

@ -23,12 +23,21 @@ class Scene
public: public:
Scene( Workspace* ws ); Scene( Workspace* ws );
virtual ~Scene(); virtual ~Scene();
// repaints the given screen areas, windows provides the stacking order
virtual void paint( QRegion damage, ToplevelList windows ) = 0; virtual void paint( QRegion damage, ToplevelList windows ) = 0;
// shape/size of a window changed
virtual void windowGeometryShapeChanged( Toplevel* ); virtual void windowGeometryShapeChanged( Toplevel* );
// opacity of a window changed
virtual void windowOpacityChanged( Toplevel* ); virtual void windowOpacityChanged( Toplevel* );
// a new window has been created
virtual void windowAdded( Toplevel* ); virtual void windowAdded( Toplevel* );
// a window has been destroyed
virtual void windowDeleted( Toplevel* ); virtual void windowDeleted( Toplevel* );
// transforms the window areas to screen areas
virtual void transformWindowDamage( Toplevel*, QRegion& ) const; virtual void transformWindowDamage( Toplevel*, QRegion& ) const;
// updates cached window information after an effect changes
// transformation
// TODO - remove?
virtual void updateTransformation( Toplevel* ); virtual void updateTransformation( Toplevel* );
protected: protected:
Workspace* wspace; Workspace* wspace;

View file

@ -184,6 +184,26 @@ void SceneOpenGL::windowGeometryShapeChanged( Toplevel* c )
w.discardTexture(); w.discardTexture();
} }
void SceneOpenGL::windowOpacityChanged( Toplevel* )
{
#if 0 // not really needed, windows are painted on every repaint
// and opacity is used when applying texture, not when
// creating it
if( !windows.contains( c )) // this is ok, texture is created
return; // on demand
Window& w = windows[ c ];
w.discardPixmap();
w.discardTexture();
#endif
}
void SceneOpenGL::updateTransformation( Toplevel* c )
{
// TODO this is only used in effects to later update
// screen damage - since opengl doesn't use screen
// damage, just leave this empty
}
SceneOpenGL::Window::Window( Toplevel* c ) SceneOpenGL::Window::Window( Toplevel* c )
: toplevel( c ) : toplevel( c )
, glxpixmap( None ) , glxpixmap( None )

View file

@ -27,9 +27,13 @@ class SceneOpenGL
SceneOpenGL( Workspace* ws ); SceneOpenGL( Workspace* ws );
virtual ~SceneOpenGL(); virtual ~SceneOpenGL();
virtual void paint( QRegion damage, ToplevelList windows ); virtual void paint( QRegion damage, ToplevelList windows );
virtual void windowAdded( Toplevel* c ); virtual void windowGeometryShapeChanged( Toplevel* );
virtual void windowDeleted( Toplevel* c ); virtual void windowOpacityChanged( Toplevel* );
virtual void windowGeometryShapeChanged( Toplevel* c ); virtual void windowAdded( Toplevel* );
virtual void windowDeleted( Toplevel* );
// screen damage is not used with opengl, it's completely repainted
// virtual void transformWindowDamage( Toplevel*, QRegion& ) const;
virtual void updateTransformation( Toplevel* );
private: private:
typedef GLuint Texture; typedef GLuint Texture;
GC gcroot; GC gcroot;