diff options
Diffstat (limited to 'vcl/source/graphic/UnoGraphicProvider.cxx')
-rw-r--r-- | vcl/source/graphic/UnoGraphicProvider.cxx | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/vcl/source/graphic/UnoGraphicProvider.cxx b/vcl/source/graphic/UnoGraphicProvider.cxx index 50c273006b85..8b9ccb93bf94 100644 --- a/vcl/source/graphic/UnoGraphicProvider.cxx +++ b/vcl/source/graphic/UnoGraphicProvider.cxx @@ -304,6 +304,7 @@ uno::Reference< ::graphic::XGraphic > SAL_CALL GraphicProvider::queryGraphic( co uno::Sequence< ::beans::PropertyValue > aFilterData; + bool bLazyRead = false; for( sal_Int32 i = 0; ( i < rMediaProperties.getLength() ) && !pIStm && !xRet.is(); ++i ) { const OUString aName( rMediaProperties[ i ].Name ); @@ -327,6 +328,8 @@ uno::Reference< ::graphic::XGraphic > SAL_CALL GraphicProvider::queryGraphic( co { aValue >>= aFilterData; } + else if (aName == "LazyRead") + aValue >>= bLazyRead; } // Check for the goal width and height if they are defined @@ -352,6 +355,9 @@ uno::Reference< ::graphic::XGraphic > SAL_CALL GraphicProvider::queryGraphic( co } } + if (bLazyRead && aFilterData.hasElements()) + bLazyRead = false; + SolarMutexGuard g; if( xIStm.is() ) @@ -392,8 +398,17 @@ uno::Reference< ::graphic::XGraphic > SAL_CALL GraphicProvider::queryGraphic( co if ( nExtMapMode > 0 ) pExtHeader = &aExtHeader; - ErrCode error = rFilter.ImportGraphic( aVCLGraphic, aPath, *pIStm, - GRFILTER_FORMAT_DONTKNOW, nullptr, GraphicFilterImportFlags::NONE, pExtHeader ); + ErrCode error = ERRCODE_NONE; + if (bLazyRead) + { + Graphic aGraphic = rFilter.ImportUnloadedGraphic(*pIStm); + if (aGraphic) + aVCLGraphic = aGraphic; + } + if (!aVCLGraphic) + error = rFilter.ImportGraphic(aVCLGraphic, aPath, *pIStm, GRFILTER_FORMAT_DONTKNOW, + nullptr, GraphicFilterImportFlags::NONE, pExtHeader); + if( (error == ERRCODE_NONE ) && ( aVCLGraphic.GetType() != GraphicType::NONE ) ) { |