filter/source/pdf/pdfdecomposer.cxx            |   14 ++++++++++----
 offapi/com/sun/star/graphic/XPdfDecomposer.idl |    7 ++++---
 vcl/source/gdi/vectorgraphicdata.cxx           |   11 +++++++----
 3 files changed, 21 insertions(+), 11 deletions(-)

New commits:
commit 2d0cefae7a899e5ed62730468f4fb0f25d6297e3
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Thu Dec 31 21:10:27 2020 +0900
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Fri Jan 22 07:48:09 2021 +0100

    [API CHANGE] change XPdfDecomposer to use XBinaryDataContainer
    
    Using BinaryDataContainer doesn't require to copy the data as it
    is compatible with what is used in Graphic, VectorGraphicData and
    GfxLink.
    
    Change-Id: I01589158ae6bf6ac407bde60f07952e3968e3970
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/109597
    Tested-by: Tomaž Vajngerl <qui...@gmail.com>
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>

diff --git a/filter/source/pdf/pdfdecomposer.cxx 
b/filter/source/pdf/pdfdecomposer.cxx
index ce1321a3ceb5..f4572f93742a 100644
--- a/filter/source/pdf/pdfdecomposer.cxx
+++ b/filter/source/pdf/pdfdecomposer.cxx
@@ -17,11 +17,14 @@
 #include <vcl/pdfread.hxx>
 #include <vcl/svapp.hxx>
 #include <vcl/outdev.hxx>
+#include <vcl/BinaryDataContainer.hxx>
+#include <vcl/BinaryDataContainerTools.hxx>
 #include <toolkit/helper/vclunohelper.hxx>
 
 #include <com/sun/star/graphic/XPdfDecomposer.hpp>
 #include <com/sun/star/lang/XServiceInfo.hpp>
 #include <com/sun/star/uno/XComponentContext.hpp>
+#include <com/sun/star/util/XBinaryDataContainer.hpp>
 
 using namespace css;
 
@@ -38,7 +41,7 @@ public:
 
     // XPdfDecomposer
     uno::Sequence<uno::Reference<graphic::XPrimitive2D>> SAL_CALL
