Author: jghali
Date: Fri Mar 30 16:13:24 2018
New Revision: 22459

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=22459
Log:
avoid unnecessary conversions between QImage and QPixmap when creating 
thumbnails for PDF

Modified:
    trunk/Scribus/scribus/pdflib.cpp
    trunk/Scribus/scribus/pdflib.h
    trunk/Scribus/scribus/pdflib_core.cpp
    trunk/Scribus/scribus/pdflib_core.h
    trunk/Scribus/scribus/plugins/scriptplugin/objpdffile.cpp
    trunk/Scribus/scribus/scribus.cpp
    trunk/Scribus/scribus/scribus.h

Modified: trunk/Scribus/scribus/pdflib.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22459&path=/trunk/Scribus/scribus/pdflib.cpp
==============================================================================
--- trunk/Scribus/scribus/pdflib.cpp    (original)
+++ trunk/Scribus/scribus/pdflib.cpp    Fri Mar 30 16:13:24 2018
@@ -14,7 +14,7 @@
 }
 
 bool PDFlib::doExport(const QString& fn, const QString& nam, int Components,
-                         const std::vector<int> & pageNs, const 
QMap<int,QPixmap> & thumbs)
+                         const std::vector<int> & pageNs, const QMap<int, 
QImage>& thumbs)
 {
        return static_cast<PDFLibCore*>(m_impl)->doExport(fn, nam, Components, 
pageNs, thumbs);
 }

Modified: trunk/Scribus/scribus/pdflib.h
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22459&path=/trunk/Scribus/scribus/pdflib.h
==============================================================================
--- trunk/Scribus/scribus/pdflib.h      (original)
+++ trunk/Scribus/scribus/pdflib.h      Fri Mar 30 16:13:24 2018
@@ -11,9 +11,9 @@
 #include "scconfig.h"
 #include "scribusapi.h"
 
+#include <QImage>
 #include <QObject>
 #include <QMap>
-#include <QPixmap>
 #include <vector>
 
 class ScribusDoc;
@@ -52,7 +52,7 @@
         * \param thumbs A mapping of input (document) page numbers to 
