87ae446ec48d1150c34d1c03012d7ef3beb8a033
[mono.git] / mcs / class / System.Drawing / System.Drawing / StrokeFactory.jvm.cs
1 using System;\r
2 using awt = java.awt;\r
3 using geom = java.awt.geom;\r
4 \r
5 namespace System.Drawing {\r
6         internal sealed class StrokeFactory {\r
7 \r
8                 StrokeFactory() {}\r
9 \r
10                 interface StrokeCreator {\r
11                         awt.Stroke Create(float width, int cap, int join, float miterlimit,\r
12                                 float[] dash, float dash_phase, geom.AffineTransform penTransform,\r
13                                 geom.AffineTransform outputTransform, PenFit penFit);\r
14                 }\r
15 \r
16                 sealed class AdvancedCreator : StrokeCreator {\r
17                         #region StrokeCreator Members\r
18 \r
19                         public awt.Stroke Create(float width, int cap, int join, float miterlimit, float[] dash, float dash_phase, geom.AffineTransform penTransform,\r
20                                 geom.AffineTransform outputTransform, PenFit penFit) {\r
21                                 if ((outputTransform == null || outputTransform.isIdentity()) && (penFit == PenFit.NotThin))\r
22                                         return new awt.BasicStroke(width, cap, join, miterlimit, dash, dash_phase);\r
23                                 return new System.Drawing.AdvancedStroke(width, cap, join, miterlimit, dash, dash_phase, penTransform, outputTransform, penFit);\r
24                         }\r
25 \r
26                         #endregion\r
27                 }\r
28 \r
29                 sealed class DefaultCreator : StrokeCreator {\r
30                         #region StrokeCreator Members\r
31 \r
32                         public awt.Stroke Create(float width, int cap, int join, float miterlimit, float[] dash, float dash_phase, geom.AffineTransform penTransform,\r
33                                 geom.AffineTransform outputTransform, PenFit penFit) {\r
34                                 return new awt.BasicStroke(width, cap, join, miterlimit, dash, dash_phase);\r
35                         }\r
36 \r
37                         #endregion\r
38                 }\r
39 \r
40                 static readonly StrokeCreator Creator;\r
41                 static StrokeFactory() {\r
42                         try {\r
43                                 Type type = typeof(System.Drawing.AdvancedStroke);\r
44                                 Activator.CreateInstance(type);\r
45                                 Creator = new AdvancedCreator();\r
46                         }\r
47                         catch{\r
48                                 Creator = new DefaultCreator();\r
49                         }\r
50                 }\r
51 \r
52                 static public bool CanCreateAdvancedStroke {\r
53                         get {\r
54                                 return !(Creator is DefaultCreator);\r
55                         }\r
56                 }\r
57 \r
58                 static public awt.Stroke CreateStroke(float width, int cap, int join, float miterlimit,\r
59                         float[] dash, float dash_phase, geom.AffineTransform penTransform,\r
60                         geom.AffineTransform outputTransform, PenFit penFit) {\r
61 \r
62                         return Creator.Create(width, cap, join, miterlimit, dash, dash_phase, penTransform, outputTransform, penFit);\r
63                 }\r
64         }\r
65 }