xref: /trunk/main/vcl/inc/impgraph.hxx (revision 67a4c099c6673ea241c6dfd8f5db5f99b4ca16de)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 #ifndef _SV_IMPGRAPH_HXX
29 #define _SV_IMPGRAPH_HXX
30 
31 #include <tools/urlobj.hxx>
32 #include <vcl/bitmap.hxx>
33 #include <vcl/bitmapex.hxx>
34 #include <vcl/animate.hxx>
35 #include <vcl/gdimtf.hxx>
36 #include <vcl/graph.h>
37 #include <vcl/svgdata.hxx>
38 
39 // ---------------
40 // - ImpSwapInfo -
41 // ---------------
42 
43 struct ImpSwapInfo
44 {
45     MapMode     maPrefMapMode;
46     Size        maPrefSize;
47 };
48 
49 // --------------
50 // - ImpGraphic -
51 // --------------
52 
53 class   OutputDevice;
54 class   GfxLink;
55 struct  ImpSwapFile;
56 class GraphicConversionParameters;
57 
58 class ImpGraphic
59 {
60     friend class Graphic;
61 
62 private:
63 
64     GDIMetaFile         maMetaFile;
65     BitmapEx            maEx;
66     ImpSwapInfo         maSwapInfo;
67     Animation*          mpAnimation;
68     GraphicReader*      mpContext;
69     ImpSwapFile*        mpSwapFile;
70     GfxLink*            mpGfxLink;
71     GraphicType         meType;
72     String              maDocFileURLStr;
73     sal_uLong           mnDocFilePos;
74     mutable sal_uLong   mnSizeBytes;
75     sal_uLong           mnRefCount;
76     sal_Bool            mbSwapOut;
77     sal_Bool            mbSwapUnderway;
78 
79     // SvgData support
80     SvgDataPtr          maSvgData;
81 
82 private:
83 
84                         ImpGraphic();
85                         ImpGraphic( const ImpGraphic& rImpGraphic );
86                         ImpGraphic( const Bitmap& rBmp );
87                         ImpGraphic( const BitmapEx& rBmpEx );
88                         ImpGraphic(const SvgDataPtr& rSvgDataPtr);
89                         ImpGraphic( const Animation& rAnimation );
90                         ImpGraphic( const GDIMetaFile& rMtf );
91     virtual             ~ImpGraphic();
92 
93     ImpGraphic&         operator=( const ImpGraphic& rImpGraphic );
94     sal_Bool                operator==( const ImpGraphic& rImpGraphic ) const;
95     sal_Bool                operator!=( const ImpGraphic& rImpGraphic ) const { return !( *this == rImpGraphic ); }
96 
97     void                ImplClearGraphics( sal_Bool bCreateSwapInfo );
98     void                ImplClear();
99 
100     GraphicType         ImplGetType() const;
101     void                ImplSetDefaultType();
102     sal_Bool                ImplIsSupportedGraphic() const;
103 
104     sal_Bool            ImplIsTransparent() const;
105     sal_Bool            ImplIsAlpha() const;
106     sal_Bool            ImplIsAnimated() const;
107     sal_Bool            ImplIsEPS() const;
108 
109     Bitmap                  ImplGetBitmap(const GraphicConversionParameters& rParameters) const;
110     BitmapEx                ImplGetBitmapEx(const GraphicConversionParameters& rParameters) const;
111     Animation               ImplGetAnimation() const;
112     const GDIMetaFile&      ImplGetGDIMetaFile() const;
113 
114 
115     Size                ImplGetPrefSize() const;
116     void                ImplSetPrefSize( const Size& rPrefSize );
117 
118     MapMode             ImplGetPrefMapMode() const;
119     void                ImplSetPrefMapMode( const MapMode& rPrefMapMode );
120 
121     sal_uLong               ImplGetSizeBytes() const;
122 
123     void                ImplDraw( OutputDevice* pOutDev,
124                                   const Point& rDestPt ) const;
125     void                ImplDraw( OutputDevice* pOutDev,
126                                   const Point& rDestPt,
127                                   const Size& rDestSize ) const;
128 
129     void                ImplStartAnimation( OutputDevice* pOutDev,
130                                             const Point& rDestPt,
131                                             long nExtraData = 0,
132                                             OutputDevice* pFirstFrameOutDev = NULL );
133     void                ImplStartAnimation( OutputDevice* pOutDev,
134                                             const Point& rDestPt,
135                                             const Size& rDestSize,
136                                             long nExtraData = 0,
137                                             OutputDevice* pFirstFrameOutDev = NULL );
138     void                ImplStopAnimation( OutputDevice* pOutputDevice = NULL,
139                                            long nExtraData = 0 );
140 
141     void                ImplSetAnimationNotifyHdl( const Link& rLink );
142     Link                ImplGetAnimationNotifyHdl() const;
143 
144     sal_uLong               ImplGetAnimationLoopCount() const;
145     void                ImplResetAnimationLoopCount();
146 
147     List*               ImplGetAnimationInfoList() const;
148 
149 private:
150 
151     GraphicReader*      ImplGetContext();
152     void                ImplSetContext( GraphicReader* pReader );
153 
154 private:
155 
156     void                ImplSetDocFileName( const String& rName, sal_uLong nFilePos );
157     const String&       ImplGetDocFileName() const;
158     sal_uLong               ImplGetDocFilePos() const;
159 
160     sal_Bool                ImplReadEmbedded( SvStream& rIStream, sal_Bool bSwap = sal_False );
161     sal_Bool                ImplWriteEmbedded( SvStream& rOStream );
162 
163     sal_Bool                ImplSwapIn();
164     sal_Bool                ImplSwapIn( SvStream* pIStm );
165 
166     sal_Bool                ImplSwapOut();
167     sal_Bool                ImplSwapOut( SvStream* pOStm );
168 
169     sal_Bool                ImplIsSwapOut() const;
170 
171     void                ImplSetLink( const GfxLink& );
172     GfxLink             ImplGetLink();
173     sal_Bool                ImplIsLink() const;
174 
175     sal_uLong               ImplGetChecksum() const;
176 
177     sal_Bool                ImplExportNative( SvStream& rOStm ) const;
178 
179     friend SvStream&    operator<<( SvStream& rOStm, const ImpGraphic& rImpGraphic );
180     friend SvStream&    operator>>( SvStream& rIStm, ImpGraphic& rImpGraphic );
181 
182     // SvgData support
183     const SvgDataPtr& getSvgData() const;
184 };
185 
186 #endif // _SV_IMPGRAPH_HXX
187