git-svn-id: https://pdfsharp.svn.codeplex.com/svn@39620 56d0cb2f-6006-4f69-a5a2-94740...
[pdfsharp:pdfsharp.git] / PDFsharp / code / PdfSharp / PdfSharp.Drawing / XSolidBrush.cs
1 #region PDFsharp - A .NET library for processing PDF\r
2 //\r
3 // Authors:\r
4 //   Stefan Lange (mailto:Stefan.Lange@pdfsharp.com)\r
5 //\r
6 // Copyright (c) 2005-2009 empira Software GmbH, Cologne (Germany)\r
7 //\r
8 // http://www.pdfsharp.com\r
9 // http://sourceforge.net/projects/pdfsharp\r
10 //\r
11 // Permission is hereby granted, free of charge, to any person obtaining a\r
12 // copy of this software and associated documentation files (the "Software"),\r
13 // to deal in the Software without restriction, including without limitation\r
14 // the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
15 // and/or sell copies of the Software, and to permit persons to whom the\r
16 // Software is furnished to do so, subject to the following conditions:\r
17 //\r
18 // The above copyright notice and this permission notice shall be included\r
19 // in all copies or substantial portions of the Software.\r
20 //\r
21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
22 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
23 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\r
24 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
25 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\r
26 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER \r
27 // DEALINGS IN THE SOFTWARE.\r
28 #endregion\r
29 \r
30 using System;\r
31 using System.Diagnostics;\r
32 using System.IO;\r
33 #if GDI\r
34 using System.Drawing;\r
35 #endif\r
36 #if WPF\r
37 using System.Windows;\r
38 using System.Windows.Media;\r
39 #endif\r
40 using PdfSharp.Internal;\r
41 \r
42 namespace PdfSharp.Drawing\r
43 {\r
44   /// <summary>\r
45   /// Defines a single color object used to fill shapes and draw text.\r
46   /// </summary>\r
47   public class XSolidBrush : XBrush\r
48   {\r
49     /// <summary>\r
50     /// Initializes a new instance of the <see cref="XSolidBrush"/> class.\r
51     /// </summary>\r
52     public XSolidBrush()\r
53     {\r
54     }\r
55 \r
56     /// <summary>\r
57     /// Initializes a new instance of the <see cref="XSolidBrush"/> class.\r
58     /// </summary>\r
59     public XSolidBrush(XColor color)\r
60       : this(color, false)\r
61     {\r
62     }\r
63 \r
64     internal XSolidBrush(XColor color, bool immutable)\r
65     {\r
66       this.color = color;\r
67       this.immutable = immutable;\r
68     }\r
69 \r
70     /// <summary>\r
71     /// Initializes a new instance of the <see cref="XSolidBrush"/> class.\r
72     /// </summary>\r
73     public XSolidBrush(XSolidBrush brush)\r
74     {\r
75       this.color = brush.Color;\r
76     }\r
77 \r
78     /// <summary>\r
79     /// Gets or sets the color of this brush.\r
80     /// </summary>\r
81     public XColor Color\r
82     {\r
83       get { return this.color; }\r
84       set\r
85       {\r
86         if (this.immutable)\r
87           throw new ArgumentException(PSSR.CannotChangeImmutableObject("XSolidBrush"));\r
88         this.color = value;\r
89 #if GDI\r
90         this.gdiDirty = this.gdiDirty || this.color != value;\r
91 #endif\r
92 #if WPF\r
93         this.wpfDirty = this.wpfDirty || this.color != value;\r
94 #endif\r
95 #if GDI && WPF\r
96         this.gdiDirty = this.wpfDirty = true;\r
97 #endif\r
98       }\r
99     }\r
100     internal XColor color;\r
101 \r
102 #if GDI\r
103     internal override System.Drawing.Brush RealizeGdiBrush()\r
104     {\r
105       if (this.gdiDirty)\r
106       {\r
107         if (this.gdiBrush == null)\r
108           this.gdiBrush = new SolidBrush(this.color.ToGdiColor());\r
109         else\r
110           this.gdiBrush.Color = this.color.ToGdiColor();\r
111         this.gdiDirty = false;\r
112       }\r
113 \r
114 #if DEBUG\r
115       System.Drawing.Color clr = this.color.ToGdiColor();\r
116       SolidBrush brush1 = new SolidBrush(clr);\r
117       Debug.Assert(this.gdiBrush.Color == brush1.Color);\r
118 #endif\r
119       return this.gdiBrush;\r
120     }\r
121 #endif\r
122 \r
123 #if WPF\r
124     internal override System.Windows.Media.Brush RealizeWpfBrush()\r
125     {\r
126       if (this.wpfDirty)\r
127       {\r
128         if (this.wpfBrush == null)\r
129           this.wpfBrush = new SolidColorBrush(this.color.ToWpfColor());\r
130         else\r
131           this.wpfBrush.Color = this.color.ToWpfColor();\r
132         this.wpfDirty = false;\r
133       }\r
134 \r
135 #if DEBUG_\r
136       System.Windows.Media.Color clr = this.color.ToWpfColor();\r
137       System.Windows.Media.SolidColorBrush brush1 = new System.Windows.Media.SolidColorBrush(clr); //System.Drawing.Color.FromArgb(128, 128, 0, 0));\r
138       Debug.Assert(this.wpfBrush.Color == brush1.Color);  // Crashes during unit testing\r
139 #endif\r
140       return this.wpfBrush;\r
141     }\r
142 #endif\r
143 \r
144 #if GDI\r
145     bool gdiDirty = true;\r
146     SolidBrush gdiBrush;\r
147 #endif\r
148 #if WPF\r
149     bool wpfDirty = true;\r
150     SolidColorBrush wpfBrush;\r
151 #endif\r
152     bool immutable;\r
153   }\r
154 }