diff options
author | Michal Klocek <michal.klocek@qt.io> | 2021-07-09 19:24:15 +0200 |
---|---|---|
committer | Michal Klocek <michal.klocek@qt.io> | 2021-08-17 17:38:55 +0200 |
commit | 79d04aa9e3e9aa84d7378260519f9e9a6759dc41 (patch) | |
tree | 3f4b1ae9f514ffc2a3d730cb8d7db9fb72ee1e7d /src/plugins | |
parent | 58b787cbad581914367aea4604993cce30a65d06 (diff) |
Add QtPdf to cmake build
Port QtPdf to Qt6:
* QtPdf,QtPdfWidgets,QtPdfQuick libs
* QtPdfQuickPlugin, QtPdfPlugin (imageformat) plugins
* widget and quick examples
* qtpdf tests
To fit gn cmake integration and new repo layout code is a bit
reshuffled.
Compared to qmke build following features are not ported yet:
* ios fat libs
* qtbase 3rdparty static dependencies
WebEngine build can be skipped with setting
QT_FEATURE_qtwebengine_build=OFF
Note this patch needs follow up for 6.2 branch to disable qtpdf
builds by default, since this should not part of qt 6.2 release.
Pick-to: 6.2
Task-number: QTBUG-95353
Change-Id: I4dd9f3934bdd478fb6d2fa686074a24d91f09953
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/imageformats/pdf/main.cpp | 74 | ||||
-rw-r--r-- | src/plugins/imageformats/pdf/pdf.json | 4 | ||||
-rw-r--r-- | src/plugins/imageformats/pdf/qpdfiohandler.cpp | 239 | ||||
-rw-r--r-- | src/plugins/imageformats/pdf/qpdfiohandler_p.h | 88 |
4 files changed, 0 insertions, 405 deletions
diff --git a/src/plugins/imageformats/pdf/main.cpp b/src/plugins/imageformats/pdf/main.cpp deleted file mode 100644 index b4d59353c..000000000 --- a/src/plugins/imageformats/pdf/main.cpp +++ /dev/null @@ -1,74 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2019 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the QtPDF module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qpdfiohandler_p.h" - -QT_BEGIN_NAMESPACE - -class QPdfPlugin : public QImageIOPlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID QImageIOHandlerFactoryInterface_iid FILE "pdf.json") - -public: - Capabilities capabilities(QIODevice *device, const QByteArray &format) const override; - QImageIOHandler *create(QIODevice *device, const QByteArray &format = QByteArray()) const override; -}; - -QImageIOPlugin::Capabilities QPdfPlugin::capabilities(QIODevice *device, const QByteArray &format) const -{ - if (format == "pdf") - return Capabilities(CanRead); - if (!format.isEmpty()) - return {}; - - Capabilities cap; - if (device->isReadable() && QPdfIOHandler::canRead(device)) - cap |= CanRead; - return cap; -} - -QImageIOHandler *QPdfPlugin::create(QIODevice *device, const QByteArray &format) const -{ - QPdfIOHandler *hand = new QPdfIOHandler(); - hand->setDevice(device); - hand->setFormat(format); - return hand; -} - -QT_END_NAMESPACE - -#include "main.moc" diff --git a/src/plugins/imageformats/pdf/pdf.json b/src/plugins/imageformats/pdf/pdf.json deleted file mode 100644 index 1f5268ca1..000000000 --- a/src/plugins/imageformats/pdf/pdf.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "Keys": [ "pdf" ], - "MimeTypes": [ "application/pdf" ] -} diff --git a/src/plugins/imageformats/pdf/qpdfiohandler.cpp b/src/plugins/imageformats/pdf/qpdfiohandler.cpp deleted file mode 100644 index 4f610935c..000000000 --- a/src/plugins/imageformats/pdf/qpdfiohandler.cpp +++ /dev/null @@ -1,239 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2019 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the QtPDF module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qpdfiohandler_p.h" -#include <QLoggingCategory> -#include <QPainter> - -QT_BEGIN_NAMESPACE - -Q_LOGGING_CATEGORY(qLcPdf, "qt.imageformat.pdf") - -QPdfIOHandler::QPdfIOHandler() -{ -} - -bool QPdfIOHandler::canRead() const -{ - if (!device()) - return false; - if (m_loaded) - return true; - if (QPdfIOHandler::canRead(device())) { - setFormat("pdf"); - return true; - } - return false; -} - -bool QPdfIOHandler::canRead(QIODevice *device) -{ - char buf[6]; - device->peek(buf, 6); - return (!qstrncmp(buf, "%PDF-", 5) || Q_UNLIKELY(!qstrncmp(buf, "\012%PDF-", 6))); -} - -int QPdfIOHandler::currentImageNumber() const -{ - return m_page; -} - -QRect QPdfIOHandler::currentImageRect() const -{ - return QRect(QPoint(0, 0), m_doc.pageSize(m_page).toSize()); -} - -int QPdfIOHandler::imageCount() const -{ - int ret = 0; - if (const_cast<QPdfIOHandler *>(this)->load(device())) - ret = m_doc.pageCount(); - qCDebug(qLcPdf) << "imageCount" << ret; - return ret; -} - -bool QPdfIOHandler::read(QImage *image) -{ - if (load(device())) { - if (m_page >= m_doc.pageCount()) - return false; - if (m_page < 0) - m_page = 0; - const bool xform = (m_clipRect.isValid() || m_scaledSize.isValid() || m_scaledClipRect.isValid()); - QSize pageSize = m_doc.pageSize(m_page).toSize(); - QSize finalSize = pageSize; - QRectF bounds; - if (xform && !finalSize.isEmpty()) { - bounds = QRectF(QPointF(0,0), QSizeF(finalSize)); - QPoint tr1, tr2; - QSizeF sc(1, 1); - if (m_clipRect.isValid()) { - tr1 = -m_clipRect.topLeft(); - finalSize = m_clipRect.size(); - } - if (m_scaledSize.isValid()) { - sc = QSizeF(qreal(m_scaledSize.width()) / finalSize.width(), - qreal(m_scaledSize.height()) / finalSize.height()); - finalSize = m_scaledSize; - pageSize = m_scaledSize; - } - if (m_scaledClipRect.isValid()) { - tr2 = -m_scaledClipRect.topLeft(); - finalSize = m_scaledClipRect.size(); - } - QTransform t; - t.translate(tr2.x(), tr2.y()); - t.scale(sc.width(), sc.height()); - t.translate(tr1.x(), tr1.y()); - bounds = t.mapRect(bounds); - } - qCDebug(qLcPdf) << Q_FUNC_INFO << m_page << finalSize; - if (image->size() != finalSize || !image->reinterpretAsFormat(QImage::Format_ARGB32_Premultiplied)) { - *image = QImage(finalSize, QImage::Format_ARGB32_Premultiplied); - if (!finalSize.isEmpty() && image->isNull()) { - // avoid QTBUG-68229 - qWarning("QPdfIOHandler: QImage allocation failed (size %i x %i)", finalSize.width(), finalSize.height()); - return false; - } - } - if (!finalSize.isEmpty()) { - QPdfDocumentRenderOptions options; - if (m_scaledClipRect.isValid()) - options.setScaledClipRect(m_scaledClipRect); - options.setScaledSize(pageSize); - image->fill(m_backColor.rgba()); - QPainter p(image); - QImage pageImage = m_doc.render(m_page, finalSize, options); - p.drawImage(0, 0, pageImage); - p.end(); - } - return true; - } - - return false; -} - -QVariant QPdfIOHandler::option(ImageOption option) const -{ - switch (option) { - case ImageFormat: - return QImage::Format_ARGB32_Premultiplied; - case Size: - const_cast<QPdfIOHandler *>(this)->load(device()); - return m_doc.pageSize(qMax(0, m_page)); - case ClipRect: - return m_clipRect; - case ScaledSize: - return m_scaledSize; - case ScaledClipRect: - return m_scaledClipRect; - case BackgroundColor: - return m_backColor; - case Name: - return m_doc.metaData(QPdfDocument::Title); - default: - break; - } - return QVariant(); -} - -void QPdfIOHandler::setOption(ImageOption option, const QVariant & value) -{ - switch (option) { - case ClipRect: - m_clipRect = value.toRect(); - break; - case ScaledSize: - m_scaledSize = value.toSize(); - break; - case ScaledClipRect: - m_scaledClipRect = value.toRect(); - break; - case BackgroundColor: - m_backColor = value.value<QColor>(); - break; - default: - break; - } -} - -bool QPdfIOHandler::supportsOption(ImageOption option) const -{ - switch (option) - { - case ImageFormat: - case Size: - case ClipRect: - case ScaledSize: - case ScaledClipRect: - case BackgroundColor: - case Name: - return true; - default: - break; - } - return false; -} - -bool QPdfIOHandler::jumpToImage(int frame) -{ - qCDebug(qLcPdf) << Q_FUNC_INFO << frame; - if (frame < 0 || frame >= imageCount()) - return false; - m_page = frame; - return true; -} - -bool QPdfIOHandler::jumpToNextImage() -{ - return jumpToImage(m_page + 1); -} - -bool QPdfIOHandler::load(QIODevice *device) -{ - if (m_loaded) - return true; - if (format().isEmpty()) - if (!canRead()) - return false; - - m_doc.load(device); - m_loaded = (m_doc.error() == QPdfDocument::DocumentError::NoError); - - return m_loaded; -} - -QT_END_NAMESPACE diff --git a/src/plugins/imageformats/pdf/qpdfiohandler_p.h b/src/plugins/imageformats/pdf/qpdfiohandler_p.h deleted file mode 100644 index 99a91154c..000000000 --- a/src/plugins/imageformats/pdf/qpdfiohandler_p.h +++ /dev/null @@ -1,88 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2019 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the QtPDF module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QPDFIOHANDLER_H -#define QPDFIOHANDLER_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include <QtGui/qimageiohandler.h> -#include <QtPdf/QPdfDocument> - -QT_BEGIN_NAMESPACE - -class QPdfIOHandler : public QImageIOHandler -{ -public: - QPdfIOHandler(); - bool canRead() const override; - static bool canRead(QIODevice *device); - int currentImageNumber() const override; - QRect currentImageRect() const override; - int imageCount() const override; - bool read(QImage *image) override; - QVariant option(ImageOption option) const override; - void setOption(ImageOption option, const QVariant & value) override; - bool supportsOption(ImageOption option) const override; - bool jumpToImage(int frame) override; - bool jumpToNextImage() override; - -private: - bool load(QIODevice *device); - -private: - QPdfDocument m_doc; - int m_page = -1; - - QRect m_clipRect; - QSize m_scaledSize; - QRect m_scaledClipRect; - QColor m_backColor = Qt::transparent; - bool m_loaded = false; -}; - -QT_END_NAMESPACE - -#endif // QPDFIOHANDLER_H |