fdo#74697 Add Bluez 5 support for impress remote.
[LibreOffice.git] / include / vcl / virdev.hxx
blob41caf3e0eef8a7529a60ab895f5b96483f8f1e01
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #ifndef _SV_VIRDEV_HXX
21 #define _SV_VIRDEV_HXX
23 #include <tools/solar.h>
24 #include <vcl/dllapi.h>
25 #include <vcl/outdev.hxx>
26 #include <basebmp/bitmapdevice.hxx>
28 // -----------------
29 // - VirtualDevice -
30 // -----------------
32 class SalVirtualDevice;
33 struct SystemGraphicsData;
35 class VCL_DLLPUBLIC VirtualDevice : public OutputDevice
37 friend class Application;
38 friend class OutputDevice;
40 private:
41 SalVirtualDevice* mpVirDev;
42 VirtualDevice* mpPrev;
43 VirtualDevice* mpNext;
44 sal_uInt16 mnBitCount;
45 sal_Bool mbScreenComp;
46 sal_Int8 mnAlphaDepth;
47 sal_uInt8 meRefDevMode;
49 SAL_DLLPRIVATE void ImplInitVirDev( const OutputDevice* pOutDev, long nDX, long nDY, sal_uInt16 nBitCount, const SystemGraphicsData *pData = NULL );
50 SAL_DLLPRIVATE sal_Bool InnerImplSetOutputSizePixel( const Size& rNewSize, sal_Bool bErase, const basebmp::RawMemorySharedArray &pBuffer );
51 SAL_DLLPRIVATE sal_Bool ImplSetOutputSizePixel( const Size& rNewSize, sal_Bool bErase, const basebmp::RawMemorySharedArray &pBuffer );
53 // Copy assignment is forbidden and not implemented.
54 VirtualDevice (const VirtualDevice &);
55 VirtualDevice & operator= (const VirtualDevice &);
57 /** Used for alpha VDev, to set areas to opaque
59 @since #i32109#
61 SAL_DLLPRIVATE void ImplFillOpaqueRectangle( const Rectangle& rRect );
63 // TODO: add extra member for refdev backward compatibility options
64 #define REFDEV_FORCE_ZERO_EXTLEAD 0x80
65 SAL_DLLPRIVATE bool ForceZeroExtleadBug() const
66 { return ((meRefDevMode & REFDEV_FORCE_ZERO_EXTLEAD) != 0); }
67 public:
68 /** Create a virtual device of size 1x1
70 @param nBitCount
71 Bit depth of the generated virtual device. Use 0 here, to
72 indicate: take default screen depth. Only 0, 1 and 8
73 are allowed here, with 1 denoting binary mask and 8 a graylevel mask.
75 explicit VirtualDevice( sal_uInt16 nBitCount = 0 );
77 /** Create a virtual device of size 1x1
79 @param rCompDev
80 The generated vdev will be compatible to this device.
82 @param nBitCount
83 Bit depth of the generated virtual device. Use 0 here, to
84 indicate: take default screen depth. Only 0 and 1
85 are allowed here, with 1 denoting binary mask.
87 explicit VirtualDevice( const OutputDevice& rCompDev,
88 sal_uInt16 nBitCount = 0 );
90 /** Create a virtual device of size 1x1 with alpha channel
92 @param rCompDev
93 The generated vdev will be compatible to this device.
95 @param nBitCount
96 Bit depth of the generated virtual device. Use 0 here, to
97 indicate: take default screen depth. Only 0 and 1
98 are allowed here, with 1 denoting binary mask.
100 @param nAlphaBitCount
101 Bit depth of the generated virtual device. Use 0 here, to
102 indicate: take default screen depth. Only 0 and 1
103 are allowed here, with 1 denoting binary mask.
105 explicit VirtualDevice( const OutputDevice& rCompDev,
106 sal_uInt16 nBitCount, sal_uInt16 nAlphaBitCount );
108 /** Create a virtual device using an existing system dependent device or graphics context
109 Any rendering will happen directly on the context and not on any intermediate bitmap.
110 Note: This might not be suported on all platforms !
112 explicit VirtualDevice( const SystemGraphicsData *pData, sal_uInt16 nBitCount );
114 virtual ~VirtualDevice();
116 sal_Bool SetOutputSizePixel( const Size& rNewSize, sal_Bool bErase = sal_True );
117 sal_Bool SetOutputSizePixelScaleOffsetAndBuffer( const Size& rNewSize, const Fraction& rScale, const Point& rNewOffset, const basebmp::RawMemorySharedArray &pBuffer );
118 sal_Bool SetOutputSize( const Size& rNewSize, sal_Bool bErase = sal_True )
119 { return SetOutputSizePixel( LogicToPixel( rNewSize ), bErase ); }
121 // reference device modes for different compatibility levels
122 enum RefDevMode { REFDEV_NONE = 0,
123 REFDEV_MODE06 = 1, // 600 dpi
124 REFDEV_MODE_MSO1 = 3,
125 REFDEV_MODE_PDF1 = 4,
126 REFDEV_CUSTOM = 5
129 void SetReferenceDevice( RefDevMode );
131 void Compat_ZeroExtleadBug(); // enable workaround for #i60495#
133 void SetReferenceDevice( sal_Int32 i_nDPIX, sal_Int32 i_nDPIY );
135 private:
136 SAL_DLLPRIVATE void ImplSetReferenceDevice( RefDevMode, sal_Int32 i_nDPIX, sal_Int32 i_nDPIY );
140 #endif // _SV_VIRDEV_HXX
142 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */