maSvgDataArray only populates a uno::Sequence, so use that instead
Change-Id: I335d5ee70e95e1a3b204d34f6df4cb62f3fb3cad
diff --git a/include/vcl/svgdata.hxx b/include/vcl/svgdata.hxx
index c8ee1864..b234c10 100644
--- a/include/vcl/svgdata.hxx
+++ b/include/vcl/svgdata.hxx
@@ -21,13 +21,12 @@
#define INCLUDED_VCL_SVGDATA_HXX
#include <basegfx/range/b2drange.hxx>
#include <boost/shared_array.hpp>
#include <com/sun/star/graphic/XPrimitive2D.hpp>
#include <vcl/bitmapex.hxx>
#include <rtl/ustring.hxx>
typedef boost::shared_array< sal_uInt8 > SvgDataArray;
typedef css::uno::Sequence<sal_Int8> SvgDataArray;
// helper to convert any Primitive2DSequence to a good quality BitmapEx,
@@ -44,7 +43,6 @@ class VCL_DLLPUBLIC SvgData
private:
// the file and length
SvgDataArray maSvgDataArray;
sal_uInt32 mnSvgDataArrayLength;
// The absolute Path if available
OUString maPath;
@@ -63,12 +61,12 @@ private:
SvgData& operator=(const SvgData&) SAL_DELETED_FUNCTION;
public:
SvgData(const SvgDataArray& rSvgDataArray, sal_uInt32 nSvgDataArrayLength, const OUString& rPath);
SvgData(const SvgDataArray& rSvgDataArray, const OUString& rPath);
SvgData(const OUString& rPath);
/// data read
const SvgDataArray& getSvgDataArray() const { return maSvgDataArray; }
sal_uInt32 getSvgDataArrayLength() const { return mnSvgDataArrayLength; }
sal_uInt32 getSvgDataArrayLength() const { return maSvgDataArray.getLength(); }
const OUString& getPath() const { return maPath; }
/// data read and evtl. on demand creation
diff --git a/vcl/source/filter/graphicfilter.cxx b/vcl/source/filter/graphicfilter.cxx
index 7d79078..49f3b65 100644
--- a/vcl/source/filter/graphicfilter.cxx
+++ b/vcl/source/filter/graphicfilter.cxx
@@ -1533,18 +1533,18 @@ sal_uInt16 GraphicFilter::ImportGraphic( Graphic& rGraphic, const OUString& rPat
if (!rIStream.GetError() && nMemoryLength >= 0)
{
SvgDataArray aNewData(new sal_uInt8[nMemoryLength]);
SvgDataArray aNewData(nMemoryLength);
aMemStream.Seek(STREAM_SEEK_TO_BEGIN);
aMemStream.Read(aNewData.get(), nMemoryLength);
aMemStream.Read(aNewData.begin(), nMemoryLength);
// Make a uncompressed copy for GfxLink
nGraphicContentSize = nMemoryLength;
pGraphicContent = new sal_uInt8[nGraphicContentSize];
std::copy(aNewData.get(), aNewData.get() + nMemoryLength, pGraphicContent);
std::copy(aNewData.begin(), aNewData.end(), pGraphicContent);
if(!aMemStream.GetError() )
{
SvgDataPtr aSvgDataPtr(new SvgData(aNewData, nMemoryLength, rPath));
SvgDataPtr aSvgDataPtr(new SvgData(aNewData, rPath));
rGraphic = Graphic(aSvgDataPtr);
bOkay = true;
}
@@ -1552,20 +1552,20 @@ sal_uInt16 GraphicFilter::ImportGraphic( Graphic& rGraphic, const OUString& rPat
}
else
{
SvgDataArray aNewData(new sal_uInt8[nStreamLength]);
SvgDataArray aNewData(nStreamLength);
rIStream.Seek(nStreamPosition);
rIStream.Read(aNewData.get(), nStreamLength);
rIStream.Read(aNewData.begin(), nStreamLength);
if(!rIStream.GetError())
{
SvgDataPtr aSvgDataPtr(new SvgData(aNewData, nStreamLength, rPath));
SvgDataPtr aSvgDataPtr(new SvgData(aNewData, rPath));
rGraphic = Graphic(aSvgDataPtr);
bOkay = true;
}
}
}
if(bOkay)
if (bOkay)
{
eLinkType = GFX_LINK_TYPE_NATIVE_SVG;
}
diff --git a/vcl/source/gdi/impgraph.cxx b/vcl/source/gdi/impgraph.cxx
index 4050efe..735eab1 100644
--- a/vcl/source/gdi/impgraph.cxx
+++ b/vcl/source/gdi/impgraph.cxx
@@ -1542,23 +1542,21 @@ SvStream& ReadImpGraphic( SvStream& rIStm, ImpGraphic& rImpGraphic )
}
else
{
sal_uInt32 mnSvgDataArrayLength(0);
rIStm.ReadUInt32( mnSvgDataArrayLength );
sal_uInt32 nSvgDataArrayLength(0);
rIStm.ReadUInt32(nSvgDataArrayLength);
if(mnSvgDataArrayLength)
if (nSvgDataArrayLength)
{
SvgDataArray aNewData(new sal_uInt8[mnSvgDataArrayLength]);
OUString aPath;
SvgDataArray aNewData(nSvgDataArrayLength);
rIStm.Read(aNewData.get(), mnSvgDataArrayLength);
aPath = rIStm.ReadUniOrByteString(rIStm.GetStreamCharSet());
rIStm.Read(aNewData.begin(), nSvgDataArrayLength);
OUString aPath = rIStm.ReadUniOrByteString(rIStm.GetStreamCharSet());
if(!rIStm.GetError())
if (!rIStm.GetError())
{
SvgDataPtr aSvgDataPtr(
new SvgData(
aNewData,
mnSvgDataArrayLength,
OUString(aPath)));
rImpGraphic = aSvgDataPtr;
diff --git a/vcl/source/gdi/svgdata.cxx b/vcl/source/gdi/svgdata.cxx
index d86fc8d..cd1614e 100644
--- a/vcl/source/gdi/svgdata.cxx
+++ b/vcl/source/gdi/svgdata.cxx
@@ -99,14 +99,13 @@ void SvgData::ensureReplacement()
void SvgData::ensureSequenceAndRange()
{
if(!maSequence.hasElements() && mnSvgDataArrayLength)
if(!maSequence.hasElements() && maSvgDataArray.hasElements())
{
// import SVG to maSequence, also set maRange
maRange.reset();
// create stream
const uno::Sequence< sal_Int8 > aPostData(reinterpret_cast<sal_Int8*>(maSvgDataArray.get()), mnSvgDataArrayLength);
const uno::Reference< io::XInputStream > myInputStream(new comphelper::SequenceInputStream(aPostData));
const uno::Reference< io::XInputStream > myInputStream(new comphelper::SequenceInputStream(maSvgDataArray));
if(myInputStream.is())
{
@@ -152,9 +151,8 @@ void SvgData::ensureSequenceAndRange()
}
}
SvgData::SvgData(const SvgDataArray& rSvgDataArray, sal_uInt32 nSvgDataArrayLength, const OUString& rPath)
SvgData::SvgData(const SvgDataArray& rSvgDataArray, const OUString& rPath)
: maSvgDataArray(rSvgDataArray),
mnSvgDataArrayLength(nSvgDataArrayLength),
maPath(rPath),
maRange(),
maSequence(),
@@ -164,7 +162,6 @@ SvgData::SvgData(const SvgDataArray& rSvgDataArray, sal_uInt32 nSvgDataArrayLeng
SvgData::SvgData(const OUString& rPath):
maSvgDataArray(),
mnSvgDataArrayLength(0),
maPath(rPath),
maRange(),
maSequence(),
@@ -174,15 +171,14 @@ SvgData::SvgData(const OUString& rPath):
if(rIStm.GetError())
return;
const sal_uInt32 nStmLen(rIStm.remainingSize());
if(nStmLen)
if (nStmLen)
{
SvgDataArray aNewData(new sal_uInt8[nStmLen]);
rIStm.Read(aNewData.get(), nStmLen);
maSvgDataArray.realloc(nStmLen);
rIStm.Read(maSvgDataArray.begin(), nStmLen);
if(!rIStm.GetError())
if (rIStm.GetError())
{
maSvgDataArray = aNewData;
mnSvgDataArrayLength = nStmLen;
maSvgDataArray = SvgDataArray();
}
}
}