diff options
author | Michael Meeks <michael.meeks@suse.com> | 2012-02-25 14:13:08 +0000 |
---|---|---|
committer | Michael Meeks <michael.meeks@suse.com> | 2012-02-25 14:17:57 +0000 |
commit | 9ab611a652334a98ba7922ee6a53b61bbcc4892f (patch) | |
tree | b12763802820f501f85148b19748538e54227e84 /vcl/headless | |
parent | 7e454a3e3dc7f7f85a623ab6a7afab6f40bccaa6 (diff) |
android: move DamageTracker concept into SvpSalFrame and try to use it
Diffstat (limited to 'vcl/headless')
-rw-r--r-- | vcl/headless/svpframe.cxx | 39 | ||||
-rw-r--r-- | vcl/headless/svpinst.cxx | 5 |
2 files changed, 41 insertions, 3 deletions
diff --git a/vcl/headless/svpframe.cxx b/vcl/headless/svpframe.cxx index ae5614226022..45c9dadcd61a 100644 --- a/vcl/headless/svpframe.cxx +++ b/vcl/headless/svpframe.cxx @@ -31,6 +31,7 @@ #include "headless/svpinst.hxx" #include "headless/svpgdi.hxx" +#include <basebmp/bitmapdevice.hxx> #include <basebmp/scanlineformats.hxx> #include <basegfx/vector/b2ivector.hxx> @@ -39,14 +40,47 @@ using namespace basegfx; SvpSalFrame* SvpSalFrame::s_pFocusFrame = NULL; +namespace { + /// Decouple SalFrame lifetime from damagetracker lifetime + struct DamageTracker : public basebmp::IBitmapDeviceDamageTracker + { + DamageTracker( SvpSalFrame& rFrame ) : m_rFrame( rFrame ) {} + virtual void damaged( const basegfx::B2IBox& rDamageRect ) const + { + m_rFrame.damaged( rDamageRect ); + } + SvpSalFrame& m_rFrame; + }; +} + +void SvpSalFrame::enableDamageTracker( bool bOn ) +{ + if( m_bDamageTracking == bOn ) + return; + if( m_aFrame.get() ) + { + if( m_bDamageTracking ) + m_aFrame->setDamageTracker( basebmp::IBitmapDeviceDamageTrackerSharedPtr() ); + else + m_aFrame->setDamageTracker( + basebmp::IBitmapDeviceDamageTrackerSharedPtr( new DamageTracker( *this ) ) ); + } + m_bDamageTracking = bOn; +} + SvpSalFrame::SvpSalFrame( SvpSalInstance* pInstance, SalFrame* pParent, sal_uLong nSalFrameStyle, + bool bTopDown, + sal_Int32 nScanlineFormat, SystemParentData* ) : m_pInstance( pInstance ), m_pParent( static_cast<SvpSalFrame*>(pParent) ), m_nStyle( nSalFrameStyle ), m_bVisible( false ), + m_bDamageTracking( false ), + m_bTopDown( bTopDown ), + m_nScanlineFormat( nScanlineFormat ), m_nMinWidth( 0 ), m_nMinHeight( 0 ), m_nMaxWidth( 0 ), @@ -242,7 +276,10 @@ void SvpSalFrame::SetPosSize( long nX, long nY, long nWidth, long nHeight, sal_u aFrameSize.setX( 1 ); if( aFrameSize.getY() == 0 ) aFrameSize.setY( 1 ); - m_aFrame = createBitmapDevice( aFrameSize, false, SVP_DEFAULT_BITMAP_FORMAT ); + m_aFrame = createBitmapDevice( aFrameSize, m_bTopDown, m_nScanlineFormat ); + if (m_bDamageTracking) + m_aFrame->setDamageTracker( + basebmp::IBitmapDeviceDamageTrackerSharedPtr( new DamageTracker( *this ) ) ); // update device in existing graphics for( std::list< SvpSalGraphics* >::iterator it = m_aGraphics.begin(); it != m_aGraphics.end(); ++it ) diff --git a/vcl/headless/svpinst.cxx b/vcl/headless/svpinst.cxx index 91bbff33de92..f0557f1cd468 100644 --- a/vcl/headless/svpinst.cxx +++ b/vcl/headless/svpinst.cxx @@ -44,6 +44,7 @@ #include <salframe.hxx> #include <svdata.hxx> #include <generic/gendata.hxx> +#include <basebmp/scanlineformats.hxx> #include <vcl/solarmutex.hxx> // FIXME: remove when we re-work the svp mainloop #include <unx/salunxtime.h> @@ -182,12 +183,12 @@ bool SvpSalInstance::CheckTimeout( bool bExecuteTimers ) SalFrame* SvpSalInstance::CreateChildFrame( SystemParentData* pParent, sal_uLong nStyle ) { - return new SvpSalFrame( this, NULL, nStyle, pParent ); + return new SvpSalFrame( this, NULL, nStyle, false, SVP_DEFAULT_BITMAP_FORMAT, pParent ); } SalFrame* SvpSalInstance::CreateFrame( SalFrame* pParent, sal_uLong nStyle ) { - return new SvpSalFrame( this, pParent, nStyle ); + return new SvpSalFrame( this, pParent, nStyle, false, SVP_DEFAULT_BITMAP_FORMAT ); } void SvpSalInstance::DestroyFrame( SalFrame* pFrame ) |