/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef nsPrintSettingsX_h_ #define nsPrintSettingsX_h_ #include "nsPrintSettingsImpl.h" #import // clang-format off #define NS_PRINTSETTINGSX_IID \ { \ 0x0DF2FDBD, 0x906D, 0x4726, { \ 0x9E, 0x4D, 0xCF, 0xE0, 0x87, 0x8D, 0x70, 0x7C \ } \ } // clang-format on class nsPrintSettingsX : public nsPrintSettings { public: NS_DECLARE_STATIC_IID_ACCESSOR(NS_PRINTSETTINGSX_IID) NS_DECL_ISUPPORTS_INHERITED nsPrintSettingsX(); explicit nsPrintSettingsX(const PrintSettingsInitializer& aSettings); nsresult Init() { return NS_OK; } void SetDestination(uint16_t aDestination) { mDestination = aDestination; } void GetDestination(uint16_t* aDestination) { *aDestination = mDestination; } void SetDisposition(const nsString& aDisposition) { mDisposition = aDisposition; } void GetDisposition(nsString& aDisposition) { aDisposition = mDisposition; } // Get a Cocoa NSPrintInfo that is configured with our current settings. // This follows Create semantics, so the caller is responsible to release // the returned object when no longer required. // // Pass true for aWithScaling to have the print scaling factor included in // the returned printInfo. Normally we pass false, as scaling is handled // by Gecko and we don't want the Cocoa print system to impose scaling again // on the output, but if we're retrieving the info in order to populate the // system print UI, then we do want to know about it. NSPrintInfo* CreateOrCopyPrintInfo(bool aWithScaling = false); // Update our internal settings to reflect the properties of the given // NSPrintInfo. // // If aAdoptPrintInfo is set, the given NSPrintInfo will be retained and // returned by subsequent CreateOrCopyPrintInfo calls, which is required // for custom settings from the OS print dialog to be passed through to // print jobs. However, this means that subsequent changes to print settings // via the generic nsPrintSettings methods will NOT be reflected in the // resulting NSPrintInfo. void SetFromPrintInfo(NSPrintInfo* aPrintInfo, bool aAdoptPrintInfo); protected: virtual ~nsPrintSettingsX() { if (mSystemPrintInfo) { [mSystemPrintInfo release]; } }; nsPrintSettingsX& operator=(const nsPrintSettingsX& rhs); nsresult _Clone(nsIPrintSettings** _retval) override; nsresult _Assign(nsIPrintSettings* aPS) override; int GetCocoaUnit(int16_t aGeckoUnit); double PaperSizeFromCocoaPoints(double aPointsValue) { return aPointsValue * (mPaperSizeUnit == kPaperSizeInches ? 1.0 / 72.0 : 25.4 / 72.0); } double CocoaPointsFromPaperSize(double aSizeUnitValue) { return aSizeUnitValue * (mPaperSizeUnit == kPaperSizeInches ? 72.0 : 72.0 / 25.4); } // Needed to correctly track the various job dispositions (spool, preview, // save to file) that the user can choose via the system print dialog. // Unfortunately it seems to be necessary to set both the Cocoa "job // disposition" and the PrintManager "destination type" in order for all the // various workflows such as "Save to Web Receipts" to work. nsString mDisposition; uint16_t mDestination; // If the user has used the system print UI, we retain a reference to its // printInfo because it may contain settings that we don't know how to handle // and that will be lost if we round-trip through nsPrintSettings fields. // We'll use this printInfo if asked to run a print job. // // This "wrapped" printInfo is NOT serialized or copied when printSettings // objects are passed around; it is used only by the settings object to which // it was originally passed. NSPrintInfo* mSystemPrintInfo = nullptr; }; NS_DEFINE_STATIC_IID_ACCESSOR(nsPrintSettingsX, NS_PRINTSETTINGSX_IID) #endif // nsPrintSettingsX_h_