summaryrefslogtreecommitdiffstats
path: root/src/printsupport/kernel/qprintengine_win.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/printsupport/kernel/qprintengine_win.cpp')
-rw-r--r--src/printsupport/kernel/qprintengine_win.cpp54
1 files changed, 47 insertions, 7 deletions
diff --git a/src/printsupport/kernel/qprintengine_win.cpp b/src/printsupport/kernel/qprintengine_win.cpp
index a1a2f97abe..90b204eb0c 100644
--- a/src/printsupport/kernel/qprintengine_win.cpp
+++ b/src/printsupport/kernel/qprintengine_win.cpp
@@ -1003,9 +1003,6 @@ void QWin32PrintEngine::setProperty(PrintEnginePropertyKey key, const QVariant &
// The following keys are settings that are unsupported by the Windows PrintEngine
case PPK_CustomBase:
break;
- case PPK_Duplex:
- // TODO Add support using DEVMODE.dmDuplex
- break;
case PPK_FontEmbedding:
break;
case PPK_PageOrder:
@@ -1046,6 +1043,33 @@ void QWin32PrintEngine::setProperty(PrintEnginePropertyKey key, const QVariant &
d->docName = value.toString();
break;
+ case PPK_Duplex: {
+ if (!d->devMode)
+ break;
+ QPrint::DuplexMode mode = QPrint::DuplexMode(value.toInt());
+ if (mode == property(PPK_Duplex).toInt() || !d->m_printDevice.supportedDuplexModes().contains(mode))
+ break;
+ switch (mode) {
+ case QPrinter::DuplexNone:
+ d->devMode->dmDuplex = DMDUP_SIMPLEX;
+ break;
+ case QPrinter::DuplexAuto:
+ d->devMode->dmDuplex = d->m_pageLayout.orientation() == QPageLayout::Landscape ? DMDUP_HORIZONTAL : DMDUP_VERTICAL;
+ break;
+ case QPrinter::DuplexLongSide:
+ d->devMode->dmDuplex = DMDUP_VERTICAL;
+ break;
+ case QPrinter::DuplexShortSide:
+ d->devMode->dmDuplex = DMDUP_HORIZONTAL;
+ break;
+ default:
+ // Don't change
+ break;
+ }
+ d->doReinit();
+ break;
+ }
+
case PPK_FullPage:
if (value.toBool())
d->m_pageLayout.setMode(QPageLayout::FullPageMode);
@@ -1260,10 +1284,6 @@ QVariant QWin32PrintEngine::property(PrintEnginePropertyKey key) const
// The following keys are settings that are unsupported by the Windows PrintEngine
// Return sensible default values to ensure consistent behavior across platforms
- case PPK_Duplex:
- // TODO Add support using DEVMODE.dmDuplex
- value = QPrinter::DuplexNone;
- break;
case PPK_FontEmbedding:
value = false;
break;
@@ -1300,6 +1320,26 @@ QVariant QWin32PrintEngine::property(PrintEnginePropertyKey key) const
value = d->docName;
break;
+ case PPK_Duplex: {
+ if (!d->devMode) {
+ value = QPrinter::DuplexNone;
+ } else {
+ switch (d->devMode->dmDuplex) {
+ case DMDUP_VERTICAL:
+ value = QPrinter::DuplexLongSide;
+ break;
+ case DMDUP_HORIZONTAL:
+ value = QPrinter::DuplexShortSide;
+ break;
+ case DMDUP_SIMPLEX:
+ default:
+ value = QPrinter::DuplexNone;
+ break;
+ }
+ }
+ break;
+ }
+
case PPK_FullPage:
value = d->m_pageLayout.mode() == QPageLayout::FullPageMode;
break;