Free cookie consent management tool by TermsFeed Policy Generator

source: branches/HeuristicLab.Problems.GrammaticalOptimization/SharpVectorModel/Paint/SvgPaint.cs @ 13067

Last change on this file since 13067 was 12762, checked in by aballeit, 9 years ago

#2283 GUI updates, Tree-chart, MCTS Version 2 (prune leaves)

File size: 7.7 KB
Line 
1using System;
2
3using SharpVectors.Dom.Css;
4
5namespace SharpVectors.Dom.Svg
6{
7    public class SvgPaint : SvgColor, ISvgPaint
8    {
9        #region Private Fields
10
11        private string _uri;
12        private SvgPaintType _paintType;
13
14        #endregion
15
16        #region Constructors and Destructor
17
18        public SvgPaint(string str)
19            : base()
20        {
21            _uri = String.Empty;
22            ParsePaint(str);
23        }
24
25        #endregion
26
27        #region Private methods
28
29        private void ParsePaint(string str)
30        {
31            bool hasUri = false;
32            bool hasRgb = false;
33            bool hasIcc = false;
34            bool hasNone = false;
35            bool hasCurrentColor = false;
36
37            str = str.Trim();
38
39            if (str.StartsWith("url("))
40            {
41                hasUri = true;
42                int endUri = str.IndexOf(")");
43                _uri = str.Substring(4, endUri - 4);
44                str = str.Substring(endUri + 1).Trim();
45            }
46
47            if (str.Equals("currentColor"))
48            {
49                base.ParseColor(str);
50                hasCurrentColor = true;
51            }
52            else if (str.Equals("none"))
53            {
54                hasNone = true;
55            }
56            else if (str.Length > 0)
57            {
58                base.ParseColor(str);
59                hasRgb = true;
60                hasIcc = (base.ColorType == SvgColorType.RgbColorIccColor);
61            }
62
63            SetPaintType(hasUri, hasRgb, hasIcc, hasNone, hasCurrentColor);
64        }
65
66        private void SetPaintType(bool hasUri, bool hasRgb, bool hasIcc,
67            bool hasNone, bool hasCurrentColor)
68        {
69            if (hasUri)
70            {
71                if (hasRgb)
72                {
73                    if (hasIcc)
74                    {
75                        _paintType = SvgPaintType.UriRgbColorIccColor;
76                    }
77                    else
78                    {
79                        _paintType = SvgPaintType.UriRgbColor;
80                    }
81                }
82                else if (hasNone)
83                {
84                    _paintType = SvgPaintType.UriNone;
85                }
86                else if (hasCurrentColor)
87                {
88                    _paintType = SvgPaintType.UriCurrentColor;
89                }
90                else
91                {
92                    _paintType = SvgPaintType.Uri;
93                }
94            }
95            else
96            {
97                if (hasRgb)
98                {
99                    if (hasIcc)
100                    {
101                        _paintType = SvgPaintType.RgbColorIccColor;
102                    }
103                    else
104                    {
105                        _paintType = SvgPaintType.RgbColor;
106                    }
107                }
108                else if (hasNone)
109                {
110                    _paintType = SvgPaintType.None;
111                }
112                else if (hasCurrentColor)
113                {
114                    _paintType = SvgPaintType.CurrentColor;
115                }
116                else
117                {
118                    _paintType = SvgPaintType.Unknown;
119                }
120            }
121        }
122
123        #endregion
124
125        #region ISvgPaint Members
126
127        public override string CssText
128        {
129            get
130            {
131                string cssText;
132                switch (_paintType)
133                {
134                    case SvgPaintType.CurrentColor:
135                    case SvgPaintType.RgbColor:
136                    case SvgPaintType.RgbColorIccColor:
137                        cssText = base.CssText;
138                        break;
139                    case SvgPaintType.None:
140                        cssText = "none";
141                        break;
142                    case SvgPaintType.UriNone:
143                        cssText = "url(" + _uri + ") none";
144                        break;
145                    case SvgPaintType.Uri:
146                        cssText = "url(" + _uri + ")";
147                        break;
148                    case SvgPaintType.UriCurrentColor:
149                    case SvgPaintType.UriRgbColor:
150                    case SvgPaintType.UriRgbColorIccColor:
151                        cssText = "url(" + _uri + ") " + base.CssText;
152                        break;
153                    default:
154                        cssText = String.Empty;
155                        break;
156                }
157                return cssText;
158            }
159            set
160            {
161                ParsePaint(value);
162            }
163        }
164
165        public SvgPaintType PaintType
166        {
167            get
168            {
169                return _paintType;
170            }
171        }
172       
173        public string Uri
174        {
175            get
176            {
177                return _uri;
178            }
179        }
180
181        public void SetUri(string uri)
182        {
183            _paintType = SvgPaintType.Uri;
184            _uri = uri;
185        }
186
187        public void SetPaint(SvgPaintType paintType, string uri, string rgbColor, string iccColor)
188        {
189            _paintType = paintType;
190
191            // check URI
192            switch (_paintType)
193            {
194                case SvgPaintType.Uri:
195                case SvgPaintType.UriCurrentColor:
196                case SvgPaintType.UriNone:
197                case SvgPaintType.UriRgbColor:
198                case SvgPaintType.UriRgbColorIccColor:
199                    if (uri == null)
200                    {
201                        throw new SvgException(SvgExceptionType.SvgInvalidValueErr, "Missing URI");
202                    }
203                    else
204                    {
205                        _uri = uri;
206
207                    }
208                    break;
209                default:
210                    if (uri != null)
211                    {
212                        throw new SvgException(SvgExceptionType.SvgInvalidValueErr, "URI must be null");
213                    }
214                    break;
215            }
216
217            // check RGB and ICC color
218            switch (_paintType)
219            {
220                case SvgPaintType.CurrentColor:
221                case SvgPaintType.UriCurrentColor:
222                    base.ParseColor("currentColor");
223                    break;
224                case SvgPaintType.RgbColor:
225                case SvgPaintType.UriRgbColor:
226                    if (rgbColor != null && rgbColor.Length > 0)
227                    {
228                        base.SetRgbColor(rgbColor);
229                    }
230                    else
231                    {
232                        throw new SvgException(SvgExceptionType.SvgInvalidValueErr, "Missing RGB color");
233                    }
234                    break;
235                case SvgPaintType.RgbColorIccColor:
236                case SvgPaintType.UriRgbColorIccColor:
237                    if (rgbColor != null && rgbColor.Length > 0 &&
238                        iccColor != null && iccColor.Length > 0)
239                    {
240                        base.SetRgbColorIccColor(rgbColor, iccColor);
241                    }
242                    else
243                    {
244                        throw new SvgException(SvgExceptionType.SvgInvalidValueErr, "Missing RGB or ICC color");
245                    }
246                    break;
247                default:
248                    if (rgbColor != null)
249                    {
250                        throw new SvgException(SvgExceptionType.SvgInvalidValueErr, "rgbColor must be null");
251                    }
252                    break;
253            }
254        }
255
256        #endregion
257    }
258}
Note: See TracBrowser for help on using the repository browser.