2 using awt = java.awt;
\r
3 using geom = java.awt.geom;
\r
5 namespace System.Drawing {
\r
6 internal sealed class StrokeFactory {
\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
16 sealed class AdvancedCreator : StrokeCreator {
\r
17 #region StrokeCreator Members
\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
31 sealed class DefaultCreator : StrokeCreator {
\r
32 #region StrokeCreator Members
\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
42 static readonly StrokeCreator Creator;
\r
43 static StrokeFactory() {
\r
45 Type type = typeof(System.Drawing.AdvancedStroke);
\r
46 Activator.CreateInstance(type);
\r
47 Creator = new AdvancedCreator();
\r
50 Creator = new DefaultCreator();
\r
54 static public bool CanCreateAdvancedStroke {
\r
56 return !(Creator is DefaultCreator);
\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
64 return Creator.Create(width, cap, join, miterlimit, dash, dash_phase, penTransform, outputTransform, penFit);
\r