xref: /AOO41X/main/sdext/source/minimizer/graphiccollector.cxx (revision ca62e2c2083b5d0995f1245bad6c2edfb455fbec)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sdext.hxx"
26 
27 #include "graphiccollector.hxx"
28 #include <com/sun/star/awt/XDevice.hpp>
29 #include <com/sun/star/frame/XFramesSupplier.hpp>
30 #include <com/sun/star/drawing/FillStyle.hpp>
31 #include <com/sun/star/drawing/BitmapMode.hpp>
32 #include <com/sun/star/drawing/XDrawPagesSupplier.hpp>
33 #include <com/sun/star/presentation/XPresentationPage.hpp>
34 #include <com/sun/star/drawing/XMasterPagesSupplier.hpp>
35 
36 #include "impoptimizer.hxx"
37 
38 using namespace ::com::sun::star;
39 using namespace ::com::sun::star::uno;
40 using namespace ::com::sun::star::awt;
41 using namespace ::com::sun::star::drawing;
42 using namespace ::com::sun::star::graphic;
43 using namespace ::com::sun::star::frame;
44 using namespace ::com::sun::star::beans;
45 using namespace ::com::sun::star::presentation;
46 
47 using ::rtl::OUString;
48 
GetDeviceInfo(const Reference<XComponentContext> & rxFact)49 const DeviceInfo& GraphicCollector::GetDeviceInfo( const Reference< XComponentContext >& rxFact )
50 {
51     static DeviceInfo aDeviceInfo;
52     if( !aDeviceInfo.Width )
53     {
54         try
55         {
56             Reference< XFramesSupplier > xDesktop( rxFact->getServiceManager()->createInstanceWithContext(
57                     OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.Desktop" ) ), rxFact ), UNO_QUERY_THROW );
58             Reference< XFrame > xFrame( xDesktop->getActiveFrame() );
59             Reference< XWindow > xWindow( xFrame->getContainerWindow() );
60             Reference< XDevice > xDevice( xWindow, UNO_QUERY_THROW );
61             aDeviceInfo = xDevice->getInfo();
62         }
63         catch( Exception& )
64         {
65         }
66     }
67     return aDeviceInfo;
68 }
69 
ImpAddEntity(std::vector<GraphicCollector::GraphicEntity> & rGraphicEntities,const GraphicSettings & rGraphicSettings,const GraphicCollector::GraphicUser & rUser)70 void ImpAddEntity( std::vector< GraphicCollector::GraphicEntity >& rGraphicEntities, const GraphicSettings& rGraphicSettings, const GraphicCollector::GraphicUser& rUser )
71 {
72     const rtl::OUString aGraphicURL( rUser.maGraphicURL );
73     const rtl::OUString sPackageURL( OUString::createFromAscii( "vnd.sun.star.GraphicObject:" ) );
74 
75     if ( rGraphicSettings.mbEmbedLinkedGraphics || ( !aGraphicURL.getLength() || aGraphicURL.match( sPackageURL, 0 ) ) )
76     {
77         std::vector< GraphicCollector::GraphicEntity >::iterator aIter( rGraphicEntities.begin() );
78         while( aIter != rGraphicEntities.end() )
79         {
80             if ( aIter->maUser[ 0 ].maGraphicURL == aGraphicURL )
81             {
82                 if ( rUser.maLogicalSize.Width > aIter->maLogicalSize.Width )
83                     aIter->maLogicalSize.Width = rUser.maLogicalSize.Width;
84                 if ( rUser.maLogicalSize.Height > aIter->maLogicalSize.Height )
85                     aIter->maLogicalSize.Height = rUser.maLogicalSize.Height;
86                 aIter->maUser.push_back( rUser );
87                 break;
88             }
89             aIter++;
90         }
91         if ( aIter == rGraphicEntities.end() )
92         {
93             GraphicCollector::GraphicEntity aEntity( rUser );
94             rGraphicEntities.push_back( aEntity );
95         }
96     }
97 }
98 
ImpAddGraphicEntity(const Reference<XComponentContext> & rxContext,Reference<XShape> & rxShape,const GraphicSettings & rGraphicSettings,std::vector<GraphicCollector::GraphicEntity> & rGraphicEntities)99 void ImpAddGraphicEntity( const Reference< XComponentContext >& rxContext, Reference< XShape >& rxShape, const GraphicSettings& rGraphicSettings, std::vector< GraphicCollector::GraphicEntity >& rGraphicEntities )
100 {
101     Reference< XGraphic > xGraphic;
102     Reference< XPropertySet > xShapePropertySet( rxShape, UNO_QUERY_THROW );
103     if ( xShapePropertySet->getPropertyValue( TKGet( TK_Graphic ) ) >>= xGraphic )
104     {
105         text::GraphicCrop aGraphicCropLogic( 0, 0, 0, 0 );
106 
107         GraphicCollector::GraphicUser aUser;
108         aUser.mxShape = rxShape;
109         aUser.mbFillBitmap = sal_False;
110         xShapePropertySet->getPropertyValue( TKGet( TK_GraphicURL ) ) >>= aUser.maGraphicURL;
111         xShapePropertySet->getPropertyValue( TKGet( TK_GraphicStreamURL ) ) >>= aUser.maGraphicStreamURL;
112         xShapePropertySet->getPropertyValue( TKGet( TK_GraphicCrop ) ) >>= aGraphicCropLogic;
113         awt::Size aLogicalSize( rxShape->getSize() );
114 
115         // calculating the logical size, as if there were no cropping
116         if ( aGraphicCropLogic.Left || aGraphicCropLogic.Right || aGraphicCropLogic.Top || aGraphicCropLogic.Bottom )
117         {
118             awt::Size aSize100thMM( GraphicCollector::GetOriginalSize( rxContext, xGraphic ) );
119             if ( aSize100thMM.Width && aSize100thMM.Height )
120             {
121                 awt::Size aCropSize( aSize100thMM.Width - ( aGraphicCropLogic.Left + aGraphicCropLogic.Right ),
122                                      aSize100thMM.Height - ( aGraphicCropLogic.Top + aGraphicCropLogic.Bottom ));
123                 if ( aCropSize.Width && aCropSize.Height )
124                 {
125                     awt::Size aNewLogSize( static_cast< sal_Int32 >( static_cast< double >( aSize100thMM.Width * aLogicalSize.Width ) / aCropSize.Width ),
126                         static_cast< sal_Int32 >( static_cast< double >( aSize100thMM.Height * aLogicalSize.Height ) / aCropSize.Height ) );
127                     aLogicalSize = aNewLogSize;
128                 }
129             }
130         }
131         aUser.maGraphicCropLogic = aGraphicCropLogic;
132         aUser.maLogicalSize = aLogicalSize;
133         ImpAddEntity( rGraphicEntities, rGraphicSettings, aUser );
134     }
135 }
136 
ImpAddFillBitmapEntity(const Reference<XComponentContext> & rxContext,const Reference<XPropertySet> & rxPropertySet,const awt::Size & rLogicalSize,std::vector<GraphicCollector::GraphicEntity> & rGraphicEntities,const GraphicSettings & rGraphicSettings,const Reference<XPropertySet> & rxPagePropertySet)137 void ImpAddFillBitmapEntity( const Reference< XComponentContext >& rxContext, const Reference< XPropertySet >& rxPropertySet, const awt::Size& rLogicalSize,
138     std::vector< GraphicCollector::GraphicEntity >& rGraphicEntities, const GraphicSettings& rGraphicSettings, const Reference< XPropertySet >& rxPagePropertySet )
139 {
140     try
141     {
142         FillStyle eFillStyle;
143         if ( rxPropertySet->getPropertyValue( TKGet( TK_FillStyle ) ) >>= eFillStyle )
144         {
145             if ( eFillStyle == FillStyle_BITMAP )
146             {
147                 rtl::OUString aFillBitmapURL;
148                 Reference< XBitmap > xFillBitmap;
149                 if ( rxPropertySet->getPropertyValue( TKGet( TK_FillBitmap ) ) >>= xFillBitmap )
150                 {
151                     Reference< XGraphic > xGraphic( xFillBitmap, UNO_QUERY_THROW );
152                     if ( xGraphic.is() )
153                     {
154                         awt::Size aLogicalSize( rLogicalSize );
155                         Reference< XPropertySetInfo > axPropSetInfo( rxPropertySet->getPropertySetInfo() );
156                         if ( axPropSetInfo.is() )
157                         {
158                             if ( axPropSetInfo->hasPropertyByName( TKGet( TK_FillBitmapMode ) ) )
159                             {
160                                 BitmapMode eBitmapMode;
161                                 if ( rxPropertySet->getPropertyValue( TKGet( TK_FillBitmapMode ) ) >>= eBitmapMode )
162                                 {
163                                     if ( ( eBitmapMode == BitmapMode_REPEAT ) || ( eBitmapMode == BitmapMode_NO_REPEAT ) )
164                                     {
165                                         sal_Bool bLogicalSize = sal_False;
166                                         awt::Size aSize( 0, 0 );
167                                         if ( ( rxPropertySet->getPropertyValue( TKGet( TK_FillBitmapLogicalSize ) ) >>= bLogicalSize )
168                                           && ( rxPropertySet->getPropertyValue( TKGet( TK_FillBitmapSizeX ) ) >>= aSize.Width )
169                                           && ( rxPropertySet->getPropertyValue( TKGet( TK_FillBitmapSizeY ) ) >>= aSize.Height ) )
170                                         {
171                                             if ( bLogicalSize )
172                                             {
173                                                 if ( !aSize.Width || !aSize.Height )
174                                                 {
175                                                     awt::Size aSize100thMM( GraphicCollector::GetOriginalSize( rxContext, xGraphic ) );
176                                                     if ( aSize100thMM.Width && aSize100thMM.Height )
177                                                         aLogicalSize = aSize100thMM;
178                                                 }
179                                                 else
180                                                     aLogicalSize = aSize;
181                                             }
182                                             else
183                                             {
184                                                 aLogicalSize.Width = sal::static_int_cast< sal_Int32 >( ( static_cast< double >( aLogicalSize.Width ) * aSize.Width ) / -100.0 );
185                                                 aLogicalSize.Height = sal::static_int_cast< sal_Int32 >( ( static_cast< double >( aLogicalSize.Height ) * aSize.Height ) / -100.0 );
186                                             }
187                                         }
188                                     }
189                                 }
190                             }
191                         }
192                         GraphicCollector::GraphicUser aUser;
193                         aUser.mxPropertySet = rxPropertySet;
194                         rxPropertySet->getPropertyValue( TKGet( TK_FillBitmapURL ) ) >>= aUser.maGraphicURL;
195                         aUser.mbFillBitmap = sal_True;
196                         aUser.maLogicalSize = aLogicalSize;
197                         aUser.mxPagePropertySet = rxPagePropertySet;
198                         ImpAddEntity( rGraphicEntities, rGraphicSettings, aUser );
199                     }
200                 }
201             }
202         }
203     }
204     catch( Exception& )
205     {
206     }
207 }
208 
ImpCollectBackgroundGraphic(const Reference<XComponentContext> & rxContext,const Reference<XDrawPage> & rxDrawPage,const GraphicSettings & rGraphicSettings,std::vector<GraphicCollector::GraphicEntity> & rGraphicEntities)209 void ImpCollectBackgroundGraphic( const Reference< XComponentContext >& rxContext, const Reference< XDrawPage >& rxDrawPage, const GraphicSettings& rGraphicSettings, std::vector< GraphicCollector::GraphicEntity >& rGraphicEntities )
210 {
211     try
212     {
213         awt::Size aLogicalSize( 28000, 21000 );
214         Reference< XPropertySet > xPropertySet( rxDrawPage, UNO_QUERY_THROW );
215         xPropertySet->getPropertyValue( TKGet( TK_Width ) ) >>= aLogicalSize.Width;
216         xPropertySet->getPropertyValue( TKGet( TK_Height ) ) >>= aLogicalSize.Height;
217 
218         Reference< XPropertySet > xBackgroundPropSet;
219         if ( xPropertySet->getPropertyValue( TKGet( TK_Background ) ) >>= xBackgroundPropSet )
220             ImpAddFillBitmapEntity( rxContext, xBackgroundPropSet, aLogicalSize, rGraphicEntities, rGraphicSettings, xPropertySet );
221     }
222     catch( Exception& )
223     {
224     }
225 }
226 
ImpCollectGraphicObjects(const Reference<XComponentContext> & rxContext,const Reference<XShapes> & rxShapes,const GraphicSettings & rGraphicSettings,std::vector<GraphicCollector::GraphicEntity> & rGraphicEntities)227 void ImpCollectGraphicObjects( const Reference< XComponentContext >& rxContext, const Reference< XShapes >& rxShapes, const GraphicSettings& rGraphicSettings, std::vector< GraphicCollector::GraphicEntity >& rGraphicEntities )
228 {
229     for ( sal_Int32 i = 0; i < rxShapes->getCount(); i++ )
230     {
231         try
232         {
233             const OUString sGraphicObjectShape( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.drawing.GraphicObjectShape" ) );
234             const OUString sGroupShape( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.drawing.GroupShape" ) );
235             Reference< XShape > xShape( rxShapes->getByIndex( i ), UNO_QUERY_THROW );
236             const OUString sShapeType( xShape->getShapeType() );
237             if ( sShapeType == sGroupShape )
238             {
239                 Reference< XShapes > xShapes( xShape, UNO_QUERY_THROW );
240                 ImpCollectGraphicObjects( rxContext, xShapes, rGraphicSettings, rGraphicEntities );
241                 continue;
242             }
243 
244             if ( sShapeType == sGraphicObjectShape )
245                 ImpAddGraphicEntity( rxContext, xShape, rGraphicSettings, rGraphicEntities );
246 
247             // now check for a fillstyle
248             Reference< XPropertySet > xEmptyPagePropSet;
249             Reference< XPropertySet > xShapePropertySet( xShape, UNO_QUERY_THROW );
250             awt::Size aLogicalSize( xShape->getSize() );
251             ImpAddFillBitmapEntity( rxContext, xShapePropertySet, aLogicalSize, rGraphicEntities, rGraphicSettings, xEmptyPagePropSet );
252         }
253         catch( Exception& )
254         {
255         }
256     }
257 }
258 
GetOriginalSize(const Reference<XComponentContext> & rxContext,const Reference<XGraphic> & rxGraphic)259 awt::Size GraphicCollector::GetOriginalSize( const Reference< XComponentContext >& rxContext, const Reference< XGraphic >& rxGraphic )
260 {
261     awt::Size aSize100thMM( 0, 0 );
262     Reference< XPropertySet > xGraphicPropertySet( rxGraphic, UNO_QUERY_THROW );
263     if ( xGraphicPropertySet->getPropertyValue( TKGet( TK_Size100thMM ) ) >>= aSize100thMM )
264     {
265         if ( !aSize100thMM.Width && !aSize100thMM.Height )
266         {   // MAPMODE_PIXEL USED :-(
267             awt::Size aSourceSizePixel( 0, 0 );
268             if ( xGraphicPropertySet->getPropertyValue( TKGet( TK_SizePixel ) ) >>= aSourceSizePixel )
269             {
270                 const DeviceInfo& rDeviceInfo( GraphicCollector::GetDeviceInfo( rxContext ) );
271                 if ( rDeviceInfo.PixelPerMeterX && rDeviceInfo.PixelPerMeterY )
272                 {
273                     aSize100thMM.Width = static_cast< sal_Int32 >( ( aSourceSizePixel.Width * 100000.0 ) / rDeviceInfo.PixelPerMeterX );
274                     aSize100thMM.Height = static_cast< sal_Int32 >( ( aSourceSizePixel.Height * 100000.0 ) / rDeviceInfo.PixelPerMeterY );
275                 }
276             }
277         }
278     }
279     return aSize100thMM;
280 }
281 
CollectGraphics(const Reference<XComponentContext> & rxContext,const Reference<XModel> & rxModel,const GraphicSettings & rGraphicSettings,std::vector<GraphicCollector::GraphicEntity> & rGraphicList)282 void GraphicCollector::CollectGraphics( const Reference< XComponentContext >& rxContext, const Reference< XModel >& rxModel,
283         const GraphicSettings& rGraphicSettings, std::vector< GraphicCollector::GraphicEntity >& rGraphicList )
284 {
285     try
286     {
287         sal_Int32 i;
288         Reference< XDrawPagesSupplier > xDrawPagesSupplier( rxModel, UNO_QUERY_THROW );
289         Reference< XDrawPages > xDrawPages( xDrawPagesSupplier->getDrawPages(), UNO_QUERY_THROW );
290         for ( i = 0; i < xDrawPages->getCount(); i++ )
291         {
292             Reference< XDrawPage > xDrawPage( xDrawPages->getByIndex( i ), UNO_QUERY_THROW );
293             ImpCollectBackgroundGraphic( rxContext, xDrawPage, rGraphicSettings, rGraphicList );
294             Reference< XShapes > xDrawShapes( xDrawPage, UNO_QUERY_THROW );
295             ImpCollectGraphicObjects( rxContext, xDrawShapes, rGraphicSettings, rGraphicList );
296 
297             Reference< XPresentationPage > xPresentationPage( xDrawPage, UNO_QUERY_THROW );
298             Reference< XDrawPage > xNotesPage( xPresentationPage->getNotesPage() );
299             ImpCollectBackgroundGraphic( rxContext, xNotesPage, rGraphicSettings, rGraphicList );
300             Reference< XShapes > xNotesShapes( xNotesPage, UNO_QUERY_THROW );
301             ImpCollectGraphicObjects( rxContext, xNotesShapes, rGraphicSettings, rGraphicList );
302         }
303         Reference< XMasterPagesSupplier > xMasterPagesSupplier( rxModel, UNO_QUERY_THROW );
304         Reference< XDrawPages > xMasterPages( xMasterPagesSupplier->getMasterPages(), UNO_QUERY_THROW );
305         for ( i = 0; i < xMasterPages->getCount(); i++ )
306         {
307             Reference< XDrawPage > xMasterPage( xMasterPages->getByIndex( i ), UNO_QUERY_THROW );
308             ImpCollectBackgroundGraphic( rxContext, xMasterPage, rGraphicSettings, rGraphicList );
309             Reference< XShapes > xMasterPageShapes( xMasterPage, UNO_QUERY_THROW );
310             ImpCollectGraphicObjects( rxContext, xMasterPageShapes, rGraphicSettings, rGraphicList );
311         }
312 
313         std::vector< GraphicCollector::GraphicEntity >::iterator aGraphicIter( rGraphicList.begin() );
314         std::vector< GraphicCollector::GraphicEntity >::iterator aGraphicIEnd( rGraphicList.end() );
315         while( aGraphicIter != aGraphicIEnd )
316         {
317             // check if it is possible to remove the crop area
318             aGraphicIter->mbRemoveCropArea = rGraphicSettings.mbRemoveCropArea;
319             if ( aGraphicIter->mbRemoveCropArea )
320             {
321                 std::vector< GraphicCollector::GraphicUser >::iterator aGUIter( aGraphicIter->maUser.begin() );
322                 while( aGraphicIter->mbRemoveCropArea && ( aGUIter != aGraphicIter->maUser.end() ) )
323                 {
324                     if ( aGUIter->maGraphicCropLogic.Left || aGUIter->maGraphicCropLogic.Top
325                         || aGUIter->maGraphicCropLogic.Right || aGUIter->maGraphicCropLogic.Bottom )
326                     {
327                         if ( aGUIter == aGraphicIter->maUser.begin() )
328                             aGraphicIter->maGraphicCropLogic = aGUIter->maGraphicCropLogic;
329                         else if ( ( aGraphicIter->maGraphicCropLogic.Left != aGUIter->maGraphicCropLogic.Left )
330                             || ( aGraphicIter->maGraphicCropLogic.Top != aGUIter->maGraphicCropLogic.Top )
331                             || ( aGraphicIter->maGraphicCropLogic.Right != aGUIter->maGraphicCropLogic.Right )
332                             || ( aGraphicIter->maGraphicCropLogic.Bottom != aGUIter->maGraphicCropLogic.Bottom ) )
333                         {
334                             aGraphicIter->mbRemoveCropArea = sal_False;
335                         }
336                     }
337                     else
338                         aGraphicIter->mbRemoveCropArea = sal_False;
339                     aGUIter++;
340                 }
341             }
342             if ( !aGraphicIter->mbRemoveCropArea )
343                 aGraphicIter->maGraphicCropLogic = text::GraphicCrop( 0, 0, 0, 0 );
344             aGraphicIter++;
345         }
346     }
347     catch ( Exception& )
348     {
349     }
350 }
351 
ImpCountGraphicObjects(const Reference<XComponentContext> & rxContext,const Reference<XShapes> & rxShapes,const GraphicSettings & rGraphicSettings,sal_Int32 & rnGraphics)352 void ImpCountGraphicObjects( const Reference< XComponentContext >& rxContext, const Reference< XShapes >& rxShapes, const GraphicSettings& rGraphicSettings, sal_Int32& rnGraphics )
353 {
354     for ( sal_Int32 i = 0; i < rxShapes->getCount(); i++ )
355     {
356         try
357         {
358             const OUString sGraphicObjectShape( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.drawing.GraphicObjectShape" ) );
359             const OUString sGroupShape( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.drawing.GroupShape" ) );
360             Reference< XShape > xShape( rxShapes->getByIndex( i ), UNO_QUERY_THROW );
361             const OUString sShapeType( xShape->getShapeType() );
362             if ( sShapeType == sGroupShape )
363             {
364                 Reference< XShapes > xShapes( xShape, UNO_QUERY_THROW );
365                 ImpCountGraphicObjects( rxContext, xShapes, rGraphicSettings, rnGraphics );
366                 continue;
367             }
368 
369             if ( sShapeType == sGraphicObjectShape )
370             {
371                 rnGraphics++;
372             }
373 
374             // now check for a fillstyle
375             Reference< XPropertySet > xEmptyPagePropSet;
376             Reference< XPropertySet > xShapePropertySet( xShape, UNO_QUERY_THROW );
377             awt::Size aLogicalSize( xShape->getSize() );
378 
379             FillStyle eFillStyle;
380             if ( xShapePropertySet->getPropertyValue( TKGet( TK_FillStyle ) ) >>= eFillStyle )
381             {
382                 if ( eFillStyle == FillStyle_BITMAP )
383                 {
384                     rnGraphics++;
385                 }
386             }
387         }
388         catch( Exception& )
389         {
390         }
391     }
392 }
393 
ImpCountBackgroundGraphic(const Reference<XComponentContext> &,const Reference<XDrawPage> & rxDrawPage,const GraphicSettings &,sal_Int32 & rnGraphics)394 void ImpCountBackgroundGraphic( const Reference< XComponentContext >& /* rxContext */, const Reference< XDrawPage >& rxDrawPage,
395                                const GraphicSettings& /* rGraphicSettings */, sal_Int32& rnGraphics )
396 {
397     try
398     {
399         awt::Size aLogicalSize( 28000, 21000 );
400         Reference< XPropertySet > xPropertySet( rxDrawPage, UNO_QUERY_THROW );
401         xPropertySet->getPropertyValue( TKGet( TK_Width ) ) >>= aLogicalSize.Width;
402         xPropertySet->getPropertyValue( TKGet( TK_Height ) ) >>= aLogicalSize.Height;
403 
404         Reference< XPropertySet > xBackgroundPropSet;
405         if ( xPropertySet->getPropertyValue( TKGet( TK_Background ) ) >>= xBackgroundPropSet )
406         {
407             FillStyle eFillStyle;
408             if ( xBackgroundPropSet->getPropertyValue( TKGet( TK_FillStyle ) ) >>= eFillStyle )
409             {
410                 if ( eFillStyle == FillStyle_BITMAP )
411                 {
412                     rnGraphics++;
413                 }
414             }
415         }
416     }
417     catch( Exception& )
418     {
419     }
420 }
421 
CountGraphics(const Reference<XComponentContext> & rxContext,const Reference<XModel> & rxModel,const GraphicSettings & rGraphicSettings,sal_Int32 & rnGraphics)422 void GraphicCollector::CountGraphics( const Reference< XComponentContext >& rxContext, const Reference< XModel >& rxModel,
423         const GraphicSettings& rGraphicSettings, sal_Int32& rnGraphics )
424 {
425     try
426     {
427         sal_Int32 i;
428         Reference< XDrawPagesSupplier > xDrawPagesSupplier( rxModel, UNO_QUERY_THROW );
429         Reference< XDrawPages > xDrawPages( xDrawPagesSupplier->getDrawPages(), UNO_QUERY_THROW );
430         for ( i = 0; i < xDrawPages->getCount(); i++ )
431         {
432             Reference< XDrawPage > xDrawPage( xDrawPages->getByIndex( i ), UNO_QUERY_THROW );
433             ImpCountBackgroundGraphic( rxContext, xDrawPage, rGraphicSettings, rnGraphics );
434             Reference< XShapes > xDrawShapes( xDrawPage, UNO_QUERY_THROW );
435             ImpCountGraphicObjects( rxContext, xDrawShapes, rGraphicSettings, rnGraphics );
436 
437             Reference< XPresentationPage > xPresentationPage( xDrawPage, UNO_QUERY_THROW );
438             Reference< XDrawPage > xNotesPage( xPresentationPage->getNotesPage() );
439             ImpCountBackgroundGraphic( rxContext, xNotesPage, rGraphicSettings, rnGraphics );
440             Reference< XShapes > xNotesShapes( xNotesPage, UNO_QUERY_THROW );
441             ImpCountGraphicObjects( rxContext, xNotesShapes, rGraphicSettings, rnGraphics );
442         }
443         Reference< XMasterPagesSupplier > xMasterPagesSupplier( rxModel, UNO_QUERY_THROW );
444         Reference< XDrawPages > xMasterPages( xMasterPagesSupplier->getMasterPages(), UNO_QUERY_THROW );
445         for ( i = 0; i < xMasterPages->getCount(); i++ )
446         {
447             Reference< XDrawPage > xMasterPage( xMasterPages->getByIndex( i ), UNO_QUERY_THROW );
448             ImpCountBackgroundGraphic( rxContext, xMasterPage, rGraphicSettings, rnGraphics );
449             Reference< XShapes > xMasterPageShapes( xMasterPage, UNO_QUERY_THROW );
450             ImpCountGraphicObjects( rxContext, xMasterPageShapes, rGraphicSettings, rnGraphics );
451         }
452     }
453     catch ( Exception& )
454     {
455     }
456 }
457 
458