diff options
author | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2020-05-11 17:57:24 +0200 |
---|---|---|
committer | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2020-06-04 01:46:27 +0200 |
commit | 7f179eff61826323afea474b8ecd1a04f0a41e32 (patch) | |
tree | a0b32c05171d45b5957f09034e3b6220894e1f8b | |
parent | 6a3c6f939f29c83d53d2da0c3f53b814bdd02358 (diff) |
Move macOS print support from platform plugin into QtPrintSupport
Task-number: QTBUG-83256
Change-Id: I29044b6c3f952c259f501f94a175c8ef2cbaae55
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
18 files changed, 75 insertions, 123 deletions
diff --git a/src/plugins/platforms/cocoa/CMakeLists.txt b/src/plugins/platforms/cocoa/CMakeLists.txt index 9d578e7eed..11f3f99d8d 100644 --- a/src/plugins/platforms/cocoa/CMakeLists.txt +++ b/src/plugins/platforms/cocoa/CMakeLists.txt @@ -1,7 +1,6 @@ # Generated from cocoa.pro. # special case: -qt_find_package(Cups PROVIDED_TARGETS Cups::Cups) ##################################################################### ## QCocoaIntegrationPlugin Plugin: @@ -55,7 +54,6 @@ qt_internal_add_plugin(QCocoaIntegrationPlugin ${FWIOSurface} ${FWMetal} ${FWQuartzCore} - Cups::Cups Qt::Core Qt::CorePrivate Qt::Gui @@ -110,25 +108,9 @@ qt_extend_target(QCocoaIntegrationPlugin CONDITION QT_FEATURE_sessionmanager qcocoasessionmanager.cpp qcocoasessionmanager.h ) -qt_extend_target(QCocoaIntegrationPlugin CONDITION TARGET Qt::Widgets - SOURCES - qpaintengine_mac.mm qpaintengine_mac_p.h - PUBLIC_LIBRARIES - Qt::WidgetsPrivate -) - #### Keys ignored in scope 7:.:.:cocoa.pro:TARGET Qt::Widgets: # QT_FOR_CONFIG = "widgets" -qt_extend_target(QCocoaIntegrationPlugin CONDITION TARGET Qt::PrintSupport AND TARGET Qt::Widgets - SOURCES - qcocoaprintdevice.h qcocoaprintdevice.mm - qcocoaprintersupport.h qcocoaprintersupport.mm - qprintengine_mac.mm qprintengine_mac_p.h - PUBLIC_LIBRARIES - Qt::PrintSupportPrivate -) - qt_extend_target(QCocoaIntegrationPlugin CONDITION QT_FEATURE_colordialog AND TARGET Qt::Widgets SOURCES qcocoacolordialoghelper.h qcocoacolordialoghelper.mm diff --git a/src/plugins/platforms/cocoa/cocoa.pro b/src/plugins/platforms/cocoa/cocoa.pro index c0a7b4e6cf..a33b99e898 100644 --- a/src/plugins/platforms/cocoa/cocoa.pro +++ b/src/plugins/platforms/cocoa/cocoa.pro @@ -89,7 +89,7 @@ qtConfig(sessionmanager) { RESOURCES += qcocoaresources.qrc -LIBS += -framework AppKit -framework CoreServices -framework Carbon -framework IOKit -framework QuartzCore -framework CoreVideo -framework Metal -framework IOSurface -lcups +LIBS += -framework AppKit -framework CoreServices -framework Carbon -framework IOKit -framework QuartzCore -framework CoreVideo -framework Metal -framework IOSurface DEFINES += QT_NO_FOREACH @@ -100,21 +100,6 @@ CONFIG += no_app_extension_api_only qtHaveModule(widgets) { QT_FOR_CONFIG += widgets - SOURCES += qpaintengine_mac.mm - HEADERS += qpaintengine_mac_p.h - - qtHaveModule(printsupport) { - QT += printsupport-private - SOURCES += \ - qprintengine_mac.mm \ - qcocoaprintersupport.mm \ - qcocoaprintdevice.mm - HEADERS += \ - qcocoaprintersupport.h \ - qcocoaprintdevice.h \ - qprintengine_mac_p.h - } - qtConfig(colordialog) { SOURCES += qcocoacolordialoghelper.mm HEADERS += qcocoacolordialoghelper.h diff --git a/src/plugins/platforms/cocoa/qcocoanativeinterface.h b/src/plugins/platforms/cocoa/qcocoanativeinterface.h index c30297c8ca..45330cf1b8 100644 --- a/src/plugins/platforms/cocoa/qcocoanativeinterface.h +++ b/src/plugins/platforms/cocoa/qcocoanativeinterface.h @@ -45,13 +45,10 @@ #include <qpa/qplatformnativeinterface.h> #include <QtGui/qpixmap.h> Q_MOC_INCLUDE(<QWindow>) -Q_MOC_INCLUDE(<qpa/qplatformprintersupport.h>) -Q_MOC_INCLUDE(<QPrintEngine>) QT_BEGIN_NAMESPACE class QWidget; -class QPlatformPrinterSupport; class QPrintEngine; class QPlatformMenu; class QPlatformMenuBar; @@ -81,23 +78,6 @@ public Q_SLOTS: private: /* - "Virtual" function to create the platform printer support - implementation. - - We use an invokable function instead of a virtual one, we do not want - this in the QPlatform* API yet. - - This was added here only because QPlatformNativeInterface is a QObject - and allow us to use QMetaObject::indexOfMethod() from the printsupport - plugin. - */ - Q_INVOKABLE QPlatformPrinterSupport *createPlatformPrinterSupport(); - /* - Function to return the NSPrintInfo * from QMacPaintEnginePrivate. - Needed by the native print dialog in the Qt Print Support module. - */ - Q_INVOKABLE void *NSPrintInfoForPrintEngine(QPrintEngine *printEngine); - /* Function to return the default background pixmap. Needed by QWizard in the Qt widget module. */ diff --git a/src/plugins/platforms/cocoa/qcocoanativeinterface.mm b/src/plugins/platforms/cocoa/qcocoanativeinterface.mm index 8e336d9ee7..fbc2e8f13e 100644 --- a/src/plugins/platforms/cocoa/qcocoanativeinterface.mm +++ b/src/plugins/platforms/cocoa/qcocoanativeinterface.mm @@ -59,12 +59,6 @@ #include <QtGui/qguiapplication.h> #include <qdebug.h> -#if !defined(QT_NO_WIDGETS) && defined(QT_PRINTSUPPORT_LIB) -#include "qcocoaprintersupport.h" -#include "qprintengine_mac_p.h" -#include <qpa/qplatformprintersupport.h> -#endif - #include <QtGui/private/qcoregraphics_p.h> #include <QtPlatformHeaders/qcocoawindowfunctions.h> @@ -147,30 +141,6 @@ QPlatformNativeInterface::NativeResourceForIntegrationFunction QCocoaNativeInter return nullptr; } -QPlatformPrinterSupport *QCocoaNativeInterface::createPlatformPrinterSupport() -{ -#if !defined(QT_NO_WIDGETS) && !defined(QT_NO_PRINTER) && defined(QT_PRINTSUPPORT_LIB) - return new QCocoaPrinterSupport(); -#else - qFatal("Printing is not supported when Qt is configured with -no-widgets or -no-feature-printer"); - return nullptr; -#endif -} - -void *QCocoaNativeInterface::NSPrintInfoForPrintEngine(QPrintEngine *printEngine) -{ -#if !defined(QT_NO_WIDGETS) && !defined(QT_NO_PRINTER) && defined(QT_PRINTSUPPORT_LIB) - QMacPrintEnginePrivate *macPrintEnginePriv = static_cast<QMacPrintEngine *>(printEngine)->d_func(); - if (macPrintEnginePriv->state == QPrinter::Idle && !macPrintEnginePriv->isPrintSessionInitialized()) - macPrintEnginePriv->initialize(); - return macPrintEnginePriv->printInfo; -#else - Q_UNUSED(printEngine); - qFatal("Printing is not supported when Qt is configured with -no-widgets or -no-feature-printer"); - return nullptr; -#endif -} - QPixmap QCocoaNativeInterface::defaultBackgroundPixmapForQWizard() { // Note: starting with macOS 10.14, the KeyboardSetupAssistant app bundle no diff --git a/src/plugins/printsupport/cocoa/main.cpp b/src/plugins/printsupport/cocoa/main.cpp index b6830c88d4..26ef5cca22 100644 --- a/src/plugins/printsupport/cocoa/main.cpp +++ b/src/plugins/printsupport/cocoa/main.cpp @@ -42,6 +42,8 @@ #include <qpa/qplatformnativeinterface.h> #include <qpa/qplatformprintplugin.h> +#include <QtPrintSupport/private/qcocoaprintersupport_p.h> + QT_BEGIN_NAMESPACE class QCocoaPrinterSupportPlugin : public QPlatformPrinterSupportPlugin @@ -57,18 +59,8 @@ QPlatformPrinterSupport *QCocoaPrinterSupportPlugin::create(const QString &key) { if (key.compare(key, QLatin1String("cocoaprintersupport"), Qt::CaseInsensitive) != 0) return 0; - QGuiApplication *app = qobject_cast<QGuiApplication *>(QCoreApplication::instance()); - if (!app) - return 0; - QPlatformNativeInterface *platformNativeInterface = app->platformNativeInterface(); - int at = platformNativeInterface->metaObject()->indexOfMethod("createPlatformPrinterSupport()"); - if (at == -1) - return 0; - QMetaMethod createPlatformPrinterSupport = platformNativeInterface->metaObject()->method(at); - QPlatformPrinterSupport *platformPrinterSupport = 0; - if (!createPlatformPrinterSupport.invoke(platformNativeInterface, Q_RETURN_ARG(QPlatformPrinterSupport *, platformPrinterSupport))) - return 0; - return platformPrinterSupport; + + return new QCocoaPrinterSupport(); } QT_END_NAMESPACE diff --git a/src/printsupport/CMakeLists.txt b/src/printsupport/CMakeLists.txt index 9c73d78267..e032845cae 100644 --- a/src/printsupport/CMakeLists.txt +++ b/src/printsupport/CMakeLists.txt @@ -143,6 +143,17 @@ if(QT_FEATURE_printdialog) ) endif() +qt_extend_target(PrintSupport CONDITION MACOS AND TARGET Qt::Widgets + SOURCES + platform/macos/qpaintengine_mac.mm platform/macos/qpaintengine_mac_p.h + platform/macos/qcocoaprintdevice_p.h platform/macos/qcocoaprintdevice.mm + platform/macos/qcocoaprintersupport_p.h platform/macos/qcocoaprintersupport.mm + platform/macos/qprintengine_mac.mm platform/macos/qprintengine_mac_p.h + PUBLIC_LIBRARIES + Qt::WidgetsPrivate + Cups::Cups +) + qt_extend_target(PrintSupport CONDITION MACOS AND QT_FEATURE_printdialog SOURCES dialogs/qpagesetupdialog_mac.mm diff --git a/src/printsupport/dialogs/qpagesetupdialog_mac.mm b/src/printsupport/dialogs/qpagesetupdialog_mac.mm index a3511fe7b6..b88d03696a 100644 --- a/src/printsupport/dialogs/qpagesetupdialog_mac.mm +++ b/src/printsupport/dialogs/qpagesetupdialog_mac.mm @@ -47,6 +47,8 @@ #include <qpa/qplatformnativeinterface.h> #include <QtPrintSupport/qprintengine.h> +#include <QtPrintSupport/private/qprintengine_mac_p.h> + QT_USE_NAMESPACE @class QT_MANGLE_NAMESPACE(QCocoaPageLayoutDelegate); @@ -114,13 +116,7 @@ void QMacPageSetupDialogPrivate::openCocoaPageLayout(Qt::WindowModality modality { Q_Q(QPageSetupDialog); - // get the NSPrintInfo from the print engine in the platform plugin - void *voidp = 0; - (void) QMetaObject::invokeMethod(qApp->platformNativeInterface(), - "NSPrintInfoForPrintEngine", - Q_RETURN_ARG(void *, voidp), - Q_ARG(QPrintEngine *, printer->printEngine())); - printInfo = static_cast<NSPrintInfo *>(voidp); + printInfo = static_cast<QMacPrintEngine *>(printer->printEngine())->printInfo(); [printInfo retain]; pageLayout = [NSPageLayout pageLayout]; diff --git a/src/printsupport/dialogs/qprintdialog_mac.mm b/src/printsupport/dialogs/qprintdialog_mac.mm index a4101f7ec0..9f84f98588 100644 --- a/src/printsupport/dialogs/qprintdialog_mac.mm +++ b/src/printsupport/dialogs/qprintdialog_mac.mm @@ -49,6 +49,8 @@ #include <QtPrintSupport/qprintengine.h> #include <qpa/qplatformprintdevice.h> +#include <QtPrintSupport/private/qprintengine_mac_p.h> + QT_BEGIN_NAMESPACE extern qreal qt_pointMultiplier(QPageLayout::Unit unit); @@ -216,13 +218,7 @@ void QPrintDialogPrivate::openCocoaPrintPanel(Qt::WindowModality modality) Q_Q(QPrintDialog); if (printer->outputFormat() == QPrinter::NativeFormat) { - // get the NSPrintInfo from the print engine in the platform plugin - void *voidp = 0; - (void) QMetaObject::invokeMethod(qApp->platformNativeInterface(), - "NSPrintInfoForPrintEngine", - Q_RETURN_ARG(void *, voidp), - Q_ARG(QPrintEngine *, printer->printEngine())); - printInfo = static_cast<NSPrintInfo *>(voidp); + printInfo = static_cast<QMacPrintEngine *>(printer->printEngine())->printInfo(); [printInfo retain]; } else { printInfo = [NSPrintInfo.sharedPrintInfo retain]; diff --git a/src/printsupport/platform/macos/macos.pri b/src/printsupport/platform/macos/macos.pri new file mode 100644 index 0000000000..fc5c5c9b93 --- /dev/null +++ b/src/printsupport/platform/macos/macos.pri @@ -0,0 +1,13 @@ +SOURCES += \ + $$PWD/qprintengine_mac.mm \ + $$PWD/qpaintengine_mac.mm \ + $$PWD/qcocoaprintersupport.mm \ + $$PWD/qcocoaprintdevice.mm + +HEADERS += \ + $$PWD/qcocoaprintersupport_p.h \ + $$PWD/qcocoaprintdevice_p.h \ + $$PWD/qprintengine_mac_p.h \ + $$PWD/qpaintengine_mac_p.h + +LIBS += -framework ApplicationServices -lcups diff --git a/src/plugins/platforms/cocoa/qcocoaprintdevice.mm b/src/printsupport/platform/macos/qcocoaprintdevice.mm index ab304d9c04..118adc0b96 100644 --- a/src/plugins/platforms/cocoa/qcocoaprintdevice.mm +++ b/src/printsupport/platform/macos/qcocoaprintdevice.mm @@ -39,7 +39,7 @@ #include <ApplicationServices/ApplicationServices.h> -#include "qcocoaprintdevice.h" +#include "qcocoaprintdevice_p.h" #if QT_CONFIG(mimetype) #include <QtCore/qmimedatabase.h> diff --git a/src/plugins/platforms/cocoa/qcocoaprintdevice.h b/src/printsupport/platform/macos/qcocoaprintdevice_p.h index 59a521e0b5..f40a3b2666 100644 --- a/src/plugins/platforms/cocoa/qcocoaprintdevice.h +++ b/src/printsupport/platform/macos/qcocoaprintdevice_p.h @@ -55,6 +55,10 @@ #ifndef QT_NO_PRINTER +#include <ApplicationServices/ApplicationServices.h> + +#include <QtPrintSupport/qtprintsupportglobal.h> + #include <cups/ppd.h> QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/cocoa/qcocoaprintersupport.mm b/src/printsupport/platform/macos/qcocoaprintersupport.mm index 4c5c7aef88..0a285dddc6 100644 --- a/src/plugins/platforms/cocoa/qcocoaprintersupport.mm +++ b/src/printsupport/platform/macos/qcocoaprintersupport.mm @@ -37,7 +37,9 @@ ** ****************************************************************************/ -#include "qcocoaprintersupport.h" +#include <AppKit/AppKit.h> + +#include "qcocoaprintersupport_p.h" #ifndef QT_NO_PRINTER @@ -45,7 +47,7 @@ #include <QtCore/private/qcore_mac_p.h> -#include "qcocoaprintdevice.h" +#include "qcocoaprintdevice_p.h" #include "qprintengine_mac_p.h" #include <private/qprinterinfo_p.h> diff --git a/src/plugins/platforms/cocoa/qcocoaprintersupport.h b/src/printsupport/platform/macos/qcocoaprintersupport_p.h index b1a9541c03..c12e8c355b 100644 --- a/src/plugins/platforms/cocoa/qcocoaprintersupport.h +++ b/src/printsupport/platform/macos/qcocoaprintersupport_p.h @@ -40,12 +40,25 @@ #ifndef QCOCOAPRINTERSUPPORT_H #define QCOCOAPRINTERSUPPORT_H +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of internal files. This header file may change from version to version +// without notice, or even be removed. +// +// We mean it. +// + #include <qpa/qplatformprintersupport.h> #ifndef QT_NO_PRINTER +#include <QtPrintSupport/qtprintsupportglobal.h> + QT_BEGIN_NAMESPACE -class QCocoaPrinterSupport : public QPlatformPrinterSupport +class Q_PRINTSUPPORT_EXPORT QCocoaPrinterSupport : public QPlatformPrinterSupport { public: QCocoaPrinterSupport(); diff --git a/src/plugins/platforms/cocoa/qpaintengine_mac.mm b/src/printsupport/platform/macos/qpaintengine_mac.mm index b50c39c9b0..fd82539df6 100644 --- a/src/plugins/platforms/cocoa/qpaintengine_mac.mm +++ b/src/printsupport/platform/macos/qpaintengine_mac.mm @@ -41,18 +41,14 @@ #include <CoreGraphics/CoreGraphics.h> #include "qpaintengine_mac_p.h" -#if defined(QT_PRINTSUPPORT_LIB) #include "qprintengine_mac_p.h" -#endif #include <qbitmap.h> #include <qpaintdevice.h> #include <qpainterpath.h> #include <qpixmapcache.h> #include <private/qpaintengine_raster_p.h> -#if defined(QT_PRINTSUPPORT_LIB) #include <qprinter.h> -#endif #include <qstack.h> #include <qwidget.h> #include <qvarlengtharray.h> @@ -71,8 +67,6 @@ #include <private/qtextengine_p.h> #include <private/qcoregraphics_p.h> -#include "qcocoahelpers.h" - #include <string.h> QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/cocoa/qpaintengine_mac_p.h b/src/printsupport/platform/macos/qpaintengine_mac_p.h index a52e9cbe1c..5ee158e8e5 100644 --- a/src/plugins/platforms/cocoa/qpaintengine_mac_p.h +++ b/src/printsupport/platform/macos/qpaintengine_mac_p.h @@ -51,6 +51,8 @@ // We mean it. // +#include <QtPrintSupport/qtprintsupportglobal.h> + #include <QtGui/qpaintengine.h> #include <QtGui/private/qpaintengine_p.h> #include <QtGui/private/qpolygonclipper_p.h> diff --git a/src/plugins/platforms/cocoa/qprintengine_mac.mm b/src/printsupport/platform/macos/qprintengine_mac.mm index 9391f921ec..1b06722447 100644 --- a/src/plugins/platforms/cocoa/qprintengine_mac.mm +++ b/src/printsupport/platform/macos/qprintengine_mac.mm @@ -41,7 +41,7 @@ #include <ApplicationServices/ApplicationServices.h> #include "qprintengine_mac_p.h" -#include "qcocoaprintersupport.h" +#include "qcocoaprintersupport_p.h" #include <quuid.h> #include <QtGui/qpagelayout.h> #include <QtCore/qcoreapplication.h> @@ -792,6 +792,14 @@ QVariant QMacPrintEngine::property(PrintEnginePropertyKey key) const return ret; } +NSPrintInfo *QMacPrintEngine::printInfo() +{ + Q_D(QMacPrintEngine); + if (d->state == QPrinter::Idle && !d->isPrintSessionInitialized()) + d->initialize(); + return d->printInfo; +} + QT_END_NAMESPACE #endif // QT_NO_PRINTER diff --git a/src/plugins/platforms/cocoa/qprintengine_mac_p.h b/src/printsupport/platform/macos/qprintengine_mac_p.h index 6a1ed2e263..c76eee4ee7 100644 --- a/src/plugins/platforms/cocoa/qprintengine_mac_p.h +++ b/src/printsupport/platform/macos/qprintengine_mac_p.h @@ -51,7 +51,7 @@ // We mean it. // -#include <QtCore/qglobal.h> +#include <QtPrintSupport/qtprintsupportglobal.h> #ifndef QT_NO_PRINTER @@ -60,7 +60,7 @@ #include <QtGui/private/qpainter_p.h> #include <QtGui/qpagelayout.h> -#include "qcocoaprintdevice.h" +#include "qcocoaprintdevice_p.h" #include "qpaintengine_mac_p.h" @@ -93,6 +93,8 @@ public: bool abort(); int metric(QPaintDevice::PaintDeviceMetric) const; + NSPrintInfo *printInfo(); + //forwarded functions void updateState(const QPaintEngineState &state); diff --git a/src/printsupport/printsupport.pro b/src/printsupport/printsupport.pro index 52e99803c3..e64fbb634c 100644 --- a/src/printsupport/printsupport.pro +++ b/src/printsupport/printsupport.pro @@ -11,6 +11,8 @@ include(kernel/kernel.pri) include(widgets/widgets.pri) include(dialogs/dialogs.pri) +macos: include(platform/macos/macos.pri) + MODULE_PLUGIN_TYPES = \ printsupport load(qt_module) |