-    getDecomposition(const uno::Sequence<sal_Int8>& xPdfData,
+    getDecomposition(const uno::Reference<util::XBinaryDataContainer>& 
xDataContainer,
                      const uno::Sequence<beans::PropertyValue>& 
xDecompositionParameters) override;
 
     // XServiceInfo
@@ -49,8 +52,9 @@ public:
 
 XPdfDecomposer::XPdfDecomposer(uno::Reference<uno::XComponentContext> const&) 
{}
 
-uno::Sequence<uno::Reference<graphic::XPrimitive2D>> SAL_CALL 
XPdfDecomposer::getDecomposition(
-    const uno::Sequence<sal_Int8>& xPdfData, const 
uno::Sequence<beans::PropertyValue>& xParameters)
+uno::Sequence<uno::Reference<graphic::XPrimitive2D>> SAL_CALL
+XPdfDecomposer::getDecomposition(const 
uno::Reference<util::XBinaryDataContainer>& xDataContainer,
+                                 const uno::Sequence<beans::PropertyValue>& 
xParameters)
 {
     sal_Int32 nPageIndex = -1;
 
@@ -66,8 +70,10 @@ uno::Sequence<uno::Reference<graphic::XPrimitive2D>> 
SAL_CALL XPdfDecomposer::ge
     if (nPageIndex < 0)
         nPageIndex = 0;
 
+    BinaryDataContainer aDataContainer = 
vcl::convertUnoBinaryDataContainer(xDataContainer);
+
     std::vector<BitmapEx> aBitmaps;
-    int rv = vcl::RenderPDFBitmaps(xPdfData.getConstArray(), 
xPdfData.getLength(), aBitmaps,
+    int rv = vcl::RenderPDFBitmaps(aDataContainer.getData(), 
aDataContainer.getSize(), aBitmaps,
                                    nPageIndex, 1);
     if (rv == 0)
         return {}; // happens if we do not have PDFium
diff --git a/offapi/com/sun/star/graphic/XPdfDecomposer.idl 
b/offapi/com/sun/star/graphic/XPdfDecomposer.idl
index 25bf8870c1ee..9976475d74cd 100644
--- a/offapi/com/sun/star/graphic/XPdfDecomposer.idl
+++ b/offapi/com/sun/star/graphic/XPdfDecomposer.idl
@@ -11,6 +11,7 @@
 #define __com_sun_star_graphic_XPdfDecomposer_idl__
 
 #include <com/sun/star/uno/XInterface.idl>
+#include <com/sun/star/uno/util/XBinaryDataContainer.idl>
 
 module com {  module sun {  module star {  module graphic {
 
@@ -26,15 +27,15 @@ interface XPdfDecomposer : ::com::sun::star::uno::XInterface
 {
     /** Retrieve decomposed list - in this case a bitmap with the rendered PDF.
 
-        @param xPdfData
-        The PDF data.
+        @param xDataContainer
+        The PDF data in a data container
 
         @param xDecompositionParameters
         Parameters for decomposition. Parameters include:
 
         sal_Int32 PageIndex - which page to use
      */
-    sequence<XPrimitive2D> getDecomposition([in] sequence<byte> xPdfData,
+    sequence<XPrimitive2D> getDecomposition([in] 
com::sun::star::util::XBinaryDataContainer xDataContainer,
                                             [in] 
sequence<com::sun::star::beans::PropertyValue> xDecompositionParameters);
 };
 
diff --git a/vcl/source/gdi/vectorgraphicdata.cxx 
b/vcl/source/gdi/vectorgraphicdata.cxx
index 2afe12e97fbd..5a977191fef4 100644
--- a/vcl/source/gdi/vectorgraphicdata.cxx
+++ b/vcl/source/gdi/vectorgraphicdata.cxx
@@ -29,6 +29,7 @@
 #include <com/sun/star/graphic/Primitive2DTools.hpp>
 #include <com/sun/star/rendering/XIntegerReadOnlyBitmap.hpp>
 #include <com/sun/star/util/XAccounting.hpp>
+#include <com/sun/star/util/XBinaryDataContainer.hpp>
 #include <basegfx/matrix/b2dhommatrixtools.hxx>
 #include <vcl/canvastools.hxx>
 #include <comphelper/seqstream.hxx>
@@ -40,6 +41,7 @@
 #include <vcl/wmfexternal.hxx>
 #include <vcl/pdfread.hxx>
 #include <unotools/streamwrap.hxx>
+#include <graphic/UnoBinaryDataContainer.hxx>
 
 using namespace ::com::sun::star;
 
@@ -249,10 +251,11 @@ void VectorGraphicData::ensureSequenceAndRange()
             uno::Sequence<beans::PropertyValue> aDecompositionParameters = 
comphelper::InitPropertySequence({
                 {"PageIndex", uno::makeAny<sal_Int32>(mnPageIndex)},
             });
-            // TODO: change xPdfDecomposer to use BinaryDataContainer directly
-            css::uno::Sequence<sal_Int8> 
aDataSequence(maDataContainer.getSize());
-            std::copy(maDataContainer.cbegin(), maDataContainer.cend(), 
aDataSequence.begin());
-            auto xPrimitive2D = 
xPdfDecomposer->getDecomposition(aDataSequence, aDecompositionParameters);
+
+            auto* pUnoBinaryDataContainer = new 
UnoBinaryDataContainer(getBinaryDataContainer());
+            uno::Reference<util::XBinaryDataContainer> xDataContainer = 
pUnoBinaryDataContainer;
+
+            auto xPrimitive2D = 
xPdfDecomposer->getDecomposition(xDataContainer, aDecompositionParameters);
             maSequence = 
comphelper::sequenceToContainer<std::deque<uno::Reference<graphic::XPrimitive2D>>>(xPrimitive2D);
 
             break;
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to