In corlib/System.Runtime.InteropServices:
[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 ((penFit == PenFit.NotThin) &&\r
22                                         (outputTransform == null || outputTransform.isIdentity()) &&\r
23                                         (penTransform == null || penTransform.isIdentity()))\r
24                                         return new awt.BasicStroke(width, cap, join, miterlimit, dash, dash_phase);\r
25                                 return new System.Drawing.AdvancedStroke(width, cap, join, miterlimit, dash, dash_phase, penTransform, outputTransform, penFit);\r
26                         }\r
27 \r
28                         #endregion\r
29                 }\r
30 \r
31                 sealed class DefaultCreator : StrokeCreator {\r
32                         #region StrokeCreator Members\r
33 \r
34                         public awt.Stroke Create(float width, int cap, int join, float miterlimit, float[] dash, float dash_phase, geom.AffineTransform penTransform,\r
35                                 geom.AffineTransform outputTransform, PenFit penFit) {\r
36                                 return new awt.BasicStroke(width, cap, join, miterlimit, dash, dash_phase);\r
37                         }\r
38 \r
39                         #endregion\r
40                 }\r
41 \r
42                 static readonly StrokeCreator Creator;\r
43                 static StrokeFactory() {\r
44                         try {\r
45                                 Type type = typeof(System.Drawing.AdvancedStroke);\r
46                                 Activator.CreateInstance(type);\r
47                                 Creator = new AdvancedCreator();\r
48                         }\r
49                         catch{\r
50                                 Creator = new DefaultCreator();\r
51                         }\r
52                 }\r
53 \r
54                 static public bool CanCreateAdvancedStroke {\r
55                         get {\r
56                                 return !(Creator is DefaultCreator);\r
57                         }\r
58                 }\r
59 \r
60                 static public awt.Stroke CreateStroke(float width, int cap, int join, float miterlimit,\r
61                         float[] dash, float dash_phase, geom.AffineTransform penTransform,\r
62                         geom.AffineTransform outputTransform, PenFit penFit) {\r
63 \r
64                         return Creator.Create(width, cap, join, miterlimit, dash, dash_phase, penTransform, outputTransform, penFit);\r
65                 }\r
66         }\r
67 }