From 649a3238f91921e3f38f8e91e49f97a02655c94d Mon Sep 17 00:00:00 2001 From: Michal Klocek Date: Fri, 9 Jul 2021 19:24:15 +0200 Subject: 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. Task-number: QTBUG-95353 Change-Id: I4dd9f3934bdd478fb6d2fa686074a24d91f09953 Reviewed-by: Allan Sandfeld Jensen (cherry picked from commit 79d04aa9e3e9aa84d7378260519f9e9a6759dc41) Reviewed-by: Qt Cherry-pick Bot --- examples/CMakeLists.txt | 8 ++-- examples/pdf/CMakeLists.txt | 5 +++ examples/pdf/multipage/CMakeLists.txt | 62 +++++++++++++++++++++++++++ examples/pdf/multipage/viewer.qml | 46 ++++++++++---------- examples/pdf/pdfviewer/CMakeLists.txt | 62 +++++++++++++++++++++++++++ examples/pdf/pdfviewer/viewer.qml | 48 ++++++++++----------- examples/pdfwidgets/CMakeLists.txt | 1 + examples/pdfwidgets/pdfviewer/CMakeLists.txt | 63 ++++++++++++++++++++++++++++ 8 files changed, 245 insertions(+), 50 deletions(-) create mode 100644 examples/pdf/CMakeLists.txt create mode 100644 examples/pdf/multipage/CMakeLists.txt create mode 100644 examples/pdf/pdfviewer/CMakeLists.txt create mode 100644 examples/pdfwidgets/CMakeLists.txt create mode 100644 examples/pdfwidgets/pdfviewer/CMakeLists.txt (limited to 'examples') diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 5c6e1592d..2bd079b43 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -13,7 +13,9 @@ project(QtWebEngineExamples set(QT_USE_FIXED_QT_ADD_RESOURCE_BASE TRUE) find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS BuildInternals Core) -find_package(Qt6 ${PROJECT_VERSION} CONFIG OPTIONAL_COMPONENTS WebEngineCore WebEngineWidgets WebEngineQuick QuickControls2) +find_package(Qt6 ${PROJECT_VERSION} CONFIG OPTIONAL_COMPONENTS + WebEngineCore WebEngineWidgets WebEngineQuick PdfWidgets QuickControls2 Svg +) qt_build_repo_begin() qt_examples_build_begin() @@ -23,10 +25,10 @@ endif() if(QT_FEATURE_qtwebengine_build AND QT_FEATURE_qtwebengine_widgets_build) add_subdirectory(webenginewidgets) endif() -if(QT_FEATURE_qtpdf_build ) +if(QT_FEATURE_qtpdf_build AND QT_FEATURE_qtpdf_quick_build) add_subdirectory(pdf) endif() -if(QT_FEATURE_qtpdf_build AND QT_FEATURE_pdf_widgets) +if(QT_FEATURE_qtpdf_build AND QT_FEATURE_qtpdf_widgets_build) add_subdirectory(pdfwidgets) endif() diff --git a/examples/pdf/CMakeLists.txt b/examples/pdf/CMakeLists.txt new file mode 100644 index 000000000..cca6c03db --- /dev/null +++ b/examples/pdf/CMakeLists.txt @@ -0,0 +1,5 @@ +add_subdirectory(pdfviewer) +add_subdirectory(multipage) +if(NOT TARGET Qt::Svg) + message(WARNING "QtSvg is required as runtime dependency for qtpdfquick examples.") +endif() diff --git a/examples/pdf/multipage/CMakeLists.txt b/examples/pdf/multipage/CMakeLists.txt new file mode 100644 index 000000000..141da88b6 --- /dev/null +++ b/examples/pdf/multipage/CMakeLists.txt @@ -0,0 +1,62 @@ +cmake_minimum_required(VERSION 3.16) +project(multipage LANGUAGES CXX) + +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) +set(CMAKE_AUTOUIC ON) + +if(NOT DEFINED INSTALL_EXAMPLESDIR) + set(INSTALL_EXAMPLESDIR "examples") +endif() + +set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/pdf/multipage") + +find_package(Qt6 COMPONENTS Gui) +find_package(Qt6 COMPONENTS Qml) + +qt_add_executable(multipage + main.cpp +) +set_target_properties(multipage PROPERTIES + WIN32_EXECUTABLE TRUE + MACOSX_BUNDLE TRUE +) +target_link_libraries(multipage PUBLIC + Qt::Gui + Qt::Qml +) + +set(viewer_resource_files + "resources/document-open.svg" + "resources/edit-clear.svg" + "resources/edit-copy.svg" + "resources/edit-select-all.svg" + "resources/go-down-search.svg" + "resources/go-next-view-page.svg" + "resources/go-previous-view-page.svg" + "resources/go-up-search.svg" + "resources/rotate-left.svg" + "resources/rotate-right.svg" + "resources/test.pdf" + "resources/zoom-fit-best.svg" + "resources/zoom-fit-width.svg" + "resources/zoom-in.svg" + "resources/zoom-original.svg" + "resources/zoom-out.svg" + "viewer.qml" +) + +qt6_add_resources(multipage "viewer" + PREFIX + "/pdfviewer" + FILES + ${viewer_resource_files} +) + +install(TARGETS multipage + RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}" + BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" + LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" +) diff --git a/examples/pdf/multipage/viewer.qml b/examples/pdf/multipage/viewer.qml index f66c8d381..ed84d5547 100644 --- a/examples/pdf/multipage/viewer.qml +++ b/examples/pdf/multipage/viewer.qml @@ -47,14 +47,14 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ -import QtQml 2.14 // workaround for QTBUG-82873 -import QtQuick 2.14 -import QtQuick.Controls 2.14 -import QtQuick.Layouts 1.14 -import QtQuick.Pdf 5.15 -import QtQuick.Shapes 1.14 -import QtQuick.Window 2.14 -import Qt.labs.platform 1.1 as Platform +import QtQml // workaround for QTBUG-82873 +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts +import QtQuick.Pdf +import QtQuick.Shapes +import QtQuick.Window +import Qt.labs.platform as Platform ApplicationWindow { id: root @@ -72,7 +72,7 @@ ApplicationWindow { ToolButton { action: Action { shortcut: StandardKey.Open - icon.source: "resources/document-open.svg" + icon.source: "qrc:/pdfviewer/resources/document-open.svg" onTriggered: fileDialog.open() } } @@ -80,7 +80,7 @@ ApplicationWindow { action: Action { shortcut: StandardKey.ZoomIn enabled: view.renderScale < 10 - icon.source: "resources/zoom-in.svg" + icon.source: "qrc:/pdfviewer/resources/zoom-in.svg" onTriggered: view.renderScale *= Math.sqrt(2) } } @@ -88,46 +88,46 @@ ApplicationWindow { action: Action { shortcut: StandardKey.ZoomOut enabled: view.renderScale > 0.1 - icon.source: "resources/zoom-out.svg" + icon.source: "qrc:/pdfviewer/resources/zoom-out.svg" onTriggered: view.renderScale /= Math.sqrt(2) } } ToolButton { action: Action { - icon.source: "resources/zoom-fit-width.svg" + icon.source: "qrc:/pdfviewer/resources/zoom-fit-width.svg" onTriggered: view.scaleToWidth(root.contentItem.width, root.contentItem.height) } } ToolButton { action: Action { - icon.source: "resources/zoom-fit-best.svg" + icon.source: "qrc:/pdfviewer/resources/zoom-fit-best.svg" onTriggered: view.scaleToPage(root.contentItem.width, root.contentItem.height) } } ToolButton { action: Action { shortcut: "Ctrl+0" - icon.source: "resources/zoom-original.svg" + icon.source: "qrc:/pdfviewer/resources/zoom-original.svg" onTriggered: view.resetScale() } } ToolButton { action: Action { shortcut: "Ctrl+L" - icon.source: "resources/rotate-left.svg" + icon.source: "qrc:/pdfviewer/resources/rotate-left.svg" onTriggered: view.pageRotation -= 90 } } ToolButton { action: Action { shortcut: "Ctrl+R" - icon.source: "resources/rotate-right.svg" + icon.source: "qrc:/pdfviewer/resources/rotate-right.svg" onTriggered: view.pageRotation += 90 } } ToolButton { action: Action { - icon.source: "resources/go-previous-view-page.svg" + icon.source: "qrc:/pdfviewer/resources/go-previous-view-page.svg" enabled: view.backEnbled onTriggered: view.back() } @@ -152,7 +152,7 @@ ApplicationWindow { } ToolButton { action: Action { - icon.source: "resources/go-next-view-page.svg" + icon.source: "qrc:/pdfviewer/resources/go-next-view-page.svg" enabled: view.forwardEnabled onTriggered: view.forward() } @@ -163,14 +163,14 @@ ApplicationWindow { ToolButton { action: Action { shortcut: StandardKey.SelectAll - icon.source: "resources/edit-select-all.svg" + icon.source: "qrc:/pdfviewer/resources/edit-select-all.svg" onTriggered: view.selectAll() } } ToolButton { action: Action { shortcut: StandardKey.Copy - icon.source: "resources/edit-copy.svg" + icon.source: "qrc:/pdfviewer/resources/edit-copy.svg" enabled: view.selectedText !== "" onTriggered: view.copySelectionToClipboard() } @@ -308,7 +308,7 @@ ApplicationWindow { anchors.fill: parent ToolButton { action: Action { - icon.source: "resources/go-up-search.svg" + icon.source: "qrc:/pdfviewer/resources/go-up-search.svg" shortcut: StandardKey.FindPrevious onTriggered: view.searchBack() } @@ -324,7 +324,7 @@ ApplicationWindow { onAccepted: searchDrawer.open() Image { visible: searchField.text !== "" - source: "resources/edit-clear.svg" + source: "qrc:/pdfviewer/resources/edit-clear.svg" anchors { right: parent.right top: parent.top @@ -339,7 +339,7 @@ ApplicationWindow { } ToolButton { action: Action { - icon.source: "resources/go-down-search.svg" + icon.source: "qrc:/pdfviewer/resources/go-down-search.svg" shortcut: StandardKey.FindNext onTriggered: view.searchForward() } diff --git a/examples/pdf/pdfviewer/CMakeLists.txt b/examples/pdf/pdfviewer/CMakeLists.txt new file mode 100644 index 000000000..8265861d0 --- /dev/null +++ b/examples/pdf/pdfviewer/CMakeLists.txt @@ -0,0 +1,62 @@ +cmake_minimum_required(VERSION 3.16) +project(pdfviewer LANGUAGES CXX) + +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) +set(CMAKE_AUTOUIC ON) + +if(NOT DEFINED INSTALL_EXAMPLESDIR) + set(INSTALL_EXAMPLESDIR "examples") +endif() + +set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/pdf/pdfviewer") + +find_package(Qt6 COMPONENTS Gui) +find_package(Qt6 COMPONENTS Qml) + +qt_add_executable(pdfviewerquick + main.cpp +) +set_target_properties(pdfviewerquick PROPERTIES + WIN32_EXECUTABLE TRUE + MACOSX_BUNDLE TRUE +) +target_link_libraries(pdfviewerquick PUBLIC + Qt::Gui + Qt::Qml +) + +set(viewer_resource_files + "resources/document-open.svg" + "resources/edit-clear.svg" + "resources/edit-copy.svg" + "resources/edit-select-all.svg" + "resources/go-down-search.svg" + "resources/go-next-view-page.svg" + "resources/go-previous-view-page.svg" + "resources/go-up-search.svg" + "resources/rotate-left.svg" + "resources/rotate-right.svg" + "resources/test.pdf" + "resources/zoom-fit-best.svg" + "resources/zoom-fit-width.svg" + "resources/zoom-in.svg" + "resources/zoom-original.svg" + "resources/zoom-out.svg" + "viewer.qml" +) + +qt6_add_resources(pdfviewerquick "viewer" + PREFIX + "/pdfviewer" + FILES + ${viewer_resource_files} +) + +install(TARGETS pdfviewerquick + RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}" + BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" + LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" +) diff --git a/examples/pdf/pdfviewer/viewer.qml b/examples/pdf/pdfviewer/viewer.qml index 38d62740a..8c85a09da 100644 --- a/examples/pdf/pdfviewer/viewer.qml +++ b/examples/pdf/pdfviewer/viewer.qml @@ -47,15 +47,15 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ -import QtQml 2.14 // workaround for QTBUG-82873 -import QtQuick 2.14 -import QtQuick.Controls 2.14 -import QtQuick.Layouts 1.14 -import QtQuick.Pdf 5.15 -import QtQuick.Shapes 1.14 -import QtQuick.Window 2.14 -import Qt.labs.animation 1.0 -import Qt.labs.platform 1.1 as Platform +import QtQml // workaround for QTBUG-82873 +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts +import QtQuick.Pdf +import QtQuick.Shapes +import QtQuick.Window +import Qt.labs.animation +import Qt.labs.platform as Platform ApplicationWindow { id: root @@ -74,7 +74,7 @@ ApplicationWindow { ToolButton { action: Action { shortcut: StandardKey.Open - icon.source: "resources/document-open.svg" + icon.source: "qrc:/pdfviewer/resources/document-open.svg" onTriggered: fileDialog.open() } } @@ -82,7 +82,7 @@ ApplicationWindow { action: Action { shortcut: StandardKey.ZoomIn enabled: view.sourceSize.width < 10000 - icon.source: "resources/zoom-in.svg" + icon.source: "qrc:/pdfviewer/resources/zoom-in.svg" onTriggered: view.renderScale *= root.scaleStep } } @@ -90,46 +90,46 @@ ApplicationWindow { action: Action { shortcut: StandardKey.ZoomOut enabled: view.sourceSize.width > 50 - icon.source: "resources/zoom-out.svg" + icon.source: "qrc:/pdfviewer/resources/zoom-out.svg" onTriggered: view.renderScale /= root.scaleStep } } ToolButton { action: Action { - icon.source: "resources/zoom-fit-width.svg" + icon.source: "qrc:/pdfviewer/resources/zoom-fit-width.svg" onTriggered: view.scaleToWidth(root.contentItem.width, root.contentItem.height) } } ToolButton { action: Action { - icon.source: "resources/zoom-fit-best.svg" + icon.source: "qrc:/pdfviewer/resources/zoom-fit-best.svg" onTriggered: view.scaleToPage(root.contentItem.width, root.contentItem.height) } } ToolButton { action: Action { shortcut: "Ctrl+0" - icon.source: "resources/zoom-original.svg" + icon.source: "qrc:/pdfviewer/resources/zoom-original.svg" onTriggered: view.resetScale() } } ToolButton { action: Action { shortcut: "Ctrl+L" - icon.source: "resources/rotate-left.svg" + icon.source: "qrc:/pdfviewer/resources/rotate-left.svg" onTriggered: view.pageRotation -= 90 } } ToolButton { action: Action { shortcut: "Ctrl+R" - icon.source: "resources/rotate-right.svg" + icon.source: "qrc:/pdfviewer/resources/rotate-right.svg" onTriggered: view.pageRotation += 90 } } ToolButton { action: Action { - icon.source: "resources/go-previous-view-page.svg" + icon.source: "qrc:/pdfviewer/resources/go-previous-view-page.svg" enabled: view.backEnabled onTriggered: view.back() } @@ -155,7 +155,7 @@ ApplicationWindow { } ToolButton { action: Action { - icon.source: "resources/go-next-view-page.svg" + icon.source: "qrc:/pdfviewer/resources/go-next-view-page.svg" enabled: view.forwardEnabled onTriggered: view.forward() } @@ -166,14 +166,14 @@ ApplicationWindow { ToolButton { action: Action { shortcut: StandardKey.SelectAll - icon.source: "resources/edit-select-all.svg" + icon.source: "qrc:/pdfviewer/resources/edit-select-all.svg" onTriggered: view.selectAll() } } ToolButton { action: Action { shortcut: StandardKey.Copy - icon.source: "resources/edit-copy.svg" + icon.source: "qrc:/pdfviewer/resources/edit-copy.svg" enabled: view.selectedText !== "" onTriggered: view.copySelectionToClipboard() } @@ -282,7 +282,7 @@ ApplicationWindow { anchors.fill: parent ToolButton { action: Action { - icon.source: "resources/go-up-search.svg" + icon.source: "qrc:/pdfviewer/resources/go-up-search.svg" shortcut: StandardKey.FindPrevious onTriggered: view.searchBack() } @@ -299,7 +299,7 @@ ApplicationWindow { onAccepted: searchDrawer.open() Image { visible: searchField.text !== "" - source: "resources/edit-clear.svg" + source: "qrc:/pdfviewer/resources/edit-clear.svg" anchors { right: parent.right top: parent.top @@ -314,7 +314,7 @@ ApplicationWindow { } ToolButton { action: Action { - icon.source: "resources/go-down-search.svg" + icon.source: "qrc:/pdfviewer/resources/go-down-search.svg" shortcut: StandardKey.FindNext onTriggered: view.searchForward() } diff --git a/examples/pdfwidgets/CMakeLists.txt b/examples/pdfwidgets/CMakeLists.txt new file mode 100644 index 000000000..37496ebe3 --- /dev/null +++ b/examples/pdfwidgets/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(pdfviewer) diff --git a/examples/pdfwidgets/pdfviewer/CMakeLists.txt b/examples/pdfwidgets/pdfviewer/CMakeLists.txt new file mode 100644 index 000000000..afcbf035a --- /dev/null +++ b/examples/pdfwidgets/pdfviewer/CMakeLists.txt @@ -0,0 +1,63 @@ +# Generated from pdfviewer.pro. + +cmake_minimum_required(VERSION 3.14) +project(pdfviewer LANGUAGES CXX) + +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) +set(CMAKE_AUTOUIC ON) + +if(NOT DEFINED INSTALL_EXAMPLESDIR) + set(INSTALL_EXAMPLESDIR "examples") +endif() + +set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/pdfwidgets/pdfviewer") + +find_package(Qt6 COMPONENTS Core) +find_package(Qt6 COMPONENTS Gui) +find_package(Qt6 COMPONENTS Widgets) + +qt_add_executable(pdfviewerwidgets + main.cpp + mainwindow.cpp mainwindow.h mainwindow.ui + pageselector.cpp pageselector.h + zoomselector.cpp zoomselector.h +) +set_target_properties(pdfviewerwidgets PROPERTIES + WIN32_EXECUTABLE TRUE + MACOSX_BUNDLE TRUE +) +target_link_libraries(pdfviewerwidgets PUBLIC + Qt::Core + Qt::Gui + Qt::Widgets + Qt::PdfWidgets +) + + +# Resources: +set(resources_resource_files + "images/busy.png" + "images/fileopen.png" + "images/go-next-24.png" + "images/go-previous-24.png" + "images/zoom-in-24.png" + "images/zoom-in-32.png" + "images/zoom-out-24.png" + "images/zoom-out-32.png" +) + +qt6_add_resources(pdfviewerwidgets "resources" + PREFIX + "/icons" + FILES + ${resources_resource_files} +) + +install(TARGETS pdfviewerwidgets + RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}" + BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" + LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" +) -- cgit v1.2.3