diff options
Diffstat (limited to 'src/printsupport/kernel/qprint_p.h')
-rw-r--r-- | src/printsupport/kernel/qprint_p.h | 150 |
1 files changed, 21 insertions, 129 deletions
diff --git a/src/printsupport/kernel/qprint_p.h b/src/printsupport/kernel/qprint_p.h index 6e07c27c64..0a94aa8db3 100644 --- a/src/printsupport/kernel/qprint_p.h +++ b/src/printsupport/kernel/qprint_p.h @@ -1,3 +1,4 @@ +// Copyright (C) 2022 The Qt Company Ltd. // Copyright (C) 2014 John Layt <jlayt@kde.org> // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only @@ -67,6 +68,7 @@ namespace QPrint { DuplexShortSide }; + // Note: Keep in sync with QPrinter::ColorMode enum ColorMode { GrayScale, Color @@ -124,142 +126,32 @@ struct InputSlotMap { const char *key; }; -// Note: PPD standard does not define a standard set of InputSlot keywords, -// it is a free form text field left to the PPD writer to decide, -// but it does suggest some names for consistency with the Windows enum. -static const InputSlotMap inputSlotMap[] = { - { QPrint::Upper, DMBIN_UPPER, "Upper" }, - { QPrint::Lower, DMBIN_LOWER, "Lower" }, - { QPrint::Middle, DMBIN_MIDDLE, "Middle" }, - { QPrint::Manual, DMBIN_MANUAL, "Manual" }, - { QPrint::Envelope, DMBIN_ENVELOPE, "Envelope" }, - { QPrint::EnvelopeManual, DMBIN_ENVMANUAL, "EnvelopeManual" }, - { QPrint::Auto, DMBIN_AUTO, "Auto" }, - { QPrint::Tractor, DMBIN_TRACTOR, "Tractor" }, - { QPrint::SmallFormat, DMBIN_SMALLFMT, "AnySmallFormat" }, - { QPrint::LargeFormat, DMBIN_LARGEFMT, "AnyLargeFormat" }, - { QPrint::LargeCapacity, DMBIN_LARGECAPACITY, "LargeCapacity" }, - { QPrint::Cassette, DMBIN_CASSETTE, "Cassette" }, - { QPrint::FormSource, DMBIN_FORMSOURCE, "FormSource" }, - { QPrint::Manual, DMBIN_MANUAL, "ManualFeed" }, - { QPrint::OnlyOne, DMBIN_ONLYONE, "OnlyOne" }, // = QPrint::Upper - { QPrint::CustomInputSlot, DMBIN_USER, "" } // Must always be last row -}; - struct OutputBinMap { QPrint::OutputBinId id; const char *key; }; -static const OutputBinMap outputBinMap[] = { - { QPrint::AutoOutputBin, "" }, // Not a PPD defined value, internal use only - { QPrint::UpperBin, "Upper" }, - { QPrint::LowerBin, "Lower" }, - { QPrint::RearBin, "Rear" }, - { QPrint::CustomOutputBin, "" } // Must always be last row -}; - // Print utilities shared by print plugins -class QPrintUtils -{ - -public: - - static QPrint::InputSlotId inputSlotKeyToInputSlotId(const QByteArray &key) - { - for (int i = 0; inputSlotMap[i].id != QPrint::CustomInputSlot; ++i) { - if (inputSlotMap[i].key == key) - return inputSlotMap[i].id; - } - return QPrint::CustomInputSlot; - } - - static QByteArray inputSlotIdToInputSlotKey(QPrint::InputSlotId id) - { - for (int i = 0; inputSlotMap[i].id != QPrint::CustomInputSlot; ++i) { - if (inputSlotMap[i].id == id) - return QByteArray(inputSlotMap[i].key); - } - return QByteArray(); - } - - static int inputSlotIdToWindowsId(QPrint::InputSlotId id) - { - for (int i = 0; inputSlotMap[i].id != QPrint::CustomInputSlot; ++i) { - if (inputSlotMap[i].id == id) - return inputSlotMap[i].windowsId; - } - return 0; - } - - static QPrint::OutputBinId outputBinKeyToOutputBinId(const QByteArray &key) - { - for (int i = 0; outputBinMap[i].id != QPrint::CustomOutputBin; ++i) { - if (outputBinMap[i].key == key) - return outputBinMap[i].id; - } - return QPrint::CustomOutputBin; - } - - static QByteArray outputBinIdToOutputBinKey(QPrint::OutputBinId id) - { - for (int i = 0; outputBinMap[i].id != QPrint::CustomOutputBin; ++i) { - if (outputBinMap[i].id == id) - return QByteArray(outputBinMap[i].key); - } - return QByteArray(); - } - -#if (defined Q_OS_MACOS) || (defined Q_OS_UNIX && QT_CONFIG(cups)) - - // PPD utilities shared by CUPS and Mac plugins requiring CUPS headers - // May turn into a proper internal QPpd class if enough shared between Mac and CUPS, - // but where would it live? Not in base module as don't want to link to CUPS. - // May have to have two copies in plugins to keep in sync. - - static QPrint::InputSlot ppdChoiceToInputSlot(const ppd_choice_t &choice) - { - QPrint::InputSlot input; - input.key = choice.choice; - input.name = QString::fromUtf8(choice.text); - input.id = inputSlotKeyToInputSlotId(input.key); - input.windowsId = inputSlotMap[input.id].windowsId; - return input; - } - - static QPrint::OutputBin ppdChoiceToOutputBin(const ppd_choice_t &choice) - { - QPrint::OutputBin output; - output.key = choice.choice; - output.name = QString::fromUtf8(choice.text); - output.id = outputBinKeyToOutputBinId(output.key); - return output; - } - - static int parsePpdResolution(const QByteArray &value) - { - if (value.isEmpty()) - return -1; - // value can be in form 600dpi or 600x600dpi - QByteArray result = value.split('x').at(0); - if (result.endsWith("dpi")) - result.chop(3); - return result.toInt(); - } - - static QPrint::DuplexMode ppdChoiceToDuplexMode(const QByteArray &choice) - { - if (choice == "DuplexTumble") - return QPrint::DuplexShortSide; - else if (choice == "DuplexNoTumble") - return QPrint::DuplexLongSide; - else // None or SimplexTumble or SimplexNoTumble - return QPrint::DuplexNone; - } - -#endif // Mac and CUPS PPD Utilities - +namespace QPrintUtils { + +Q_PRINTSUPPORT_EXPORT QPrint::InputSlotId inputSlotKeyToInputSlotId(const QByteArray &key); +Q_PRINTSUPPORT_EXPORT QByteArray inputSlotIdToInputSlotKey(QPrint::InputSlotId id); +Q_PRINTSUPPORT_EXPORT int inputSlotIdToWindowsId(QPrint::InputSlotId id); +Q_PRINTSUPPORT_EXPORT QPrint::OutputBinId outputBinKeyToOutputBinId(const QByteArray &key); +Q_PRINTSUPPORT_EXPORT QByteArray outputBinIdToOutputBinKey(QPrint::OutputBinId id); +Q_PRINTSUPPORT_EXPORT QPrint::InputSlot paperBinToInputSlot(int windowsId, const QString &name); + +# if (defined Q_OS_MACOS) || (defined Q_OS_UNIX && QT_CONFIG(cups)) +// PPD utilities shared by CUPS and Mac plugins requiring CUPS headers +// May turn into a proper internal QPpd class if enough shared between Mac and CUPS, +// but where would it live? Not in base module as don't want to link to CUPS. +// May have to have two copies in plugins to keep in sync. +Q_PRINTSUPPORT_EXPORT QPrint::InputSlot ppdChoiceToInputSlot(const ppd_choice_t &choice); +Q_PRINTSUPPORT_EXPORT QPrint::OutputBin ppdChoiceToOutputBin(const ppd_choice_t &choice); +Q_PRINTSUPPORT_EXPORT int parsePpdResolution(const QByteArray &value); +Q_PRINTSUPPORT_EXPORT QPrint::DuplexMode ppdChoiceToDuplexMode(const QByteArray &choice); +# endif // Mac and CUPS PPD Utilities }; #endif // QT_NO_PRINTER |