[go: nahoru, domu]

blob: 5b469b3b6bd11d8e0baa08e9be257990ac9bc438 [file] [log] [blame]
Avi Drissmandb497b32022-09-15 19:47:281// Copyright 2011 The Chromium Authors
jhawkins@chromium.org51e8d932010-10-06 22:21:172// 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
tapted05d4a5b2015-05-04 07:20:128#include <ApplicationServices/ApplicationServices.h>
Avi Drissman6a4828b2023-06-05 20:52:009
sanjeevr@chromium.orgee5f36e42010-12-03 22:40:3710#include <string>
Helmut Januschkac1f3afcc2024-02-08 22:06:3711#include <string_view>
sanjeevr@chromium.orgee5f36e42010-12-03 22:40:3712
mikt39c58102023-05-31 09:47:4813#include "base/memory/raw_ptr_exclusion.h"
Julie Jeongeun Kime454f2602020-04-30 05:20:0714#include "printing/mojom/print.mojom.h"
kmadhusu@chromium.orga44b0c142011-04-26 15:46:1015#include "printing/print_job_constants.h"
thakis@chromium.orga8522032013-06-24 22:51:4616#include "printing/printing_context.h"
jhawkins@chromium.org51e8d932010-10-06 22:21:1717
jhawkins@chromium.org51e8d932010-10-06 22:21:1718@class NSPrintInfo;
jhawkins@chromium.org51e8d932010-10-06 22:21:1719
20namespace printing {
21
Alan Screen9347cae2021-04-27 18:11:2422class COMPONENT_EXPORT(PRINTING) PrintingContextMac : public PrintingContext {
jhawkins@chromium.org51e8d932010-10-06 22:21:1723 public:
Alan Screen96a123952023-11-06 21:53:1624 PrintingContextMac(Delegate* delegate, ProcessBehavior process_behavior);
Lei Zhangdd3e9b02020-08-19 23:04:4225 PrintingContextMac(const PrintingContextMac&) = delete;
26 PrintingContextMac& operator=(const PrintingContextMac&) = delete;
dchengd5a0f182014-10-22 00:04:3427 ~PrintingContextMac() override;
jhawkins@chromium.org51e8d932010-10-06 22:21:1728
29 // PrintingContext implementation.
dchengd5a0f182014-10-22 00:04:3430 void AskUserForSettings(int max_pages,
31 bool has_selection,
dgn4c172eea2014-12-15 21:11:2332 bool is_scripted,
Vladislav Kuzkokov48ceab22018-02-14 16:29:2833 PrintSettingsCallback callback) override;
Alan Screen202e49a2021-09-21 06:34:2834 mojom::ResultCode UseDefaultSettings() override;
dchengd5a0f182014-10-22 00:04:3435 gfx::Size GetPdfPaperSizeDeviceUnits() override;
Lei Zhanga3fdad442021-11-15 23:55:3336 mojom::ResultCode UpdatePrinterSettings(
37 const PrinterSettings& printer_settings) override;
Alan Screen202e49a2021-09-21 06:34:2838 mojom::ResultCode NewDocument(const std::u16string& document_name) override;
Alan Screen4e284e92021-12-04 00:38:2939 mojom::ResultCode PrintDocument(const MetafilePlayer& metafile,
40 const PrintSettings& settings,
41 uint32_t num_pages) override;
Alan Screen202e49a2021-09-21 06:34:2842 mojom::ResultCode DocumentDone() override;
dchengd5a0f182014-10-22 00:04:3443 void Cancel() override;
44 void ReleaseContext() override;
Nico Weber8e559562017-10-03 01:25:2645 printing::NativeDrawingContext context() const override;
jhawkins@chromium.org51e8d932010-10-06 22:21:1746
47 private:
Daniel Hosseinian3553e272021-04-24 00:51:1848 // 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.org4274861a2011-06-03 19:27:0050 // printing.
51 // This function ignores the page range information specified in the print
Daniel Hosseinian3553e272021-04-24 00:51:1852 // info object and use `settings_.ranges` instead.
vitalybuka@chromium.orge5324b52013-10-29 03:16:3753 void InitPrintSettingsFromPrintInfo();
kmadhusu@chromium.org89f5aa8c2011-03-21 20:58:4454
Daniel Hosseinian3553e272021-04-24 00:51:1855 // Returns the set of page ranges constructed from `print_info_`.
kmadhusu@chromium.org4274861a2011-06-03 19:27:0056 PageRanges GetPageRangesFromPrintInfo();
57
Daniel Hosseinian3553e272021-04-24 00:51:1858 // Updates `print_info_` to use the given printer.
vitalybuka@chromium.orgf106a212014-06-20 05:02:3759 // Returns true if the printer was set.
kmadhusu@chromium.org987e51f2011-05-04 21:10:1560 bool SetPrinter(const std::string& device_name);
kmadhusu@chromium.org36fbeee22011-03-23 16:35:1261
Daniel Hosseinian3553e272021-04-24 00:51:1862 // Updates `print_info_` page format with paper selected by user. If paper was
vitalybuka@chromium.orgf106a212014-06-20 05:02:3763 // not selected, default system paper is used.
64 // Returns true if the paper was set.
kmadhusu@chromium.org4ed1df62011-11-02 02:32:5765 bool UpdatePageFormatWithPaperInfo();
66
Daniel Hosseinian3553e272021-04-24 00:51:1867 // Updates `print_info_` page format with `paper`.
vitalybuka@chromium.orgf106a212014-06-20 05:02:3768 // Returns true if the paper was set.
69 bool UpdatePageFormatWithPaper(PMPaper paper, PMPageFormat page_format);
70
kmadhusu@chromium.org97c295752011-11-17 00:44:3771 // 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 Hosseinian3553e272021-04-24 00:51:1875 // Sets `copies` in PMPrintSettings.
kmadhusu@chromium.orgc97e5e82011-04-05 18:50:2376 // Returns true if the number of copies is set.
77 bool SetCopiesInPrintSettings(int copies);
78
Daniel Hosseinian3553e272021-04-24 00:51:1879 // Sets `collate` in PMPrintSettings.
80 // Returns true if `collate` is set.
kmadhusu@chromium.orgc97e5e82011-04-05 18:50:2381 bool SetCollateInPrintSettings(bool collate);
82
kmadhusu@chromium.orgd2034862011-04-05 20:03:3183 // Sets orientation in native print info object.
84 // Returns true if the orientation was set.
85 bool SetOrientationIsLandscape(bool landscape);
86
kmadhusu@chromium.org770f9062011-04-07 16:22:1387 // Sets duplex mode in PMPrintSettings.
88 // Returns true if duplex mode is set.
Julie Jeongeun Kime454f2602020-04-30 05:20:0789 bool SetDuplexModeInPrintSettings(mojom::DuplexMode mode);
kmadhusu@chromium.org770f9062011-04-07 16:22:1390
kmadhusu@chromium.orgc7b3c632011-04-12 19:36:1991 // Sets output color mode in PMPrintSettings.
92 // Returns true if color mode is set.
kmadhusu@chromium.orgf3256b0d82011-09-04 23:36:2993 bool SetOutputColor(int color_mode);
kmadhusu@chromium.orgc7b3c632011-04-12 19:36:1994
Daniel Hosseinian6f8afc062020-10-08 02:34:5095 // Sets resolution in PMPrintSettings.
96 // Returns true if resolution is set.
97 bool SetResolution(const gfx::Size& dpi_size);
98
Daniel Hosseinianfb7f5d62021-05-19 21:46:5599 // Sets key-value pair in PMPrintSettings.
100 // Returns true is the pair is set.
Helmut Januschkac1f3afcc2024-02-08 22:06:37101 bool SetKeyValue(std::string_view key, std::string_view value);
Daniel Hosseinianfb7f5d62021-05-19 21:46:55102
Alan Screen46d031eb2022-01-05 23:15:29103 // Starts a new page.
104 mojom::ResultCode NewPage();
105
106 // Closes the printed page.
107 mojom::ResultCode PageDone();
108
jhawkins@chromium.org51e8d932010-10-06 22:21:17109 // The native print info object.
Avi Drissman6a4828b2023-06-05 20:52:00110 NSPrintInfo* __strong print_info_;
jhawkins@chromium.org51e8d932010-10-06 22:21:17111
112 // The current page's context; only valid between NewPage and PageDone call
113 // pairs.
mikt39c58102023-05-31 09:47:48114 // This field is not a raw_ptr<> because it was filtered by the rewriter
115 // for: #addr-of
Avi Drissman6a4828b2023-06-05 20:52:00116 RAW_PTR_EXCLUSION CGContextRef context_ = nullptr;
jhawkins@chromium.org51e8d932010-10-06 22:21:17117};
118
119} // namespace printing
120
121#endif // PRINTING_PRINTING_CONTEXT_MAC_H_