Kaydet (Commit) 56fea375 authored tarafından Andrzej Hunt's avatar Andrzej Hunt

Allow passing in external buffers to svp's VirtualDevice.

We also want to be able to set whether or not the buffers
should be painted to top down, so add that parameter
as necessary (default seems to be false, however e.g. gtk
requires this to be true, i.e. needed for tiled rendering).

Change-Id: Id98882e4c7f62508ae5a976c0d8df743460a4ab2
üst 01bd2bd3
...@@ -43,8 +43,12 @@ private: ...@@ -43,8 +43,12 @@ private:
sal_uInt8 meRefDevMode; sal_uInt8 meRefDevMode;
SAL_DLLPRIVATE void ImplInitVirDev( const OutputDevice* pOutDev, long nDX, long nDY, sal_uInt16 nBitCount, const SystemGraphicsData *pData = NULL ); SAL_DLLPRIVATE void ImplInitVirDev( const OutputDevice* pOutDev, long nDX, long nDY, sal_uInt16 nBitCount, const SystemGraphicsData *pData = NULL );
SAL_DLLPRIVATE bool InnerImplSetOutputSizePixel( const Size& rNewSize, bool bErase, const basebmp::RawMemorySharedArray &pBuffer ); SAL_DLLPRIVATE bool InnerImplSetOutputSizePixel( const Size& rNewSize, bool bErase,
SAL_DLLPRIVATE bool ImplSetOutputSizePixel( const Size& rNewSize, bool bErase, const basebmp::RawMemorySharedArray &pBuffer ); const basebmp::RawMemorySharedArray &pBuffer,
const bool bTopDown );
SAL_DLLPRIVATE bool ImplSetOutputSizePixel( const Size& rNewSize, bool bErase,
const basebmp::RawMemorySharedArray &pBuffer,
const bool bTopDown );
// Copy assignment is forbidden and not implemented. // Copy assignment is forbidden and not implemented.
VirtualDevice (const VirtualDevice &); VirtualDevice (const VirtualDevice &);
...@@ -119,7 +123,11 @@ public: ...@@ -119,7 +123,11 @@ public:
virtual void EnableRTL( bool bEnable = true ) SAL_OVERRIDE; virtual void EnableRTL( bool bEnable = true ) SAL_OVERRIDE;
bool SetOutputSizePixel( const Size& rNewSize, bool bErase = true ); bool SetOutputSizePixel( const Size& rNewSize, bool bErase = true );
bool SetOutputSizePixelScaleOffsetAndBuffer( const Size& rNewSize, const Fraction& rScale, const Point& rNewOffset, const basebmp::RawMemorySharedArray &pBuffer ); bool SetOutputSizePixelScaleOffsetAndBuffer( const Size& rNewSize,
const Fraction& rScale,
const Point& rNewOffset,
const basebmp::RawMemorySharedArray &pBuffer,
const bool bTopDown = false );
bool SetOutputSize( const Size& rNewSize, bool bErase = true ) bool SetOutputSize( const Size& rNewSize, bool bErase = true )
{ return SetOutputSizePixel( LogicToPixel( rNewSize ), bErase ); } { return SetOutputSizePixel( LogicToPixel( rNewSize ), bErase ); }
......
...@@ -52,10 +52,12 @@ void SvpSalVirtualDevice::ReleaseGraphics( SalGraphics* pGraphics ) ...@@ -52,10 +52,12 @@ void SvpSalVirtualDevice::ReleaseGraphics( SalGraphics* pGraphics )
bool SvpSalVirtualDevice::SetSize( long nNewDX, long nNewDY ) bool SvpSalVirtualDevice::SetSize( long nNewDX, long nNewDY )
{ {
return SetSizeUsingBuffer( nNewDX, nNewDY, basebmp::RawMemorySharedArray() ); return SetSizeUsingBuffer( nNewDX, nNewDY, basebmp::RawMemorySharedArray(), false );
} }
bool SvpSalVirtualDevice::SetSizeUsingBuffer( long nNewDX, long nNewDY, const basebmp::RawMemorySharedArray &pBuffer ) bool SvpSalVirtualDevice::SetSizeUsingBuffer( long nNewDX, long nNewDY,
const basebmp::RawMemorySharedArray &pBuffer,
const bool bTopDown )
{ {
B2IVector aDevSize( nNewDX, nNewDY ); B2IVector aDevSize( nNewDX, nNewDY );
if( aDevSize.getX() == 0 ) if( aDevSize.getX() == 0 )
...@@ -73,13 +75,13 @@ bool SvpSalVirtualDevice::SetSizeUsingBuffer( long nNewDX, long nNewDY, const ba ...@@ -73,13 +75,13 @@ bool SvpSalVirtualDevice::SetSizeUsingBuffer( long nNewDX, long nNewDY, const ba
std::vector< basebmp::Color > aDevPal(2); std::vector< basebmp::Color > aDevPal(2);
aDevPal.push_back( basebmp::Color( 0, 0, 0 ) ); aDevPal.push_back( basebmp::Color( 0, 0, 0 ) );
aDevPal.push_back( basebmp::Color( 0xff, 0xff, 0xff ) ); aDevPal.push_back( basebmp::Color( 0xff, 0xff, 0xff ) );
m_aDevice = createBitmapDevice( aDevSize, false, nFormat, PaletteMemorySharedVector( new std::vector< basebmp::Color >(aDevPal) ) ); m_aDevice = createBitmapDevice( aDevSize, bTopDown, nFormat, PaletteMemorySharedVector( new std::vector< basebmp::Color >(aDevPal) ) );
} }
else else
{ {
m_aDevice = pBuffer ? m_aDevice = pBuffer ?
createBitmapDevice( aDevSize, false, nFormat, pBuffer, PaletteMemorySharedVector() ) createBitmapDevice( aDevSize, bTopDown, nFormat, pBuffer, PaletteMemorySharedVector() )
: createBitmapDevice( aDevSize, false, nFormat ); : createBitmapDevice( aDevSize, bTopDown, nFormat );
} }
// update device in existing graphics // update device in existing graphics
......
...@@ -45,7 +45,10 @@ public: ...@@ -45,7 +45,10 @@ public:
virtual void ReleaseGraphics( SalGraphics* pGraphics ) SAL_OVERRIDE; virtual void ReleaseGraphics( SalGraphics* pGraphics ) SAL_OVERRIDE;
virtual bool SetSize( long nNewDX, long nNewDY ) SAL_OVERRIDE; virtual bool SetSize( long nNewDX, long nNewDY ) SAL_OVERRIDE;
virtual bool SetSizeUsingBuffer( long nNewDX, long nNewDY, const basebmp::RawMemorySharedArray &pBuffer ) SAL_OVERRIDE; virtual bool SetSizeUsingBuffer( long nNewDX, long nNewDY,
const basebmp::RawMemorySharedArray &pBuffer,
const bool bTopDown
) SAL_OVERRIDE;
virtual void GetSize( long& rWidth, long& rHeight ) SAL_OVERRIDE; virtual void GetSize( long& rWidth, long& rHeight ) SAL_OVERRIDE;
basebmp::BitmapDeviceSharedPtr getBitmapDevice() { return m_aDevice; } basebmp::BitmapDeviceSharedPtr getBitmapDevice() { return m_aDevice; }
......
...@@ -40,9 +40,13 @@ public: ...@@ -40,9 +40,13 @@ public:
virtual bool SetSize( long nNewDX, long nNewDY ) = 0; virtual bool SetSize( long nNewDX, long nNewDY ) = 0;
// Set new size using a buffer at the given address // Set new size using a buffer at the given address
virtual bool SetSizeUsingBuffer( long nNewDX, long nNewDY, const basebmp::RawMemorySharedArray & /* pBuffer */ ) virtual bool SetSizeUsingBuffer( long nNewDX, long nNewDY,
const basebmp::RawMemorySharedArray & /* pBuffer */,
const bool /* bTopDown */
)
{ {
// Only the headless virtual device has an implementation that uses pBuffer. // Only the headless virtual device has an implementation that uses
// pBuffer (and bTopDown).
return SetSize( nNewDX, nNewDY ); return SetSize( nNewDX, nNewDY );
} }
......
...@@ -267,7 +267,9 @@ VirtualDevice::~VirtualDevice() ...@@ -267,7 +267,9 @@ VirtualDevice::~VirtualDevice()
pSVData->maGDIData.mpLastVirDev = mpPrev; pSVData->maGDIData.mpLastVirDev = mpPrev;
} }
bool VirtualDevice::InnerImplSetOutputSizePixel( const Size& rNewSize, bool bErase, const basebmp::RawMemorySharedArray &pBuffer ) bool VirtualDevice::InnerImplSetOutputSizePixel( const Size& rNewSize, bool bErase,
const basebmp::RawMemorySharedArray &pBuffer,
const bool bTopDown )
{ {
SAL_INFO( "vcl.gdi", SAL_INFO( "vcl.gdi",
"VirtualDevice::InnerImplSetOutputSizePixel( " << rNewSize.Width() << ", " "VirtualDevice::InnerImplSetOutputSizePixel( " << rNewSize.Width() << ", "
...@@ -296,7 +298,7 @@ bool VirtualDevice::InnerImplSetOutputSizePixel( const Size& rNewSize, bool bEra ...@@ -296,7 +298,7 @@ bool VirtualDevice::InnerImplSetOutputSizePixel( const Size& rNewSize, bool bEra
if ( bErase ) if ( bErase )
{ {
if ( pBuffer ) if ( pBuffer )
bRet = mpVirDev->SetSizeUsingBuffer( nNewWidth, nNewHeight, pBuffer ); bRet = mpVirDev->SetSizeUsingBuffer( nNewWidth, nNewHeight, pBuffer, bTopDown );
else else
bRet = mpVirDev->SetSize( nNewWidth, nNewHeight ); bRet = mpVirDev->SetSize( nNewWidth, nNewHeight );
...@@ -381,9 +383,11 @@ void VirtualDevice::ImplFillOpaqueRectangle( const Rectangle& rRect ) ...@@ -381,9 +383,11 @@ void VirtualDevice::ImplFillOpaqueRectangle( const Rectangle& rRect )
Pop(); Pop();
} }
bool VirtualDevice::ImplSetOutputSizePixel( const Size& rNewSize, bool bErase, const basebmp::RawMemorySharedArray &pBuffer ) bool VirtualDevice::ImplSetOutputSizePixel( const Size& rNewSize, bool bErase,
const basebmp::RawMemorySharedArray &pBuffer,
const bool bTopDown )
{ {
if( InnerImplSetOutputSizePixel(rNewSize, bErase, pBuffer) ) if( InnerImplSetOutputSizePixel(rNewSize, bErase, pBuffer, bTopDown) )
{ {
if( mnAlphaDepth != -1 ) if( mnAlphaDepth != -1 )
{ {
...@@ -397,7 +401,9 @@ bool VirtualDevice::ImplSetOutputSizePixel( const Size& rNewSize, bool bErase, c ...@@ -397,7 +401,9 @@ bool VirtualDevice::ImplSetOutputSizePixel( const Size& rNewSize, bool bErase, c
if( !mpAlphaVDev ) if( !mpAlphaVDev )
{ {
mpAlphaVDev = new VirtualDevice( *this, mnAlphaDepth ); mpAlphaVDev = new VirtualDevice( *this, mnAlphaDepth );
mpAlphaVDev->InnerImplSetOutputSizePixel(rNewSize, bErase, basebmp::RawMemorySharedArray() ); mpAlphaVDev->InnerImplSetOutputSizePixel(rNewSize, bErase,
basebmp::RawMemorySharedArray(),
bTopDown );
} }
// TODO: copy full outdev state to new one, here. Also needed in outdev2.cxx:DrawOutDev // TODO: copy full outdev state to new one, here. Also needed in outdev2.cxx:DrawOutDev
...@@ -430,10 +436,12 @@ void VirtualDevice::EnableRTL( bool bEnable ) ...@@ -430,10 +436,12 @@ void VirtualDevice::EnableRTL( bool bEnable )
bool VirtualDevice::SetOutputSizePixel( const Size& rNewSize, bool bErase ) bool VirtualDevice::SetOutputSizePixel( const Size& rNewSize, bool bErase )
{ {
return ImplSetOutputSizePixel( rNewSize, bErase, basebmp::RawMemorySharedArray() ); return ImplSetOutputSizePixel( rNewSize, bErase, basebmp::RawMemorySharedArray(), false );
} }
bool VirtualDevice::SetOutputSizePixelScaleOffsetAndBuffer( const Size& rNewSize, const Fraction& rScale, const Point& rNewOffset, const basebmp::RawMemorySharedArray &pBuffer ) bool VirtualDevice::SetOutputSizePixelScaleOffsetAndBuffer(
const Size& rNewSize, const Fraction& rScale, const Point& rNewOffset,
const basebmp::RawMemorySharedArray &pBuffer, const bool bTopDown )
{ {
if (pBuffer) { if (pBuffer) {
MapMode mm = GetMapMode(); MapMode mm = GetMapMode();
...@@ -442,7 +450,7 @@ bool VirtualDevice::SetOutputSizePixelScaleOffsetAndBuffer( const Size& rNewSize ...@@ -442,7 +450,7 @@ bool VirtualDevice::SetOutputSizePixelScaleOffsetAndBuffer( const Size& rNewSize
mm.SetScaleY( rScale ); mm.SetScaleY( rScale );
SetMapMode( mm ); SetMapMode( mm );
} }
return ImplSetOutputSizePixel( rNewSize, true, pBuffer); return ImplSetOutputSizePixel( rNewSize, true, pBuffer, bTopDown );
} }
void VirtualDevice::SetReferenceDevice( RefDevMode i_eRefDevMode ) void VirtualDevice::SetReferenceDevice( RefDevMode i_eRefDevMode )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment