[Libreoffice-commits] core.git: Branch 'distro/collabora/cd-5.3-3.2' - include/vcl sd/source vcl/inc vcl/source
Jan Holesovsky
kendy at collabora.com
Fri Jun 22 12:26:29 UTC 2018
include/vcl/graph.hxx | 1 +
sd/source/filter/pdf/sdpdffilter.cxx | 4 ++--
vcl/inc/impgraph.hxx | 3 ++-
vcl/source/gdi/graph.cxx | 6 ++++++
vcl/source/gdi/impgraph.cxx | 30 +++++++++++++++++++++++++-----
5 files changed, 36 insertions(+), 8 deletions(-)
New commits:
commit 121052be218f15d81772a1cbb2208189563a8aa6
Author: Jan Holesovsky <kendy at collabora.com>
Date: Thu Jun 21 21:33:56 2018 +0200
pdfium: Share the GfxLink for PDF files.
Partially based on work by Ashod Nakashian, thanks!
Change-Id: Id7e8c4543368b0caf3e459abaff8c53997779c83
Reviewed-on: https://gerrit.libreoffice.org/56265
Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
Tested-by: Ashod Nakashian <ashnakash at gmail.com>
diff --git a/include/vcl/graph.hxx b/include/vcl/graph.hxx
index 1902da49d60f..e7e1708e5c26 100644
--- a/include/vcl/graph.hxx
+++ b/include/vcl/graph.hxx
@@ -211,6 +211,7 @@ private:
public:
void SetLink( const GfxLink& );
+ void SetSharedLink(const std::shared_ptr<GfxLink>& pGfxLink);
GfxLink GetLink() const;
bool IsLink() const;
diff --git a/sd/source/filter/pdf/sdpdffilter.cxx b/sd/source/filter/pdf/sdpdffilter.cxx
index 01e6ee5623de..8ca237fd6345 100644
--- a/sd/source/filter/pdf/sdpdffilter.cxx
+++ b/sd/source/filter/pdf/sdpdffilter.cxx
@@ -111,7 +111,7 @@ bool SdPdfFilter::Import()
const size_t nGraphicContentSize = aPdfData.getLength();
std::unique_ptr<sal_uInt8[]> pGraphicContent(new sal_uInt8[nGraphicContentSize]);
memcpy(pGraphicContent.get(), aPdfData.get(), nGraphicContentSize);
- GfxLink aGfxLink(std::move(pGraphicContent), nGraphicContentSize, GfxLinkType::NativePdf);
+ std::shared_ptr<GfxLink> pGfxLink = std::make_shared<GfxLink>(std::move(pGraphicContent), nGraphicContentSize, GfxLinkType::NativePdf);
auto pPdfData = std::make_shared<uno::Sequence<sal_Int8>>(aPdfData);
mrDocument.CreateFirstPages();
@@ -127,7 +127,7 @@ bool SdPdfFilter::Import()
Graphic aGraphic(aBitmap);
aGraphic.setPdfData(pPdfData);
aGraphic.setPageNumber(nPageNumber);
- aGraphic.SetLink(aGfxLink);
+ aGraphic.SetSharedLink(pGfxLink);
aGraphic.setOriginURL(aFileName);
// Create the page and insert the Graphic.
diff --git a/vcl/inc/impgraph.hxx b/vcl/inc/impgraph.hxx
index 33b591a81a6c..80a12e20d124 100644
--- a/vcl/inc/impgraph.hxx
+++ b/vcl/inc/impgraph.hxx
@@ -45,7 +45,7 @@ private:
std::unique_ptr<Animation> mpAnimation;
std::shared_ptr<GraphicReader> mpContext;
std::shared_ptr<ImpSwapFile> mpSwapFile;
- std::unique_ptr<GfxLink> mpGfxLink;
+ std::shared_ptr<GfxLink> mpGfxLink;
GraphicType meType;
mutable sal_uLong mnSizeBytes;
bool mbSwapOut;
@@ -158,6 +158,7 @@ private:
bool ImplIsSwapOut() const { return mbSwapOut;}
bool ImplIsDummyContext() const { return mbDummyContext; }
void ImplSetLink( const GfxLink& );
+ void ImplSetSharedLink(const std::shared_ptr<GfxLink>& pGfxLink);
GfxLink ImplGetLink();
bool ImplIsLink() const;
diff --git a/vcl/source/gdi/graph.cxx b/vcl/source/gdi/graph.cxx
index cbdf5df56ea5..cbf28e755c8f 100644
--- a/vcl/source/gdi/graph.cxx
+++ b/vcl/source/gdi/graph.cxx
@@ -552,6 +552,12 @@ void Graphic::SetLink( const GfxLink& rGfxLink )
mxImpGraphic->ImplSetLink( rGfxLink );
}
+void Graphic::SetSharedLink(const std::shared_ptr<GfxLink>& pGfxLink)
+{
+ ImplTestRefCount();
+ mxImpGraphic->ImplSetSharedLink(pGfxLink);
+}
+
GfxLink Graphic::GetLink() const
{
return mxImpGraphic->ImplGetLink();
diff --git a/vcl/source/gdi/impgraph.cxx b/vcl/source/gdi/impgraph.cxx
index 798b7c85f745..9332af115ece 100644
--- a/vcl/source/gdi/impgraph.cxx
+++ b/vcl/source/gdi/impgraph.cxx
@@ -125,7 +125,12 @@ ImpGraphic::ImpGraphic(const ImpGraphic& rImpGraphic)
, mnPageNumber(rImpGraphic.mnPageNumber)
{
if( rImpGraphic.mpGfxLink )
- mpGfxLink = o3tl::make_unique<GfxLink>( *rImpGraphic.mpGfxLink );
+ {
+ if (rImpGraphic.mpGfxLink->GetType() == GfxLinkType::NativePdf)
+ mpGfxLink = rImpGraphic.mpGfxLink;
+ else
+ mpGfxLink = std::make_shared<GfxLink>(*rImpGraphic.mpGfxLink);
+ }
if( rImpGraphic.mpAnimation )
{
@@ -239,10 +244,17 @@ ImpGraphic& ImpGraphic::operator=( const ImpGraphic& rImpGraphic )
mbSwapOut = rImpGraphic.mbSwapOut;
mpSwapFile = rImpGraphic.mpSwapFile;
- mpGfxLink.reset();
+ if (rImpGraphic.mpGfxLink)
+ {
+ if (rImpGraphic.mpGfxLink->GetType() == GfxLinkType::NativePdf)
+ mpGfxLink = rImpGraphic.mpGfxLink;
+ else
+ {
+ mpGfxLink.reset();
- if( rImpGraphic.mpGfxLink )
- mpGfxLink = o3tl::make_unique<GfxLink>( *rImpGraphic.mpGfxLink );
+ mpGfxLink = std::make_shared<GfxLink>(*rImpGraphic.mpGfxLink);
+ }
+ }
maSvgData = rImpGraphic.maSvgData;
mpPdfData = rImpGraphic.mpPdfData;
@@ -1347,12 +1359,20 @@ bool ImpGraphic::ImplSwapIn( SvStream* xIStm )
void ImpGraphic::ImplSetLink( const GfxLink& rGfxLink )
{
- mpGfxLink = o3tl::make_unique<GfxLink>( rGfxLink );
+ mpGfxLink = std::make_shared<GfxLink>( rGfxLink );
if( mpGfxLink->IsNative() )
mpGfxLink->SwapOut();
}
+void ImpGraphic::ImplSetSharedLink(const std::shared_ptr<GfxLink>& pGfxLink)
+{
+ mpGfxLink = pGfxLink;
+
+ if (mpGfxLink->IsNative())
+ mpGfxLink->SwapOut();
+}
+
GfxLink ImpGraphic::ImplGetLink()
{
return( mpGfxLink ? *mpGfxLink : GfxLink() );
More information about the Libreoffice-commits
mailing list