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