summaryrefslogtreecommitdiff
path: root/vcl/headless
diff options
context:
space:
mode:
authorMichael Meeks <michael.meeks@suse.com>2012-02-25 14:13:08 +0000
committerMichael Meeks <michael.meeks@suse.com>2012-02-25 14:17:57 +0000
commit9ab611a652334a98ba7922ee6a53b61bbcc4892f (patch)
treeb12763802820f501f85148b19748538e54227e84 /vcl/headless
parent7e454a3e3dc7f7f85a623ab6a7afab6f40bccaa6 (diff)
android: move DamageTracker concept into SvpSalFrame and try to use it
Diffstat (limited to 'vcl/headless')
-rw-r--r--vcl/headless/svpframe.cxx39
-rw-r--r--vcl/headless/svpinst.cxx5
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 )