Avi Drissman | db497b3 | 2022-09-15 19:47:28 | [diff] [blame] | 1 | // Copyright 2011 The Chromium Authors |
jhawkins@chromium.org | 51e8d93 | 2010-10-06 22:21:17 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | #ifndef PRINTING_PRINTING_CONTEXT_MAC_H_ |
| 6 | #define PRINTING_PRINTING_CONTEXT_MAC_H_ |
| 7 | |
tapted | 05d4a5b | 2015-05-04 07:20:12 | [diff] [blame] | 8 | #include <ApplicationServices/ApplicationServices.h> |
Avi Drissman | 6a4828b | 2023-06-05 20:52:00 | [diff] [blame] | 9 | |
sanjeevr@chromium.org | ee5f36e4 | 2010-12-03 22:40:37 | [diff] [blame] | 10 | #include <string> |
Helmut Januschka | c1f3afcc | 2024-02-08 22:06:37 | [diff] [blame] | 11 | #include <string_view> |
sanjeevr@chromium.org | ee5f36e4 | 2010-12-03 22:40:37 | [diff] [blame] | 12 | |
mikt | 39c5810 | 2023-05-31 09:47:48 | [diff] [blame] | 13 | #include "base/memory/raw_ptr_exclusion.h" |
Julie Jeongeun Kim | e454f260 | 2020-04-30 05:20:07 | [diff] [blame] | 14 | #include "printing/mojom/print.mojom.h" |
kmadhusu@chromium.org | a44b0c14 | 2011-04-26 15:46:10 | [diff] [blame] | 15 | #include "printing/print_job_constants.h" |
thakis@chromium.org | a852203 | 2013-06-24 22:51:46 | [diff] [blame] | 16 | #include "printing/printing_context.h" |
jhawkins@chromium.org | 51e8d93 | 2010-10-06 22:21:17 | [diff] [blame] | 17 | |
jhawkins@chromium.org | 51e8d93 | 2010-10-06 22:21:17 | [diff] [blame] | 18 | @class NSPrintInfo; |
jhawkins@chromium.org | 51e8d93 | 2010-10-06 22:21:17 | [diff] [blame] | 19 | |
| 20 | namespace printing { |
| 21 | |
Alan Screen | 9347cae | 2021-04-27 18:11:24 | [diff] [blame] | 22 | class COMPONENT_EXPORT(PRINTING) PrintingContextMac : public PrintingContext { |
jhawkins@chromium.org | 51e8d93 | 2010-10-06 22:21:17 | [diff] [blame] | 23 | public: |
Alan Screen | 96a12395 | 2023-11-06 21:53:16 | [diff] [blame] | 24 | PrintingContextMac(Delegate* delegate, ProcessBehavior process_behavior); |
Lei Zhang | dd3e9b0 | 2020-08-19 23:04:42 | [diff] [blame] | 25 | PrintingContextMac(const PrintingContextMac&) = delete; |
| 26 | PrintingContextMac& operator=(const PrintingContextMac&) = delete; |
dcheng | d5a0f18 | 2014-10-22 00:04:34 | [diff] [blame] | 27 | ~PrintingContextMac() override; |
jhawkins@chromium.org | 51e8d93 | 2010-10-06 22:21:17 | [diff] [blame] | 28 | |
| 29 | // PrintingContext implementation. |
dcheng | d5a0f18 | 2014-10-22 00:04:34 | [diff] [blame] | 30 | void AskUserForSettings(int max_pages, |
| 31 | bool has_selection, |
dgn | 4c172eea | 2014-12-15 21:11:23 | [diff] [blame] | 32 | bool is_scripted, |
Vladislav Kuzkokov | 48ceab2 | 2018-02-14 16:29:28 | [diff] [blame] | 33 | PrintSettingsCallback callback) override; |
Alan Screen | 202e49a | 2021-09-21 06:34:28 | [diff] [blame] | 34 | mojom::ResultCode UseDefaultSettings() override; |
dcheng | d5a0f18 | 2014-10-22 00:04:34 | [diff] [blame] | 35 | gfx::Size GetPdfPaperSizeDeviceUnits() override; |
Lei Zhang | a3fdad44 | 2021-11-15 23:55:33 | [diff] [blame] | 36 | mojom::ResultCode UpdatePrinterSettings( |
| 37 | const PrinterSettings& printer_settings) override; |
Alan Screen | 202e49a | 2021-09-21 06:34:28 | [diff] [blame] | 38 | mojom::ResultCode NewDocument(const std::u16string& document_name) override; |
Alan Screen | 4e284e9 | 2021-12-04 00:38:29 | [diff] [blame] | 39 | mojom::ResultCode PrintDocument(const MetafilePlayer& metafile, |
| 40 | const PrintSettings& settings, |
| 41 | uint32_t num_pages) override; |
Alan Screen | 202e49a | 2021-09-21 06:34:28 | [diff] [blame] | 42 | mojom::ResultCode DocumentDone() override; |
dcheng | d5a0f18 | 2014-10-22 00:04:34 | [diff] [blame] | 43 | void Cancel() override; |
| 44 | void ReleaseContext() override; |
Nico Weber | 8e55956 | 2017-10-03 01:25:26 | [diff] [blame] | 45 | printing::NativeDrawingContext context() const override; |
jhawkins@chromium.org | 51e8d93 | 2010-10-06 22:21:17 | [diff] [blame] | 46 | |
| 47 | private: |
Daniel Hosseinian | 3553e27 | 2021-04-24 00:51:18 | [diff] [blame] | 48 | // Initializes PrintSettings from `print_info_`. This must be called |
| 49 | // after changes to `print_info_` in order for the changes to take effect in |
kmadhusu@chromium.org | 4274861a | 2011-06-03 19:27:00 | [diff] [blame] | 50 | // printing. |
| 51 | // This function ignores the page range information specified in the print |
Daniel Hosseinian | 3553e27 | 2021-04-24 00:51:18 | [diff] [blame] | 52 | // info object and use `settings_.ranges` instead. |
vitalybuka@chromium.org | e5324b5 | 2013-10-29 03:16:37 | [diff] [blame] | 53 | void InitPrintSettingsFromPrintInfo(); |
kmadhusu@chromium.org | 89f5aa8c | 2011-03-21 20:58:44 | [diff] [blame] | 54 | |
Daniel Hosseinian | 3553e27 | 2021-04-24 00:51:18 | [diff] [blame] | 55 | // Returns the set of page ranges constructed from `print_info_`. |
kmadhusu@chromium.org | 4274861a | 2011-06-03 19:27:00 | [diff] [blame] | 56 | PageRanges GetPageRangesFromPrintInfo(); |
| 57 | |
Daniel Hosseinian | 3553e27 | 2021-04-24 00:51:18 | [diff] [blame] | 58 | // Updates `print_info_` to use the given printer. |
vitalybuka@chromium.org | f106a21 | 2014-06-20 05:02:37 | [diff] [blame] | 59 | // Returns true if the printer was set. |
kmadhusu@chromium.org | 987e51f | 2011-05-04 21:10:15 | [diff] [blame] | 60 | bool SetPrinter(const std::string& device_name); |
kmadhusu@chromium.org | 36fbeee2 | 2011-03-23 16:35:12 | [diff] [blame] | 61 | |
Daniel Hosseinian | 3553e27 | 2021-04-24 00:51:18 | [diff] [blame] | 62 | // Updates `print_info_` page format with paper selected by user. If paper was |
vitalybuka@chromium.org | f106a21 | 2014-06-20 05:02:37 | [diff] [blame] | 63 | // not selected, default system paper is used. |
| 64 | // Returns true if the paper was set. |
kmadhusu@chromium.org | 4ed1df6 | 2011-11-02 02:32:57 | [diff] [blame] | 65 | bool UpdatePageFormatWithPaperInfo(); |
| 66 | |
Daniel Hosseinian | 3553e27 | 2021-04-24 00:51:18 | [diff] [blame] | 67 | // Updates `print_info_` page format with `paper`. |
vitalybuka@chromium.org | f106a21 | 2014-06-20 05:02:37 | [diff] [blame] | 68 | // Returns true if the paper was set. |
| 69 | bool UpdatePageFormatWithPaper(PMPaper paper, PMPageFormat page_format); |
| 70 | |
kmadhusu@chromium.org | 97c29575 | 2011-11-17 00:44:37 | [diff] [blame] | 71 | // Sets the print job destination type as preview job. |
| 72 | // Returns true if the print job destination type is set. |
| 73 | bool SetPrintPreviewJob(); |
| 74 | |
Daniel Hosseinian | 3553e27 | 2021-04-24 00:51:18 | [diff] [blame] | 75 | // Sets `copies` in PMPrintSettings. |
kmadhusu@chromium.org | c97e5e8 | 2011-04-05 18:50:23 | [diff] [blame] | 76 | // Returns true if the number of copies is set. |
| 77 | bool SetCopiesInPrintSettings(int copies); |
| 78 | |
Daniel Hosseinian | 3553e27 | 2021-04-24 00:51:18 | [diff] [blame] | 79 | // Sets `collate` in PMPrintSettings. |
| 80 | // Returns true if `collate` is set. |
kmadhusu@chromium.org | c97e5e8 | 2011-04-05 18:50:23 | [diff] [blame] | 81 | bool SetCollateInPrintSettings(bool collate); |
| 82 | |
kmadhusu@chromium.org | d203486 | 2011-04-05 20:03:31 | [diff] [blame] | 83 | // Sets orientation in native print info object. |
| 84 | // Returns true if the orientation was set. |
| 85 | bool SetOrientationIsLandscape(bool landscape); |
| 86 | |
kmadhusu@chromium.org | 770f906 | 2011-04-07 16:22:13 | [diff] [blame] | 87 | // Sets duplex mode in PMPrintSettings. |
| 88 | // Returns true if duplex mode is set. |
Julie Jeongeun Kim | e454f260 | 2020-04-30 05:20:07 | [diff] [blame] | 89 | bool SetDuplexModeInPrintSettings(mojom::DuplexMode mode); |
kmadhusu@chromium.org | 770f906 | 2011-04-07 16:22:13 | [diff] [blame] | 90 | |
kmadhusu@chromium.org | c7b3c63 | 2011-04-12 19:36:19 | [diff] [blame] | 91 | // Sets output color mode in PMPrintSettings. |
| 92 | // Returns true if color mode is set. |
kmadhusu@chromium.org | f3256b0d8 | 2011-09-04 23:36:29 | [diff] [blame] | 93 | bool SetOutputColor(int color_mode); |
kmadhusu@chromium.org | c7b3c63 | 2011-04-12 19:36:19 | [diff] [blame] | 94 | |
Daniel Hosseinian | 6f8afc06 | 2020-10-08 02:34:50 | [diff] [blame] | 95 | // Sets resolution in PMPrintSettings. |
| 96 | // Returns true if resolution is set. |
| 97 | bool SetResolution(const gfx::Size& dpi_size); |
| 98 | |
Daniel Hosseinian | fb7f5d6 | 2021-05-19 21:46:55 | [diff] [blame] | 99 | // Sets key-value pair in PMPrintSettings. |
| 100 | // Returns true is the pair is set. |
Helmut Januschka | c1f3afcc | 2024-02-08 22:06:37 | [diff] [blame] | 101 | bool SetKeyValue(std::string_view key, std::string_view value); |
Daniel Hosseinian | fb7f5d6 | 2021-05-19 21:46:55 | [diff] [blame] | 102 | |
Alan Screen | 46d031eb | 2022-01-05 23:15:29 | [diff] [blame] | 103 | // Starts a new page. |
| 104 | mojom::ResultCode NewPage(); |
| 105 | |
| 106 | // Closes the printed page. |
| 107 | mojom::ResultCode PageDone(); |
| 108 | |
jhawkins@chromium.org | 51e8d93 | 2010-10-06 22:21:17 | [diff] [blame] | 109 | // The native print info object. |
Avi Drissman | 6a4828b | 2023-06-05 20:52:00 | [diff] [blame] | 110 | NSPrintInfo* __strong print_info_; |
jhawkins@chromium.org | 51e8d93 | 2010-10-06 22:21:17 | [diff] [blame] | 111 | |
| 112 | // The current page's context; only valid between NewPage and PageDone call |
| 113 | // pairs. |
mikt | 39c5810 | 2023-05-31 09:47:48 | [diff] [blame] | 114 | // This field is not a raw_ptr<> because it was filtered by the rewriter |
| 115 | // for: #addr-of |
Avi Drissman | 6a4828b | 2023-06-05 20:52:00 | [diff] [blame] | 116 | RAW_PTR_EXCLUSION CGContextRef context_ = nullptr; |
jhawkins@chromium.org | 51e8d93 | 2010-10-06 22:21:17 | [diff] [blame] | 117 | }; |
| 118 | |
| 119 | } // namespace printing |
| 120 | |
| 121 | #endif // PRINTING_PRINTING_CONTEXT_MAC_H_ |