summaryrefslogtreecommitdiff
path: root/vcl/source/graphic/UnoGraphicProvider.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'vcl/source/graphic/UnoGraphicProvider.cxx')
-rw-r--r--vcl/source/graphic/UnoGraphicProvider.cxx19
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 ) )
{