xref: /aoo42x/main/vcl/unx/headless/svpvd.cxx (revision 9f62ea84)
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