1*9f62ea84SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*9f62ea84SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*9f62ea84SAndrew Rist * or more contributor license agreements. See the NOTICE file
5*9f62ea84SAndrew Rist * distributed with this work for additional information
6*9f62ea84SAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*9f62ea84SAndrew Rist * to you under the Apache License, Version 2.0 (the
8*9f62ea84SAndrew Rist * "License"); you may not use this file except in compliance
9*9f62ea84SAndrew Rist * with the License. You may obtain a copy of the License at
10*9f62ea84SAndrew Rist *
11*9f62ea84SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*9f62ea84SAndrew Rist *
13*9f62ea84SAndrew Rist * Unless required by applicable law or agreed to in writing,
14*9f62ea84SAndrew Rist * software distributed under the License is distributed on an
15*9f62ea84SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*9f62ea84SAndrew Rist * KIND, either express or implied. See the License for the
17*9f62ea84SAndrew Rist * specific language governing permissions and limitations
18*9f62ea84SAndrew Rist * under the License.
19*9f62ea84SAndrew Rist *
20*9f62ea84SAndrew Rist *************************************************************/
21*9f62ea84SAndrew Rist
22*9f62ea84SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir #include "svpvd.hxx"
25cdf0e10cSrcweir #include "svpgdi.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include <basegfx/vector/b2ivector.hxx>
28cdf0e10cSrcweir #include <basebmp/scanlineformats.hxx>
29cdf0e10cSrcweir
30cdf0e10cSrcweir #include "stdio.h"
31cdf0e10cSrcweir
32cdf0e10cSrcweir using namespace basegfx;
33cdf0e10cSrcweir using namespace basebmp;
34cdf0e10cSrcweir
~SvpSalVirtualDevice()35cdf0e10cSrcweir SvpSalVirtualDevice::~SvpSalVirtualDevice()
36cdf0e10cSrcweir {
37cdf0e10cSrcweir }
38cdf0e10cSrcweir
GetGraphics()39cdf0e10cSrcweir SalGraphics* SvpSalVirtualDevice::GetGraphics()
40cdf0e10cSrcweir {
41cdf0e10cSrcweir SvpSalGraphics* pGraphics = new SvpSalGraphics();
42cdf0e10cSrcweir pGraphics->setDevice( m_aDevice );
43cdf0e10cSrcweir m_aGraphics.push_back( pGraphics );
44cdf0e10cSrcweir return pGraphics;
45cdf0e10cSrcweir }
46cdf0e10cSrcweir
ReleaseGraphics(SalGraphics * pGraphics)47cdf0e10cSrcweir void SvpSalVirtualDevice::ReleaseGraphics( SalGraphics* pGraphics )
48cdf0e10cSrcweir {
49cdf0e10cSrcweir m_aGraphics.remove( dynamic_cast<SvpSalGraphics*>(pGraphics) );
50cdf0e10cSrcweir delete pGraphics;
51cdf0e10cSrcweir }
52cdf0e10cSrcweir
SetSize(long nNewDX,long nNewDY)53cdf0e10cSrcweir sal_Bool SvpSalVirtualDevice::SetSize( long nNewDX, long nNewDY )
54cdf0e10cSrcweir {
55cdf0e10cSrcweir B2IVector aDevSize( nNewDX, nNewDY );
56cdf0e10cSrcweir if( aDevSize.getX() == 0 )
57cdf0e10cSrcweir aDevSize.setX( 1 );
58cdf0e10cSrcweir if( aDevSize.getY() == 0 )
59cdf0e10cSrcweir aDevSize.setY( 1 );
60cdf0e10cSrcweir if( ! m_aDevice.get() || m_aDevice->getSize() != aDevSize )
61cdf0e10cSrcweir {
62cdf0e10cSrcweir sal_uInt32 nFormat = SVP_DEFAULT_BITMAP_FORMAT;
63cdf0e10cSrcweir std::vector< basebmp::Color > aDevPal;
64cdf0e10cSrcweir switch( m_nBitCount )
65cdf0e10cSrcweir {
66cdf0e10cSrcweir case 1: nFormat = Format::ONE_BIT_MSB_PAL;
67cdf0e10cSrcweir aDevPal.reserve(2);
68cdf0e10cSrcweir aDevPal.push_back( basebmp::Color( 0, 0, 0 ) );
69cdf0e10cSrcweir aDevPal.push_back( basebmp::Color( 0xff, 0xff, 0xff ) );
70cdf0e10cSrcweir break;
71cdf0e10cSrcweir case 4: nFormat = Format::FOUR_BIT_MSB_PAL; break;
72cdf0e10cSrcweir case 8: nFormat = Format::EIGHT_BIT_PAL; break;
73cdf0e10cSrcweir #ifdef OSL_BIGENDIAN
74cdf0e10cSrcweir case 16: nFormat = Format::SIXTEEN_BIT_MSB_TC_MASK; break;
75cdf0e10cSrcweir #else
76cdf0e10cSrcweir case 16: nFormat = Format::SIXTEEN_BIT_LSB_TC_MASK; break;
77cdf0e10cSrcweir #endif
78cdf0e10cSrcweir case 0:
79cdf0e10cSrcweir case 24: nFormat = Format::TWENTYFOUR_BIT_TC_MASK; break;
80cdf0e10cSrcweir case 32: nFormat = Format::THIRTYTWO_BIT_TC_MASK; break;
81cdf0e10cSrcweir }
82cdf0e10cSrcweir m_aDevice = aDevPal.empty()
83cdf0e10cSrcweir ? createBitmapDevice( aDevSize, false, nFormat )
84cdf0e10cSrcweir : createBitmapDevice( aDevSize, false, nFormat, PaletteMemorySharedVector( new std::vector< basebmp::Color >(aDevPal) ) );
85cdf0e10cSrcweir
86cdf0e10cSrcweir // update device in existing graphics
87cdf0e10cSrcweir for( std::list< SvpSalGraphics* >::iterator it = m_aGraphics.begin();
88cdf0e10cSrcweir it != m_aGraphics.end(); ++it )
89cdf0e10cSrcweir (*it)->setDevice( m_aDevice );
90cdf0e10cSrcweir
91cdf0e10cSrcweir }
92cdf0e10cSrcweir return true;
93cdf0e10cSrcweir }
94cdf0e10cSrcweir
GetSize(long & rWidth,long & rHeight)95cdf0e10cSrcweir void SvpSalVirtualDevice::GetSize( long& rWidth, long& rHeight )
96cdf0e10cSrcweir {
97cdf0e10cSrcweir if( m_aDevice.get() )
98cdf0e10cSrcweir {
99cdf0e10cSrcweir B2IVector aDevSize( m_aDevice->getSize() );
100cdf0e10cSrcweir rWidth = aDevSize.getX();
101cdf0e10cSrcweir rHeight = aDevSize.getY();
102cdf0e10cSrcweir }
103cdf0e10cSrcweir else
104cdf0e10cSrcweir rWidth = rHeight = 0;
105cdf0e10cSrcweir }
106cdf0e10cSrcweir
107