2 // Copyright (C) 2005 Novell, Inc. http://www.novell.com
4 // Permission is hereby granted, free of charge, to any person obtaining
5 // a copy of this software and associated documentation files (the
6 // "Software"), to deal in the Software without restriction, including
7 // without limitation the rights to use, copy, modify, merge, publish,
8 // distribute, sublicense, and/or sell copies of the Software, and to
9 // permit persons to whom the Software is furnished to do so, subject to
10 // the following conditions:
12 // The above copyright notice and this permission notice shall be
13 // included in all copies or substantial portions of the Software.
15 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25 // Jordi Mas i Hernandez, jordimash@gmail.com
28 using System
.Runtime
.InteropServices
;
29 using System
.Collections
;
30 using System
.Drawing
.Printing
;
31 using System
.ComponentModel
;
32 using System
.Drawing
.Imaging
;
34 namespace System
.Drawing
.Printing
37 /// This class is designed to cache the values retrieved by the
38 /// native printing services, as opposed to GlobalPrintingServices, which
39 /// doesn't cache any values.
41 internal abstract class PrintingServices
44 internal abstract string DefaultPrinter { get; }
48 internal abstract bool IsPrinterValid(string printer
);
49 internal abstract void LoadPrinterSettings (string printer
, PrinterSettings settings
);
50 internal abstract void LoadPrinterResolutions (string printer
, PrinterSettings settings
);
53 internal abstract void GetPrintDialogInfo (string printer
, ref string port
, ref string type
, ref string status
, ref string comment
);
55 internal void LoadDefaultResolutions (PrinterSettings
.PrinterResolutionCollection col
)
57 col
.Add (new PrinterResolution ((int) PrinterResolutionKind
.High
, -1, PrinterResolutionKind
.High
));
58 col
.Add (new PrinterResolution ((int) PrinterResolutionKind
.Medium
, -1, PrinterResolutionKind
.Medium
));
59 col
.Add (new PrinterResolution ((int) PrinterResolutionKind
.Low
, -1, PrinterResolutionKind
.Low
));
60 col
.Add (new PrinterResolution ((int) PrinterResolutionKind
.Draft
, -1, PrinterResolutionKind
.Draft
));
65 internal abstract class GlobalPrintingServices
68 internal abstract PrinterSettings
.StringCollection InstalledPrinters { get; }
72 internal abstract IntPtr
CreateGraphicsContext (PrinterSettings settings
, PageSettings page_settings
);
74 internal abstract bool StartDoc (GraphicsPrinter gr
, string doc_name
, string output_file
);
75 internal abstract bool StartPage (GraphicsPrinter gr
);
76 internal abstract bool EndPage (GraphicsPrinter gr
);
77 internal abstract bool EndDoc (GraphicsPrinter gr
);
84 static GlobalPrintingServices global_printing_services
;
89 is_unix
= GDIPlus
.RunningOnUnix ();
92 internal static PrintingServices
CreatePrintingService () {
94 return new PrintingServicesUnix ();
95 return new PrintingServicesWin32 ();
98 internal static GlobalPrintingServices GlobalService
{
100 if (global_printing_services
== null) {
102 global_printing_services
= new GlobalPrintingServicesUnix ();
104 global_printing_services
= new GlobalPrintingServicesWin32 ();
107 return global_printing_services
;
111 internal static void GetPrintDialogInfo (string printer
, ref string port
, ref string type
, ref string status
, ref string comment
)
113 CreatePrintingService().GetPrintDialogInfo (printer
, ref port
, ref type
, ref status
, ref comment
);
116 internal class Printer
{
117 public readonly string Name
;
118 public readonly string Comment
;
119 public readonly string Port
;
120 public readonly string Type
;
121 public readonly string Status
;
122 public PrinterSettings Settings
;
123 public bool IsDefault
;
125 public Printer (string port
, string type
, string status
, string comment
) {
134 internal class GraphicsPrinter
136 private Graphics graphics
;
139 internal GraphicsPrinter (Graphics gr
, IntPtr dc
)
145 internal Graphics Graphics
{
146 get { return graphics; }
147 set { graphics = value; }
149 internal IntPtr Hdc { get { return hDC; }}