xref: /trunk/main/vcl/source/gdi/graph.cxx (revision 9f62ea84a806e17e6f2bbff75724a7257a0eb5d9)
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
10cdf0e10cSrcweir  *
11*9f62ea84SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
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.
19cdf0e10cSrcweir  *
20*9f62ea84SAndrew Rist  *************************************************************/
21*9f62ea84SAndrew Rist 
22*9f62ea84SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_vcl.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include <vcl/outdev.hxx>
28cdf0e10cSrcweir #include <vcl/svapp.hxx>
29cdf0e10cSrcweir #include <vcl/graph.hxx>
30cdf0e10cSrcweir 
31cdf0e10cSrcweir #include <impgraph.hxx>
32cdf0e10cSrcweir 
33cdf0e10cSrcweir #include <comphelper/processfactory.hxx>
34cdf0e10cSrcweir 
35cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp>
36cdf0e10cSrcweir #include <com/sun/star/graphic/XGraphicProvider.hpp>
37cdf0e10cSrcweir #include <com/sun/star/lang/XUnoTunnel.hpp>
38cdf0e10cSrcweir #include <com/sun/star/lang/XTypeProvider.hpp>
39cdf0e10cSrcweir #include <com/sun/star/graphic/XGraphic.hpp>
40cdf0e10cSrcweir 
41cdf0e10cSrcweir // -----------------------
42cdf0e10cSrcweir // - Compression defines -
43cdf0e10cSrcweir // -----------------------
44cdf0e10cSrcweir 
45cdf0e10cSrcweir #define COMPRESS_OWN                ('S'|('D'<<8UL))
46cdf0e10cSrcweir #define COMPRESS_NONE               ( 0UL )
47cdf0e10cSrcweir #define RLE_8                       ( 1UL )
48cdf0e10cSrcweir #define RLE_4                       ( 2UL )
49cdf0e10cSrcweir #define BITFIELDS                   ( 3UL )
50cdf0e10cSrcweir #define ZCOMPRESS                   ( COMPRESS_OWN | 0x01000000UL ) /* == 'SD01' (binary) */
51cdf0e10cSrcweir 
52cdf0e10cSrcweir using namespace ::com::sun::star;
53cdf0e10cSrcweir 
54cdf0e10cSrcweir // -----------------------
55cdf0e10cSrcweir // - Default-Drawmethode -
56cdf0e10cSrcweir // -----------------------
57cdf0e10cSrcweir 
58cdf0e10cSrcweir static void ImplDrawDefault( OutputDevice* pOutDev, const UniString* pText,
59cdf0e10cSrcweir                              Font* pFont, const Bitmap* pBitmap, const BitmapEx* pBitmapEx,
60cdf0e10cSrcweir                              const Point& rDestPt, const Size& rDestSize )
61cdf0e10cSrcweir {
62cdf0e10cSrcweir     sal_uInt16      nPixel = (sal_uInt16) pOutDev->PixelToLogic( Size( 1, 1 ) ).Width();
63cdf0e10cSrcweir     sal_uInt16      nPixelWidth = nPixel;
64cdf0e10cSrcweir     Point       aPoint( rDestPt.X() + nPixelWidth, rDestPt.Y() + nPixelWidth );
65cdf0e10cSrcweir     Size        aSize( rDestSize.Width() - ( nPixelWidth << 1 ), rDestSize.Height() - ( nPixelWidth << 1 ) );
66cdf0e10cSrcweir     sal_Bool        bFilled = ( pBitmap != NULL || pBitmapEx != NULL || pFont != NULL );
67cdf0e10cSrcweir     Rectangle   aBorderRect( aPoint, aSize );
68cdf0e10cSrcweir 
69cdf0e10cSrcweir     pOutDev->Push();
70cdf0e10cSrcweir 
71cdf0e10cSrcweir     pOutDev->SetFillColor();
72cdf0e10cSrcweir 
73cdf0e10cSrcweir     // Auf dem Drucker ein schwarzes Rechteck und auf dem Bildschirm eins mit 3D-Effekt
74cdf0e10cSrcweir     if ( pOutDev->GetOutDevType() == OUTDEV_PRINTER )
75cdf0e10cSrcweir         pOutDev->SetLineColor( COL_BLACK );
76cdf0e10cSrcweir     else
77cdf0e10cSrcweir     {
78cdf0e10cSrcweir         aBorderRect.Left() += nPixel;
79cdf0e10cSrcweir         aBorderRect.Top() += nPixel;
80cdf0e10cSrcweir 
81cdf0e10cSrcweir         pOutDev->SetLineColor( COL_LIGHTGRAY );
82cdf0e10cSrcweir         pOutDev->DrawRect( aBorderRect );
83cdf0e10cSrcweir 
84cdf0e10cSrcweir         aBorderRect.Left() -= nPixel;
85cdf0e10cSrcweir         aBorderRect.Top() -= nPixel;
86cdf0e10cSrcweir         aBorderRect.Right() -= nPixel;
87cdf0e10cSrcweir         aBorderRect.Bottom() -= nPixel;
88cdf0e10cSrcweir         pOutDev->SetLineColor( COL_GRAY );
89cdf0e10cSrcweir     }
90cdf0e10cSrcweir 
91cdf0e10cSrcweir     pOutDev->DrawRect( aBorderRect );
92cdf0e10cSrcweir 
93cdf0e10cSrcweir     aPoint.X() += nPixelWidth + 2*nPixel;
94cdf0e10cSrcweir     aPoint.Y() += nPixelWidth + 2*nPixel;
95cdf0e10cSrcweir     aSize.Width() -= 2*nPixelWidth + 4*nPixel;
96cdf0e10cSrcweir     aSize.Height() -= 2*nPixelWidth + 4*nPixel;
97cdf0e10cSrcweir 
98cdf0e10cSrcweir     if( aSize.Width() > 0 && aSize.Height() > 0
99cdf0e10cSrcweir         && (  ( pBitmap && !!*pBitmap ) || ( pBitmapEx && !!*pBitmapEx ) ) )
100cdf0e10cSrcweir     {
101cdf0e10cSrcweir         Size aBitmapSize( pOutDev->PixelToLogic( pBitmap ? pBitmap->GetSizePixel() : pBitmapEx->GetSizePixel() ) );
102cdf0e10cSrcweir 
103cdf0e10cSrcweir         if( aSize.Height() > aBitmapSize.Height() && aSize.Width() > aBitmapSize.Width() )
104cdf0e10cSrcweir         {
105cdf0e10cSrcweir             if ( pBitmap )
106cdf0e10cSrcweir                 pOutDev->DrawBitmap( aPoint, *pBitmap );
107cdf0e10cSrcweir             else
108cdf0e10cSrcweir                 pOutDev->DrawBitmapEx( aPoint, *pBitmapEx );
109cdf0e10cSrcweir             aPoint.X() += aBitmapSize.Width() + 2*nPixel;
110cdf0e10cSrcweir             aSize.Width() -= aBitmapSize.Width() + 2*nPixel;
111cdf0e10cSrcweir         }
112cdf0e10cSrcweir     }
113cdf0e10cSrcweir 
114cdf0e10cSrcweir     if ( aSize.Width() > 0 && aSize.Height() > 0 && pFont && pText && pText->Len()
115cdf0e10cSrcweir          && !(!pOutDev->IsOutputEnabled() /*&& pOutDev->GetConnectMetaFile() */) )
116cdf0e10cSrcweir     {
117cdf0e10cSrcweir         MapMode aMapMode( MAP_POINT );
118cdf0e10cSrcweir         Size    aSz = pOutDev->LogicToLogic( Size( 0, 12 ), &aMapMode, NULL );
119cdf0e10cSrcweir         long    nThreshold = aSz.Height() / 2;
120cdf0e10cSrcweir         long    nStep = nThreshold / 3;
121cdf0e10cSrcweir 
122cdf0e10cSrcweir         if ( !nStep )
123cdf0e10cSrcweir             nStep = aSz.Height() - nThreshold;
124cdf0e10cSrcweir 
125cdf0e10cSrcweir         for(;; aSz.Height() -= nStep )
126cdf0e10cSrcweir         {
127cdf0e10cSrcweir             pFont->SetSize( aSz );
128cdf0e10cSrcweir             pOutDev->SetFont( *pFont );
129cdf0e10cSrcweir 
130cdf0e10cSrcweir             long nTextHeight = pOutDev->GetTextHeight();
131cdf0e10cSrcweir             long nTextWidth = pOutDev->GetTextWidth( *pText );
132cdf0e10cSrcweir             if ( nTextHeight )
133cdf0e10cSrcweir             {
134cdf0e10cSrcweir                 // Die N"aherung ber"ucksichtigt keine Ungenauigkeiten durch
135cdf0e10cSrcweir                 // Wortumbr"uche
136cdf0e10cSrcweir                 long nLines = aSize.Height() / nTextHeight;
137cdf0e10cSrcweir                 long nWidth = aSize.Width() * nLines; // N"aherung!!!
138cdf0e10cSrcweir 
139cdf0e10cSrcweir                 if ( nTextWidth <= nWidth || aSz.Height() <= nThreshold )
140cdf0e10cSrcweir                 {
141cdf0e10cSrcweir                     sal_uInt16 nStart = 0;
142cdf0e10cSrcweir                     sal_uInt16 nLen = 0;
143cdf0e10cSrcweir 
144cdf0e10cSrcweir                     while( nStart < pText->Len() && pText->GetChar( nStart ) == ' ' )
145cdf0e10cSrcweir                         nStart++;
146cdf0e10cSrcweir                     while( nStart+nLen < pText->Len() && pText->GetChar( nStart+nLen ) != ' ' )
147cdf0e10cSrcweir                         nLen++;
148cdf0e10cSrcweir                     while( nStart < pText->Len() && nLines-- )
149cdf0e10cSrcweir                     {
150cdf0e10cSrcweir                         sal_uInt16 nNext = nLen;
151cdf0e10cSrcweir                         do
152cdf0e10cSrcweir                         {
153cdf0e10cSrcweir                             while ( nStart+nNext < pText->Len() && pText->GetChar( nStart+nNext ) == ' ' )
154cdf0e10cSrcweir                                 nNext++;
155cdf0e10cSrcweir                             while ( nStart+nNext < pText->Len() && pText->GetChar( nStart+nNext ) != ' ' )
156cdf0e10cSrcweir                                 nNext++;
157cdf0e10cSrcweir                             nTextWidth = pOutDev->GetTextWidth( *pText, nStart, nNext );
158cdf0e10cSrcweir                             if ( nTextWidth > aSize.Width() )
159cdf0e10cSrcweir                                 break;
160cdf0e10cSrcweir                             nLen = nNext;
161cdf0e10cSrcweir                         }
162cdf0e10cSrcweir                         while ( nStart+nNext < pText->Len() );
163cdf0e10cSrcweir 
164cdf0e10cSrcweir                         sal_uInt16 n = nLen;
165cdf0e10cSrcweir                         nTextWidth = pOutDev->GetTextWidth( *pText, nStart, n );
166cdf0e10cSrcweir                         while( nTextWidth > aSize.Width() )
167cdf0e10cSrcweir                             nTextWidth = pOutDev->GetTextWidth( *pText, nStart, --n );
168cdf0e10cSrcweir                         pOutDev->DrawText( aPoint, *pText, nStart, n );
169cdf0e10cSrcweir 
170cdf0e10cSrcweir                         aPoint.Y() += nTextHeight;
171cdf0e10cSrcweir                         nStart      = sal::static_int_cast<sal_uInt16>(nStart + nLen);
172cdf0e10cSrcweir                         nLen        = nNext-nLen;
173cdf0e10cSrcweir                         while( nStart < pText->Len() && pText->GetChar( nStart ) == ' ' )
174cdf0e10cSrcweir                         {
175cdf0e10cSrcweir                             nStart++;
176cdf0e10cSrcweir                             nLen--;
177cdf0e10cSrcweir                         }
178cdf0e10cSrcweir                     }
179cdf0e10cSrcweir                     break;
180cdf0e10cSrcweir                 }
181cdf0e10cSrcweir             }
182cdf0e10cSrcweir             else
183cdf0e10cSrcweir                 break;
184cdf0e10cSrcweir         }
185cdf0e10cSrcweir     }
186cdf0e10cSrcweir 
187cdf0e10cSrcweir     // Falls die Default-Graphik keinen Inhalt hat,
188cdf0e10cSrcweir     // malen wir ein rotes Kreuz
189cdf0e10cSrcweir     if( !bFilled )
190cdf0e10cSrcweir     {
191cdf0e10cSrcweir         aBorderRect.Left()++;
192cdf0e10cSrcweir         aBorderRect.Top()++;
193cdf0e10cSrcweir         aBorderRect.Right()--;
194cdf0e10cSrcweir         aBorderRect.Bottom()--;
195cdf0e10cSrcweir 
196cdf0e10cSrcweir         pOutDev->SetLineColor( COL_LIGHTRED );
197cdf0e10cSrcweir         pOutDev->DrawLine( aBorderRect.TopLeft(), aBorderRect.BottomRight() );
198cdf0e10cSrcweir         pOutDev->DrawLine( aBorderRect.TopRight(), aBorderRect.BottomLeft() );
199cdf0e10cSrcweir     }
200cdf0e10cSrcweir 
201cdf0e10cSrcweir     pOutDev->Pop();
202cdf0e10cSrcweir }
203cdf0e10cSrcweir 
204cdf0e10cSrcweir // -----------
205cdf0e10cSrcweir // - Graphic -
206cdf0e10cSrcweir // -----------
207cdf0e10cSrcweir 
208cdf0e10cSrcweir TYPEINIT1_AUTOFACTORY( Graphic, SvDataCopyStream );
209cdf0e10cSrcweir 
210cdf0e10cSrcweir // ------------------------------------------------------------------------
211cdf0e10cSrcweir 
212cdf0e10cSrcweir Graphic::Graphic()
213cdf0e10cSrcweir {
214cdf0e10cSrcweir     mpImpGraphic = new ImpGraphic;
215cdf0e10cSrcweir }
216cdf0e10cSrcweir 
217cdf0e10cSrcweir // ------------------------------------------------------------------------
218cdf0e10cSrcweir 
219cdf0e10cSrcweir Graphic::Graphic( const Graphic& rGraphic ) :
220cdf0e10cSrcweir SvDataCopyStream()
221cdf0e10cSrcweir {
222cdf0e10cSrcweir     if( rGraphic.IsAnimated() )
223cdf0e10cSrcweir         mpImpGraphic = new ImpGraphic( *rGraphic.mpImpGraphic );
224cdf0e10cSrcweir     else
225cdf0e10cSrcweir     {
226cdf0e10cSrcweir         mpImpGraphic = rGraphic.mpImpGraphic;
227cdf0e10cSrcweir         mpImpGraphic->mnRefCount++;
228cdf0e10cSrcweir     }
229cdf0e10cSrcweir }
230cdf0e10cSrcweir 
231cdf0e10cSrcweir // ------------------------------------------------------------------------
232cdf0e10cSrcweir 
233cdf0e10cSrcweir Graphic::Graphic( const Bitmap& rBmp )
234cdf0e10cSrcweir {
235cdf0e10cSrcweir     mpImpGraphic = new ImpGraphic( rBmp );
236cdf0e10cSrcweir }
237cdf0e10cSrcweir 
238cdf0e10cSrcweir // ------------------------------------------------------------------------
239cdf0e10cSrcweir 
240cdf0e10cSrcweir Graphic::Graphic( const BitmapEx& rBmpEx )
241cdf0e10cSrcweir {
242cdf0e10cSrcweir     mpImpGraphic = new ImpGraphic( rBmpEx );
243cdf0e10cSrcweir }
244cdf0e10cSrcweir 
245cdf0e10cSrcweir // ------------------------------------------------------------------------
246cdf0e10cSrcweir 
247cdf0e10cSrcweir Graphic::Graphic( const Animation& rAnimation )
248cdf0e10cSrcweir {
249cdf0e10cSrcweir     mpImpGraphic = new ImpGraphic( rAnimation );
250cdf0e10cSrcweir }
251cdf0e10cSrcweir 
252cdf0e10cSrcweir // ------------------------------------------------------------------------
253cdf0e10cSrcweir 
254cdf0e10cSrcweir Graphic::Graphic( const GDIMetaFile& rMtf )
255cdf0e10cSrcweir {
256cdf0e10cSrcweir     mpImpGraphic = new ImpGraphic( rMtf );
257cdf0e10cSrcweir }
258cdf0e10cSrcweir 
259cdf0e10cSrcweir // ------------------------------------------------------------------------
260cdf0e10cSrcweir 
261cdf0e10cSrcweir Graphic::Graphic( const ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphic >& rxGraphic )
262cdf0e10cSrcweir {
263cdf0e10cSrcweir     uno::Reference< lang::XUnoTunnel >      xTunnel( rxGraphic, uno::UNO_QUERY );
264cdf0e10cSrcweir     uno::Reference< lang::XTypeProvider >   xProv( rxGraphic, uno::UNO_QUERY );
265cdf0e10cSrcweir     const ::Graphic*                        pGraphic = ( ( xTunnel.is() && xProv.is() ) ?
266cdf0e10cSrcweir                                                          reinterpret_cast< ::Graphic* >( xTunnel->getSomething( xProv->getImplementationId() ) ) :
267cdf0e10cSrcweir                                                          NULL );
268cdf0e10cSrcweir 
269cdf0e10cSrcweir     if( pGraphic )
270cdf0e10cSrcweir     {
271cdf0e10cSrcweir         if( pGraphic->IsAnimated() )
272cdf0e10cSrcweir             mpImpGraphic = new ImpGraphic( *pGraphic->mpImpGraphic );
273cdf0e10cSrcweir         else
274cdf0e10cSrcweir         {
275cdf0e10cSrcweir             mpImpGraphic = pGraphic->mpImpGraphic;
276cdf0e10cSrcweir             mpImpGraphic->mnRefCount++;
277cdf0e10cSrcweir         }
278cdf0e10cSrcweir     }
279cdf0e10cSrcweir     else
280cdf0e10cSrcweir         mpImpGraphic = new ImpGraphic;
281cdf0e10cSrcweir }
282cdf0e10cSrcweir 
283cdf0e10cSrcweir // ------------------------------------------------------------------------
284cdf0e10cSrcweir 
285cdf0e10cSrcweir Graphic::~Graphic()
286cdf0e10cSrcweir {
287cdf0e10cSrcweir     if( mpImpGraphic->mnRefCount == 1UL )
288cdf0e10cSrcweir         delete mpImpGraphic;
289cdf0e10cSrcweir     else
290cdf0e10cSrcweir         mpImpGraphic->mnRefCount--;
291cdf0e10cSrcweir }
292cdf0e10cSrcweir 
293cdf0e10cSrcweir // ------------------------------------------------------------------------
294cdf0e10cSrcweir 
295cdf0e10cSrcweir void Graphic::ImplTestRefCount()
296cdf0e10cSrcweir {
297cdf0e10cSrcweir     if( mpImpGraphic->mnRefCount > 1UL )
298cdf0e10cSrcweir     {
299cdf0e10cSrcweir         mpImpGraphic->mnRefCount--;
300cdf0e10cSrcweir         mpImpGraphic = new ImpGraphic( *mpImpGraphic );
301cdf0e10cSrcweir     }
302cdf0e10cSrcweir }
303cdf0e10cSrcweir 
304cdf0e10cSrcweir // ------------------------------------------------------------------------
305cdf0e10cSrcweir 
306cdf0e10cSrcweir Graphic& Graphic::operator=( const Graphic& rGraphic )
307cdf0e10cSrcweir {
308cdf0e10cSrcweir     if( &rGraphic != this )
309cdf0e10cSrcweir     {
310cdf0e10cSrcweir         if( rGraphic.IsAnimated() )
311cdf0e10cSrcweir         {
312cdf0e10cSrcweir             if( mpImpGraphic->mnRefCount == 1UL )
313cdf0e10cSrcweir                 delete mpImpGraphic;
314cdf0e10cSrcweir             else
315cdf0e10cSrcweir                 mpImpGraphic->mnRefCount--;
316cdf0e10cSrcweir 
317cdf0e10cSrcweir             mpImpGraphic = new ImpGraphic( *rGraphic.mpImpGraphic );
318cdf0e10cSrcweir         }
319cdf0e10cSrcweir         else
320cdf0e10cSrcweir         {
321cdf0e10cSrcweir             rGraphic.mpImpGraphic->mnRefCount++;
322cdf0e10cSrcweir 
323cdf0e10cSrcweir             if( mpImpGraphic->mnRefCount == 1UL )
324cdf0e10cSrcweir                 delete mpImpGraphic;
325cdf0e10cSrcweir             else
326cdf0e10cSrcweir                 mpImpGraphic->mnRefCount--;
327cdf0e10cSrcweir 
328cdf0e10cSrcweir             mpImpGraphic = rGraphic.mpImpGraphic;
329cdf0e10cSrcweir         }
330cdf0e10cSrcweir     }
331cdf0e10cSrcweir 
332cdf0e10cSrcweir     return *this;
333cdf0e10cSrcweir }
334cdf0e10cSrcweir 
335cdf0e10cSrcweir // ------------------------------------------------------------------------
336cdf0e10cSrcweir 
337cdf0e10cSrcweir sal_Bool Graphic::operator==( const Graphic& rGraphic ) const
338cdf0e10cSrcweir {
339cdf0e10cSrcweir     return( *mpImpGraphic == *rGraphic.mpImpGraphic );
340cdf0e10cSrcweir }
341cdf0e10cSrcweir 
342cdf0e10cSrcweir // ------------------------------------------------------------------------
343cdf0e10cSrcweir 
344cdf0e10cSrcweir sal_Bool Graphic::operator!=( const Graphic& rGraphic ) const
345cdf0e10cSrcweir {
346cdf0e10cSrcweir     return( *mpImpGraphic != *rGraphic.mpImpGraphic );
347cdf0e10cSrcweir }
348cdf0e10cSrcweir 
349cdf0e10cSrcweir // ------------------------------------------------------------------------
350cdf0e10cSrcweir 
351cdf0e10cSrcweir sal_Bool Graphic::operator!() const
352cdf0e10cSrcweir {
353cdf0e10cSrcweir     return( GRAPHIC_NONE == mpImpGraphic->ImplGetType() );
354cdf0e10cSrcweir }
355cdf0e10cSrcweir 
356cdf0e10cSrcweir // ------------------------------------------------------------------------
357cdf0e10cSrcweir 
358cdf0e10cSrcweir void Graphic::Load( SvStream& rIStm )
359cdf0e10cSrcweir {
360cdf0e10cSrcweir     rIStm >> *this;
361cdf0e10cSrcweir }
362cdf0e10cSrcweir 
363cdf0e10cSrcweir // ------------------------------------------------------------------------
364cdf0e10cSrcweir 
365cdf0e10cSrcweir void Graphic::Save( SvStream& rOStm )
366cdf0e10cSrcweir {
367cdf0e10cSrcweir     rOStm << *this;
368cdf0e10cSrcweir }
369cdf0e10cSrcweir 
370cdf0e10cSrcweir // ------------------------------------------------------------------------
371cdf0e10cSrcweir 
372cdf0e10cSrcweir void Graphic::Assign( const SvDataCopyStream& rCopyStream )
373cdf0e10cSrcweir {
374cdf0e10cSrcweir     *this = (const Graphic& ) rCopyStream;
375cdf0e10cSrcweir }
376cdf0e10cSrcweir 
377cdf0e10cSrcweir // ------------------------------------------------------------------------
378cdf0e10cSrcweir 
379cdf0e10cSrcweir void Graphic::Clear()
380cdf0e10cSrcweir {
381cdf0e10cSrcweir     ImplTestRefCount();
382cdf0e10cSrcweir     mpImpGraphic->ImplClear();
383cdf0e10cSrcweir }
384cdf0e10cSrcweir 
385cdf0e10cSrcweir // ------------------------------------------------------------------------
386cdf0e10cSrcweir 
387cdf0e10cSrcweir GraphicType Graphic::GetType() const
388cdf0e10cSrcweir {
389cdf0e10cSrcweir     return mpImpGraphic->ImplGetType();
390cdf0e10cSrcweir }
391cdf0e10cSrcweir 
392cdf0e10cSrcweir // ------------------------------------------------------------------------
393cdf0e10cSrcweir 
394cdf0e10cSrcweir void Graphic::SetDefaultType()
395cdf0e10cSrcweir {
396cdf0e10cSrcweir     ImplTestRefCount();
397cdf0e10cSrcweir     mpImpGraphic->ImplSetDefaultType();
398cdf0e10cSrcweir }
399cdf0e10cSrcweir 
400cdf0e10cSrcweir // ------------------------------------------------------------------------
401cdf0e10cSrcweir 
402cdf0e10cSrcweir sal_Bool Graphic::IsSupportedGraphic() const
403cdf0e10cSrcweir {
404cdf0e10cSrcweir     return mpImpGraphic->ImplIsSupportedGraphic();
405cdf0e10cSrcweir }
406cdf0e10cSrcweir 
407cdf0e10cSrcweir // ------------------------------------------------------------------------
408cdf0e10cSrcweir 
409cdf0e10cSrcweir sal_Bool Graphic::IsTransparent() const
410cdf0e10cSrcweir {
411cdf0e10cSrcweir     return mpImpGraphic->ImplIsTransparent();
412cdf0e10cSrcweir }
413cdf0e10cSrcweir 
414cdf0e10cSrcweir // ------------------------------------------------------------------------
415cdf0e10cSrcweir 
416cdf0e10cSrcweir sal_Bool Graphic::IsAlpha() const
417cdf0e10cSrcweir {
418cdf0e10cSrcweir     return mpImpGraphic->ImplIsAlpha();
419cdf0e10cSrcweir }
420cdf0e10cSrcweir 
421cdf0e10cSrcweir // ------------------------------------------------------------------------
422cdf0e10cSrcweir 
423cdf0e10cSrcweir sal_Bool Graphic::IsAnimated() const
424cdf0e10cSrcweir {
425cdf0e10cSrcweir     return mpImpGraphic->ImplIsAnimated();
426cdf0e10cSrcweir }
427cdf0e10cSrcweir 
428cdf0e10cSrcweir // ------------------------------------------------------------------------
429cdf0e10cSrcweir 
430cdf0e10cSrcweir sal_Bool Graphic::IsEPS() const
431cdf0e10cSrcweir {
432cdf0e10cSrcweir     return mpImpGraphic->ImplIsEPS();
433cdf0e10cSrcweir }
434cdf0e10cSrcweir 
435cdf0e10cSrcweir // ------------------------------------------------------------------------
436cdf0e10cSrcweir 
437cdf0e10cSrcweir sal_Bool Graphic::IsRenderGraphic() const
438cdf0e10cSrcweir {
439cdf0e10cSrcweir     return mpImpGraphic->ImplIsRenderGraphic();
440cdf0e10cSrcweir }
441cdf0e10cSrcweir 
442cdf0e10cSrcweir // ------------------------------------------------------------------------
443cdf0e10cSrcweir 
444cdf0e10cSrcweir sal_Bool Graphic::HasRenderGraphic() const
445cdf0e10cSrcweir {
446cdf0e10cSrcweir     return mpImpGraphic->ImplHasRenderGraphic();
447cdf0e10cSrcweir }
448cdf0e10cSrcweir 
449cdf0e10cSrcweir // ------------------------------------------------------------------------
450cdf0e10cSrcweir 
451cdf0e10cSrcweir Bitmap Graphic::GetBitmap(const GraphicConversionParameters& rParameters) const
452cdf0e10cSrcweir {
453cdf0e10cSrcweir     return mpImpGraphic->ImplGetBitmap(rParameters);
454cdf0e10cSrcweir }
455cdf0e10cSrcweir 
456cdf0e10cSrcweir // ------------------------------------------------------------------------
457cdf0e10cSrcweir 
458cdf0e10cSrcweir BitmapEx Graphic::GetBitmapEx(const GraphicConversionParameters& rParameters) const
459cdf0e10cSrcweir {
460cdf0e10cSrcweir     return mpImpGraphic->ImplGetBitmapEx(rParameters);
461cdf0e10cSrcweir }
462cdf0e10cSrcweir 
463cdf0e10cSrcweir // ------------------------------------------------------------------------
464cdf0e10cSrcweir 
465cdf0e10cSrcweir Animation Graphic::GetAnimation() const
466cdf0e10cSrcweir {
467cdf0e10cSrcweir     return mpImpGraphic->ImplGetAnimation();
468cdf0e10cSrcweir }
469cdf0e10cSrcweir 
470cdf0e10cSrcweir // ------------------------------------------------------------------------
471cdf0e10cSrcweir 
472cdf0e10cSrcweir const GDIMetaFile& Graphic::GetGDIMetaFile() const
473cdf0e10cSrcweir {
474cdf0e10cSrcweir     return mpImpGraphic->ImplGetGDIMetaFile();
475cdf0e10cSrcweir }
476cdf0e10cSrcweir 
477cdf0e10cSrcweir // ------------------------------------------------------------------------
478cdf0e10cSrcweir 
479cdf0e10cSrcweir ::vcl::RenderGraphic Graphic::GetRenderGraphic() const
480cdf0e10cSrcweir {
481cdf0e10cSrcweir     return mpImpGraphic->ImplGetRenderGraphic();
482cdf0e10cSrcweir }
483cdf0e10cSrcweir 
484cdf0e10cSrcweir // ------------------------------------------------------------------------
485cdf0e10cSrcweir 
486cdf0e10cSrcweir uno::Reference< graphic::XGraphic > Graphic::GetXGraphic() const
487cdf0e10cSrcweir {
488cdf0e10cSrcweir     uno::Reference< graphic::XGraphic > xRet;
489cdf0e10cSrcweir 
490cdf0e10cSrcweir     if( GetType() != GRAPHIC_NONE )
491cdf0e10cSrcweir     {
492cdf0e10cSrcweir         uno::Reference < lang::XMultiServiceFactory > xMSF( ::comphelper::getProcessServiceFactory() );
493cdf0e10cSrcweir 
494cdf0e10cSrcweir         if( xMSF.is() )
495cdf0e10cSrcweir         {
496cdf0e10cSrcweir             uno::Reference< graphic::XGraphicProvider > xProv( xMSF->createInstance(
497cdf0e10cSrcweir                 ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.graphic.GraphicProvider" ) ) ),
498cdf0e10cSrcweir                 uno::UNO_QUERY );
499cdf0e10cSrcweir 
500cdf0e10cSrcweir             if( xProv.is() )
501cdf0e10cSrcweir             {
502cdf0e10cSrcweir                 uno::Sequence< beans::PropertyValue >   aLoadProps( 1 );
503cdf0e10cSrcweir                 ::rtl::OUString                         aURL( RTL_CONSTASCII_USTRINGPARAM( "private:memorygraphic/" ) );
504cdf0e10cSrcweir 
505cdf0e10cSrcweir                 aLoadProps[ 0 ].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "URL" ) );
506cdf0e10cSrcweir                 aLoadProps[ 0 ].Value <<= ( aURL += ::rtl::OUString::valueOf( reinterpret_cast< sal_Int64 >( this ) ) );
507cdf0e10cSrcweir 
508cdf0e10cSrcweir                 xRet = xProv->queryGraphic( aLoadProps );
509cdf0e10cSrcweir             }
510cdf0e10cSrcweir         }
511cdf0e10cSrcweir     }
512cdf0e10cSrcweir 
513cdf0e10cSrcweir     return xRet;
514cdf0e10cSrcweir }
515cdf0e10cSrcweir 
516cdf0e10cSrcweir // ------------------------------------------------------------------------
517cdf0e10cSrcweir 
518cdf0e10cSrcweir Size Graphic::GetPrefSize() const
519cdf0e10cSrcweir {
520cdf0e10cSrcweir     return mpImpGraphic->ImplGetPrefSize();
521cdf0e10cSrcweir }
522cdf0e10cSrcweir 
523cdf0e10cSrcweir // ------------------------------------------------------------------------
524cdf0e10cSrcweir 
525cdf0e10cSrcweir void Graphic::SetPrefSize( const Size& rPrefSize )
526cdf0e10cSrcweir {
527cdf0e10cSrcweir     ImplTestRefCount();
528cdf0e10cSrcweir     mpImpGraphic->ImplSetPrefSize( rPrefSize );
529cdf0e10cSrcweir }
530cdf0e10cSrcweir 
531cdf0e10cSrcweir // ------------------------------------------------------------------------
532cdf0e10cSrcweir 
533cdf0e10cSrcweir MapMode Graphic::GetPrefMapMode() const
534cdf0e10cSrcweir {
535cdf0e10cSrcweir     return mpImpGraphic->ImplGetPrefMapMode();
536cdf0e10cSrcweir }
537cdf0e10cSrcweir 
538cdf0e10cSrcweir // ------------------------------------------------------------------------
539cdf0e10cSrcweir 
540cdf0e10cSrcweir void Graphic::SetPrefMapMode( const MapMode& rPrefMapMode )
541cdf0e10cSrcweir {
542cdf0e10cSrcweir     ImplTestRefCount();
543cdf0e10cSrcweir     mpImpGraphic->ImplSetPrefMapMode( rPrefMapMode );
544cdf0e10cSrcweir }
545cdf0e10cSrcweir 
546cdf0e10cSrcweir // ------------------------------------------------------------------
547cdf0e10cSrcweir 
548cdf0e10cSrcweir Size Graphic::GetSizePixel( const OutputDevice* pRefDevice ) const
549cdf0e10cSrcweir {
550cdf0e10cSrcweir     Size aRet;
551cdf0e10cSrcweir 
552cdf0e10cSrcweir     if( GRAPHIC_BITMAP == mpImpGraphic->ImplGetType() )
553cdf0e10cSrcweir         aRet = mpImpGraphic->ImplGetBitmapEx(GraphicConversionParameters()).GetSizePixel();
554cdf0e10cSrcweir     else
555cdf0e10cSrcweir         aRet = ( pRefDevice ? pRefDevice : Application::GetDefaultDevice() )->LogicToPixel( GetPrefSize(), GetPrefMapMode() );
556cdf0e10cSrcweir 
557cdf0e10cSrcweir     return aRet;
558cdf0e10cSrcweir }
559cdf0e10cSrcweir 
560cdf0e10cSrcweir // ------------------------------------------------------------------
561cdf0e10cSrcweir 
562cdf0e10cSrcweir sal_uLong Graphic::GetSizeBytes() const
563cdf0e10cSrcweir {
564cdf0e10cSrcweir     return mpImpGraphic->ImplGetSizeBytes();
565cdf0e10cSrcweir }
566cdf0e10cSrcweir 
567cdf0e10cSrcweir // ------------------------------------------------------------------------
568cdf0e10cSrcweir 
569cdf0e10cSrcweir void Graphic::Draw( OutputDevice* pOutDev, const Point& rDestPt ) const
570cdf0e10cSrcweir {
571cdf0e10cSrcweir     mpImpGraphic->ImplDraw( pOutDev, rDestPt );
572cdf0e10cSrcweir }
573cdf0e10cSrcweir 
574cdf0e10cSrcweir // ------------------------------------------------------------------------
575cdf0e10cSrcweir 
576cdf0e10cSrcweir void Graphic::Draw( OutputDevice* pOutDev,
577cdf0e10cSrcweir                     const Point& rDestPt, const Size& rDestSz ) const
578cdf0e10cSrcweir {
579cdf0e10cSrcweir     if( GRAPHIC_DEFAULT == mpImpGraphic->ImplGetType() )
580cdf0e10cSrcweir         ImplDrawDefault( pOutDev, NULL, NULL, NULL, NULL, rDestPt, rDestSz );
581cdf0e10cSrcweir     else
582cdf0e10cSrcweir         mpImpGraphic->ImplDraw( pOutDev, rDestPt, rDestSz );
583cdf0e10cSrcweir }
584cdf0e10cSrcweir 
585cdf0e10cSrcweir // ------------------------------------------------------------------------
586cdf0e10cSrcweir 
587cdf0e10cSrcweir void Graphic::Draw( OutputDevice* pOutDev, const String& rText,
588cdf0e10cSrcweir                     Font& rFont, const Bitmap& rBitmap,
589cdf0e10cSrcweir                     const Point& rDestPt, const Size& rDestSz )
590cdf0e10cSrcweir {
591cdf0e10cSrcweir     ImplDrawDefault( pOutDev, &rText, &rFont, &rBitmap, NULL, rDestPt, rDestSz );
592cdf0e10cSrcweir }
593cdf0e10cSrcweir 
594cdf0e10cSrcweir // ------------------------------------------------------------------------
595cdf0e10cSrcweir 
596cdf0e10cSrcweir void Graphic::DrawEx( OutputDevice* pOutDev, const String& rText,
597cdf0e10cSrcweir                     Font& rFont, const BitmapEx& rBitmap,
598cdf0e10cSrcweir                     const Point& rDestPt, const Size& rDestSz )
599cdf0e10cSrcweir {
600cdf0e10cSrcweir     ImplDrawDefault( pOutDev, &rText, &rFont, NULL, &rBitmap, rDestPt, rDestSz );
601cdf0e10cSrcweir }
602cdf0e10cSrcweir 
603cdf0e10cSrcweir // ------------------------------------------------------------------------
604cdf0e10cSrcweir 
605cdf0e10cSrcweir void Graphic::StartAnimation( OutputDevice* pOutDev, const Point& rDestPt, long nExtraData,
606cdf0e10cSrcweir                               OutputDevice* pFirstFrameOutDev )
607cdf0e10cSrcweir {
608cdf0e10cSrcweir     ImplTestRefCount();
609cdf0e10cSrcweir     mpImpGraphic->ImplStartAnimation( pOutDev, rDestPt, nExtraData, pFirstFrameOutDev );
610cdf0e10cSrcweir }
611cdf0e10cSrcweir 
612cdf0e10cSrcweir // ------------------------------------------------------------------------
613cdf0e10cSrcweir 
614cdf0e10cSrcweir void Graphic::StartAnimation( OutputDevice* pOutDev, const Point& rDestPt,
615cdf0e10cSrcweir                               const Size& rDestSz, long nExtraData,
616cdf0e10cSrcweir                               OutputDevice* pFirstFrameOutDev )
617cdf0e10cSrcweir {
618cdf0e10cSrcweir     ImplTestRefCount();
619cdf0e10cSrcweir     mpImpGraphic->ImplStartAnimation( pOutDev, rDestPt, rDestSz, nExtraData, pFirstFrameOutDev );
620cdf0e10cSrcweir }
621cdf0e10cSrcweir 
622cdf0e10cSrcweir // ------------------------------------------------------------------------
623cdf0e10cSrcweir 
624cdf0e10cSrcweir void Graphic::StopAnimation( OutputDevice* pOutDev, long nExtraData )
625cdf0e10cSrcweir {
626cdf0e10cSrcweir     ImplTestRefCount();
627cdf0e10cSrcweir     mpImpGraphic->ImplStopAnimation( pOutDev, nExtraData );
628cdf0e10cSrcweir }
629cdf0e10cSrcweir 
630cdf0e10cSrcweir // ------------------------------------------------------------------------
631cdf0e10cSrcweir 
632cdf0e10cSrcweir void Graphic::SetAnimationNotifyHdl( const Link& rLink )
633cdf0e10cSrcweir {
634cdf0e10cSrcweir     mpImpGraphic->ImplSetAnimationNotifyHdl( rLink );
635cdf0e10cSrcweir }
636cdf0e10cSrcweir 
637cdf0e10cSrcweir // ------------------------------------------------------------------------
638cdf0e10cSrcweir 
639cdf0e10cSrcweir Link Graphic::GetAnimationNotifyHdl() const
640cdf0e10cSrcweir {
641cdf0e10cSrcweir     return mpImpGraphic->ImplGetAnimationNotifyHdl();
642cdf0e10cSrcweir }
643cdf0e10cSrcweir 
644cdf0e10cSrcweir // ------------------------------------------------------------------------
645cdf0e10cSrcweir 
646cdf0e10cSrcweir sal_uLong Graphic::GetAnimationLoopCount() const
647cdf0e10cSrcweir {
648cdf0e10cSrcweir     return mpImpGraphic->ImplGetAnimationLoopCount();
649cdf0e10cSrcweir }
650cdf0e10cSrcweir 
651cdf0e10cSrcweir // ------------------------------------------------------------------------
652cdf0e10cSrcweir 
653cdf0e10cSrcweir void Graphic::ResetAnimationLoopCount()
654cdf0e10cSrcweir {
655cdf0e10cSrcweir     mpImpGraphic->ImplResetAnimationLoopCount();
656cdf0e10cSrcweir }
657cdf0e10cSrcweir 
658cdf0e10cSrcweir // ------------------------------------------------------------------------
659cdf0e10cSrcweir 
660cdf0e10cSrcweir List* Graphic::GetAnimationInfoList() const
661cdf0e10cSrcweir {
662cdf0e10cSrcweir     return mpImpGraphic->ImplGetAnimationInfoList();
663cdf0e10cSrcweir }
664cdf0e10cSrcweir 
665cdf0e10cSrcweir // ------------------------------------------------------------------------
666cdf0e10cSrcweir 
667cdf0e10cSrcweir GraphicReader* Graphic::GetContext()
668cdf0e10cSrcweir {
669cdf0e10cSrcweir     return mpImpGraphic->ImplGetContext();
670cdf0e10cSrcweir }
671cdf0e10cSrcweir 
672cdf0e10cSrcweir // ------------------------------------------------------------------------
673cdf0e10cSrcweir 
674cdf0e10cSrcweir void Graphic::SetContext( GraphicReader* pReader )
675cdf0e10cSrcweir {
676cdf0e10cSrcweir     mpImpGraphic->ImplSetContext( pReader );
677cdf0e10cSrcweir }
678cdf0e10cSrcweir 
679cdf0e10cSrcweir // ------------------------------------------------------------------------
680cdf0e10cSrcweir 
681cdf0e10cSrcweir sal_uInt16 Graphic::GetGraphicsCompressMode( SvStream& rIStm )
682cdf0e10cSrcweir {
683cdf0e10cSrcweir     const sal_uLong     nPos = rIStm.Tell();
684cdf0e10cSrcweir     const sal_uInt16    nOldFormat = rIStm.GetNumberFormatInt();
685cdf0e10cSrcweir     sal_uInt32          nTmp32;
686cdf0e10cSrcweir     sal_uInt16          nTmp16;
687cdf0e10cSrcweir     sal_uInt16          nCompressMode = COMPRESSMODE_NONE;
688cdf0e10cSrcweir 
689cdf0e10cSrcweir     rIStm.SetNumberFormatInt( NUMBERFORMAT_INT_LITTLEENDIAN );
690cdf0e10cSrcweir 
691cdf0e10cSrcweir     rIStm >> nTmp32;
692cdf0e10cSrcweir 
693cdf0e10cSrcweir     // is it a swapped graphic with a bitmap?
694cdf0e10cSrcweir     rIStm.SeekRel( (nTmp32 == (sal_uInt32) GRAPHIC_BITMAP ) ? 40 : -4 );
695cdf0e10cSrcweir 
696cdf0e10cSrcweir     // try to read bitmap id
697cdf0e10cSrcweir     rIStm >> nTmp16;
698cdf0e10cSrcweir 
699cdf0e10cSrcweir     // check id of BitmapFileHeader
700cdf0e10cSrcweir     if( 0x4D42 == nTmp16 )
701cdf0e10cSrcweir     {
702cdf0e10cSrcweir         // seek to compress field of BitmapInfoHeader
703cdf0e10cSrcweir         rIStm.SeekRel( 28 );
704cdf0e10cSrcweir         rIStm >> nTmp32;
705cdf0e10cSrcweir 
706cdf0e10cSrcweir         // Compare with our own compressmode
707cdf0e10cSrcweir         if( ZCOMPRESS == nTmp32 )
708cdf0e10cSrcweir             nCompressMode = COMPRESSMODE_ZBITMAP;
709cdf0e10cSrcweir     }
710cdf0e10cSrcweir 
711cdf0e10cSrcweir     rIStm.SetNumberFormatInt( nOldFormat );
712cdf0e10cSrcweir     rIStm.Seek( nPos );
713cdf0e10cSrcweir 
714cdf0e10cSrcweir     return nCompressMode;
715cdf0e10cSrcweir }
716cdf0e10cSrcweir 
717cdf0e10cSrcweir // ------------------------------------------------------------------------
718cdf0e10cSrcweir 
719cdf0e10cSrcweir void Graphic::SetDocFileName( const String& rName, sal_uLong nFilePos )
720cdf0e10cSrcweir {
721cdf0e10cSrcweir     mpImpGraphic->ImplSetDocFileName( rName, nFilePos );
722cdf0e10cSrcweir }
723cdf0e10cSrcweir 
724cdf0e10cSrcweir // ------------------------------------------------------------------------
725cdf0e10cSrcweir 
726cdf0e10cSrcweir const String& Graphic::GetDocFileName() const
727cdf0e10cSrcweir {
728cdf0e10cSrcweir     return mpImpGraphic->ImplGetDocFileName();
729cdf0e10cSrcweir }
730cdf0e10cSrcweir 
731cdf0e10cSrcweir // ------------------------------------------------------------------------
732cdf0e10cSrcweir 
733cdf0e10cSrcweir sal_uLong Graphic::GetDocFilePos() const
734cdf0e10cSrcweir {
735cdf0e10cSrcweir     return mpImpGraphic->ImplGetDocFilePos();
736cdf0e10cSrcweir }
737cdf0e10cSrcweir 
738cdf0e10cSrcweir // ------------------------------------------------------------------------
739cdf0e10cSrcweir 
740cdf0e10cSrcweir sal_Bool Graphic::ReadEmbedded( SvStream& rIStream, sal_Bool bSwap )
741cdf0e10cSrcweir {
742cdf0e10cSrcweir     ImplTestRefCount();
743cdf0e10cSrcweir     return mpImpGraphic->ImplReadEmbedded( rIStream, bSwap );
744cdf0e10cSrcweir }
745cdf0e10cSrcweir 
746cdf0e10cSrcweir // ------------------------------------------------------------------------
747cdf0e10cSrcweir 
748cdf0e10cSrcweir sal_Bool Graphic::WriteEmbedded( SvStream& rOStream )
749cdf0e10cSrcweir {
750cdf0e10cSrcweir     ImplTestRefCount();
751cdf0e10cSrcweir     return mpImpGraphic->ImplWriteEmbedded( rOStream );
752cdf0e10cSrcweir }
753cdf0e10cSrcweir 
754cdf0e10cSrcweir // ------------------------------------------------------------------------
755cdf0e10cSrcweir 
756cdf0e10cSrcweir sal_Bool Graphic::SwapOut()
757cdf0e10cSrcweir {
758cdf0e10cSrcweir     ImplTestRefCount();
759cdf0e10cSrcweir     return mpImpGraphic->ImplSwapOut();
760cdf0e10cSrcweir }
761cdf0e10cSrcweir 
762cdf0e10cSrcweir // ------------------------------------------------------------------------
763cdf0e10cSrcweir 
764cdf0e10cSrcweir sal_Bool Graphic::SwapOut( SvStream* pOStream )
765cdf0e10cSrcweir {
766cdf0e10cSrcweir     ImplTestRefCount();
767cdf0e10cSrcweir     return mpImpGraphic->ImplSwapOut( pOStream );
768cdf0e10cSrcweir }
769cdf0e10cSrcweir 
770cdf0e10cSrcweir // ------------------------------------------------------------------------
771cdf0e10cSrcweir 
772cdf0e10cSrcweir sal_Bool Graphic::SwapIn()
773cdf0e10cSrcweir {
774cdf0e10cSrcweir     ImplTestRefCount();
775cdf0e10cSrcweir     return mpImpGraphic->ImplSwapIn();
776cdf0e10cSrcweir }
777cdf0e10cSrcweir 
778cdf0e10cSrcweir // ------------------------------------------------------------------------
779cdf0e10cSrcweir 
780cdf0e10cSrcweir sal_Bool Graphic::SwapIn( SvStream* pStrm )
781cdf0e10cSrcweir {
782cdf0e10cSrcweir     ImplTestRefCount();
783cdf0e10cSrcweir     return mpImpGraphic->ImplSwapIn( pStrm );
784cdf0e10cSrcweir }
785cdf0e10cSrcweir 
786cdf0e10cSrcweir // ------------------------------------------------------------------------
787cdf0e10cSrcweir 
788cdf0e10cSrcweir sal_Bool Graphic::IsSwapOut() const
789cdf0e10cSrcweir {
790cdf0e10cSrcweir     return mpImpGraphic->ImplIsSwapOut();
791cdf0e10cSrcweir }
792cdf0e10cSrcweir 
793cdf0e10cSrcweir // ------------------------------------------------------------------------
794cdf0e10cSrcweir 
795cdf0e10cSrcweir void Graphic::SetLink( const GfxLink& rGfxLink )
796cdf0e10cSrcweir {
797cdf0e10cSrcweir     ImplTestRefCount();
798cdf0e10cSrcweir     mpImpGraphic->ImplSetLink( rGfxLink );
799cdf0e10cSrcweir }
800cdf0e10cSrcweir 
801cdf0e10cSrcweir // ------------------------------------------------------------------------
802cdf0e10cSrcweir 
803cdf0e10cSrcweir GfxLink Graphic::GetLink() const
804cdf0e10cSrcweir {
805cdf0e10cSrcweir     return mpImpGraphic->ImplGetLink();
806cdf0e10cSrcweir }
807cdf0e10cSrcweir 
808cdf0e10cSrcweir // ------------------------------------------------------------------------
809cdf0e10cSrcweir 
810cdf0e10cSrcweir sal_Bool Graphic::IsLink() const
811cdf0e10cSrcweir {
812cdf0e10cSrcweir     return mpImpGraphic->ImplIsLink();
813cdf0e10cSrcweir }
814cdf0e10cSrcweir 
815cdf0e10cSrcweir // ------------------------------------------------------------------------
816cdf0e10cSrcweir 
817cdf0e10cSrcweir sal_uLong Graphic::GetChecksum() const
818cdf0e10cSrcweir {
819cdf0e10cSrcweir     return mpImpGraphic->ImplGetChecksum();
820cdf0e10cSrcweir }
821cdf0e10cSrcweir 
822cdf0e10cSrcweir // ------------------------------------------------------------------------
823cdf0e10cSrcweir 
824cdf0e10cSrcweir sal_Bool Graphic::ExportNative( SvStream& rOStream ) const
825cdf0e10cSrcweir {
826cdf0e10cSrcweir     return mpImpGraphic->ImplExportNative( rOStream );
827cdf0e10cSrcweir }
828cdf0e10cSrcweir 
829cdf0e10cSrcweir // ------------------------------------------------------------------------
830cdf0e10cSrcweir 
831cdf0e10cSrcweir SvStream& operator>>( SvStream& rIStream, Graphic& rGraphic )
832cdf0e10cSrcweir {
833cdf0e10cSrcweir     rGraphic.ImplTestRefCount();
834cdf0e10cSrcweir     return rIStream >> *rGraphic.mpImpGraphic;
835cdf0e10cSrcweir }
836cdf0e10cSrcweir 
837cdf0e10cSrcweir // ------------------------------------------------------------------------
838cdf0e10cSrcweir 
839cdf0e10cSrcweir SvStream& operator<<( SvStream& rOStream, const Graphic& rGraphic )
840cdf0e10cSrcweir {
841cdf0e10cSrcweir     return rOStream << *rGraphic.mpImpGraphic;
842cdf0e10cSrcweir }
843