@ -20,6 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
# include "scene_qpainter_virtual_backend.h"
# include "virtual_backend.h"
# include "cursor.h"
# include "screens.h"
# include <QPainter>
@ -27,16 +28,22 @@ namespace KWin
{
VirtualQPainterBackend : : VirtualQPainterBackend ( VirtualBackend * backend )
: QPainterBackend ( )
, m_backBuffer ( backend - > size ( ) , QImage : : Format_RGB32 )
, m_backend ( backend )
{
connect ( screens ( ) , & Screens : : changed , this , & VirtualQPainterBackend : : createOutputs ) ;
createOutputs ( ) ;
}
VirtualQPainterBackend : : ~ VirtualQPainterBackend ( ) = default ;
QImage * VirtualQPainterBackend : : buffer ( )
{
return & m_backBuffer ;
return & m_backBuffers [ 0 ] ;
}
QImage * VirtualQPainterBackend : : bufferForScreen ( int screen )
{
return & m_backBuffers [ screen ] ;
}
bool VirtualQPainterBackend : : needsFullRepaint ( ) const
@ -48,11 +55,13 @@ void VirtualQPainterBackend::prepareRenderingFrame()
{
}
void VirtualQPainterBackend : : screenGeometryChanged ( const QSize & size )
void VirtualQPainterBackend : : createOutputs ( )
{
if ( m_backBuffer . size ( ) ! = size ) {
m_backBuffer = QImage ( size , QImage : : Format_RGB32 ) ;
m_backBuffer . fill ( Qt : : black ) ;
m_backBuffers . clear ( ) ;
for ( int i = 0 ; i < screens ( ) - > count ( ) ; + + i ) {
QImage buffer ( screens ( ) - > size ( i ) , QImage : : Format_RGB32 ) ;
buffer . fill ( Qt : : black ) ;
m_backBuffers < < buffer ;
}
}
@ -61,7 +70,9 @@ void VirtualQPainterBackend::present(int mask, const QRegion &damage)
Q_UNUSED ( mask )
Q_UNUSED ( damage )
if ( m_backend - > saveFrames ( ) ) {
m_backBuffer . save ( QStringLiteral ( " %1/%2.png " ) . arg ( m_backend - > screenshotDirPath ( ) ) . arg ( QString : : number ( m_frameCounter + + ) ) ) ;
for ( int i = 0 ; i < m_backBuffers . size ( ) ; i + + ) {
m_backBuffers [ i ] . save ( QStringLiteral ( " %1/screen%2-%3.png " ) . arg ( m_backend - > screenshotDirPath ( ) , QString : : number ( i ) , QString : : number ( m_frameCounter + + ) ) ) ;
}
}
}
@ -70,4 +81,9 @@ bool VirtualQPainterBackend::usesOverlayWindow() const
return false ;
}
bool VirtualQPainterBackend : : perScreenRendering ( ) const
{
return true ;
}
}