pre-rendered thumbnails.
         */
        bool doExport(const QString& fn, const QString& nam, int Components,
-                                 const std::vector<int> & pageNs, const 
QMap<int,QPixmap> & thumbs);
+                                 const std::vector<int> & pageNs, const 
QMap<int, QImage>& thumbs);
 
        /**
         * Return an error message in case export has failed.

Modified: trunk/Scribus/scribus/pdflib_core.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22459&path=/trunk/Scribus/scribus/pdflib_core.cpp
==============================================================================
--- trunk/Scribus/scribus/pdflib_core.cpp       (original)
+++ trunk/Scribus/scribus/pdflib_core.cpp       Fri Mar 30 16:13:24 2018
@@ -47,7 +47,6 @@
 #include <QImage>
 #include <QList>
 #include <QPainterPath>
-#include <QPixmap>
 #include <QRect>
 #include <QRegExp>
 #include <QScopedPointer>
@@ -594,9 +593,9 @@
 }
 
 bool PDFLibCore::doExport(const QString& fn, const QString& nam, int 
Components,
-                                         const std::vector<int> & pageNs, 
const QMap<int,QPixmap> & thumbs)
-{
-       QPixmap pm;
+                                         const std::vector<int> & pageNs, 
const QMap<int, QImage> & thumbs)
+{
+       QImage thumb;
        bool ret = false, error = false;
        int  pc_exportpages=0;
        int  pc_exportmasterpages=0;
@@ -650,11 +649,11 @@
                for (uint a = 0; a < pageNs.size() && !abortExport; ++a)
                {
                        if (doc.pdfOptions().Thumbnails)
-                               pm = thumbs[pageNs[a]];
+                               thumb = thumbs[pageNs[a]];
                        qApp->processEvents();
                        if (abortExport) break;
 
-                       PDF_Begin_Page(doc.DocPages.at(pageNs[a]-1), pm);
+                       PDF_Begin_Page(doc.DocPages.at(pageNs[a]-1), thumb);
                        qApp->processEvents();
                        if (abortExport) break;
 
@@ -3326,7 +3325,7 @@
 
 
 
-void PDFLibCore::PDF_Begin_Page(const ScPage* pag, QPixmap pm)
+void PDFLibCore::PDF_Begin_Page(const ScPage* pag, const QImage& thumb)
 {
        ActPageP = pag;
        Content = "";
@@ -3334,7 +3333,7 @@
        pageData.radioButtonList.clear();
        if (Options.Thumbnails)
        {
-               ScImage img(pm.toImage());
+               ScImage img(thumb);
                bool compDataAvail = false;
                QByteArray array = img.ImageToArray();
                if (Options.Compress)

Modified: trunk/Scribus/scribus/pdflib_core.h
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22459&path=/trunk/Scribus/scribus/pdflib_core.h
==============================================================================
--- trunk/Scribus/scribus/pdflib_core.h (original)
+++ trunk/Scribus/scribus/pdflib_core.h Fri Mar 30 16:13:24 2018
@@ -67,7 +67,7 @@
        explicit PDFLibCore(ScribusDoc & docu);
        ~PDFLibCore();
        bool doExport(const QString& fn, const QString& nam, int Components,
-                                 const std::vector<int> & pageNs, const 
QMap<int,QPixmap> & thumbs);
+                                 const std::vector<int> & pageNs, const 
QMap<int, QImage> & thumbs);
 
        const QString& errorMessage(void) const;
        bool  exportAborted(void) const;
@@ -117,7 +117,7 @@
        void PDF_Begin_Colors();
        void PDF_Begin_Layers();
        
-       void PDF_Begin_Page(const ScPage* pag, QPixmap pm);
+       void PDF_Begin_Page(const ScPage* pag, const QImage& thumb);
        void PDF_End_Page();
        bool PDF_TemplatePage(const ScPage* pag, bool clip = false);
        bool PDF_ProcessPage(const ScPage* pag, uint PNr, bool clip = false);

Modified: trunk/Scribus/scribus/plugins/scriptplugin/objpdffile.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22459&path=/trunk/Scribus/scribus/plugins/scriptplugin/objpdffile.cpp
==============================================================================
--- trunk/Scribus/scribus/plugins/scriptplugin/objpdffile.cpp   (original)
+++ trunk/Scribus/scribus/plugins/scriptplugin/objpdffile.cpp   Fri Mar 30 
16:13:24 2018
@@ -15,8 +15,8 @@
 #include "ui/bookmarkpalette.h"
 
 #include <QFileInfo>
+#include <QImage>
 #include <QList>
-#include <QPixmap>
 #include <vector>
 
 // these functions are located at utils.cpp
@@ -1480,13 +1480,13 @@
                        pdfOptions.UseProfiles2 = false;
                }
        }
-       QMap<int,QPixmap> thumbs;
+       QMap<int, QImage> thumbs;
        for (uint ap = 0; ap < pageNs.size(); ++ap)
        {
-               QPixmap pm(10,10);
+               QImage thumb(10, 10, QImage::Format_ARGB32_Premultiplied );
                if (pdfOptions.Thumbnails)
-                       pm = 
QPixmap::fromImage(ScCore->primaryMainWindow()->view->PageToPixmap(pageNs[ap]-1,
 100));
-               thumbs.insert(pageNs[ap], pm);
+                       thumb = 
ScCore->primaryMainWindow()->view->PageToPixmap(pageNs[ap]-1, 100);
+               thumbs.insert(pageNs[ap], thumb);
        }
        ReOrderText(ScCore->primaryMainWindow()->doc, 
ScCore->primaryMainWindow()->view);
 

Modified: trunk/Scribus/scribus/scribus.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22459&path=/trunk/Scribus/scribus/scribus.cpp
==============================================================================
--- trunk/Scribus/scribus/scribus.cpp   (original)
+++ trunk/Scribus/scribus/scribus.cpp   Fri Mar 30 16:13:24 2018
@@ -7135,7 +7135,7 @@
 }
 
 bool ScribusMainWindow::getPDFDriver(const QString &filename, const QString 
&name, int components, const std::vector<int> & pageNumbers,
-                                                                        const 
QMap<int,QPixmap> & thumbs, QString& error, bool* cancelled)
+                                                                        const 
QMap<int, QImage>& thumbs, QString& error, bool* cancelled)
 {
        ScCore->fileWatcher->forceScan();
        ScCore->fileWatcher->stop();
@@ -7225,7 +7225,7 @@
        QString pageString(dia.getPagesString());
        std::vector<int> pageNs;
        uint pageNumbersSize;
-       QMap<int,QPixmap> allThumbs, thumbs;
+       QMap<int, QImage> allThumbs, thumbs;
        int components = dia.colorSpaceComponents();
        QString nam(dia.cmsDescriptor());
        QString fileName = doc->pdfOptions().fileName;
@@ -7249,14 +7249,14 @@
        pageNumbersSize = pageNs.size();
        for (uint i = 0; i < pageNumbersSize; ++i)
        {
-               QPixmap pm(10, 10);
+               QImage thumb(10, 10, QImage::Format_ARGB32_Premultiplied);
                if (doc->pdfOptions().Thumbnails)
                {
                        // No need to load full res images for drawing small 
thumbnail
                        PageToPixmapFlags flags = Pixmap_DontReloadImages;
-                       pm = QPixmap::fromImage(view->PageToPixmap(pageNs[i] - 
1, 100, flags));
-               }
-               allThumbs.insert(pageNs[i], pm);
+                       thumb = view->PageToPixmap(pageNs[i] - 1, 100, flags);
+               }
+               allThumbs.insert(pageNs[i], thumb);
        }
        if (cmsCorr)
        {
@@ -7279,10 +7279,10 @@
                        pageNs2.clear();
                        pageNs2.push_back(pageNs[aa]);
                        pageNumbersSize = pageNs2.size();
-                       QPixmap pm(10,10);
+                       QImage thumb(10, 10, 
QImage::Format_ARGB32_Premultiplied);
                        if (doc->pdfOptions().Thumbnails)
-                               pm = allThumbs[pageNs[aa]];
-                       thumbs.insert(1, pm);
+                               thumb = allThumbs[pageNs[aa]];
+                       thumbs.insert(1, thumb);
                        QString realName = 
QDir::toNativeSeparators(path+"/"+name+ tr("-Page%1").arg(pageNs[aa], 3, 10, 
QChar('0'))+"."+ext);
                        if (!getPDFDriver(realName, nam, components, pageNs2, 
thumbs, errorMsg, &cancelled))
                        {

Modified: trunk/Scribus/scribus/scribus.h
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22459&path=/trunk/Scribus/scribus/scribus.h
==============================================================================
--- trunk/Scribus/scribus/scribus.h     (original)
+++ trunk/Scribus/scribus/scribus.h     Fri Mar 30 16:13:24 2018
@@ -33,11 +33,11 @@
 
 #include <QActionGroup>
 #include <QClipboard>
+#include <QImage>
 #include <QKeyEvent>
 #include <QMainWindow>
 #include <QMap>
 #include <QMultiHash>
-#include <QPixmap>
 #include <QPointer>
 #include <QPushButton>
 #include <QProcess>
@@ -159,7 +159,7 @@
        void applyNewMaster(QString name);
        void updateRecent(QString fn);
        void doPasteRecent(QString data);
-       bool getPDFDriver(const QString & filename, const QString & name, int 
components, const std::vector<int> & pageNumbers, const QMap<int,QPixmap> & 
thumbs, QString& error, bool* cancelled = NULL);
+       bool getPDFDriver(const QString & filename, const QString & name, int 
components, const std::vector<int> & pageNumbers, const QMap<int, QImage> & 
thumbs, QString& error, bool* cancelled = NULL);
        bool DoSaveAsEps(QString fn, QString& error);
        QString CFileDialog(QString workingDirectory = ".", QString 
dialogCaption = "", QString fileFilter = "", QString defNa = "",
                                                int optionFlags = 
fdExistingFiles, bool *useCompression = 0, bool *useFonts = 0, bool 
*useProfiles = 0);


_______________________________________________
scribus-commit mailing list
[email protected]
http://lists.scribus.net/mailman/listinfo/scribus-commit

Reply via email to