1
2
3
4
5
6 using System;
7 using System.Collections;
8
9 namespace System.Windows
10 {
11 public class Color
12 {
13 public Color() : alpha(255u), red(0u), green(0u), blue(0u)
14 {
15 }
16 public Color(byte alpha_, byte red_, byte green_, byte blue_) : alpha(alpha_), red(red_), green(green_), blue(blue_)
17 {
18 }
19 public Color(byte red_, byte green_, byte blue_) : alpha(255u), red(red_), green(green_), blue(blue_)
20 {
21 }
22 public Color(uint value) : alpha(cast<byte>(value >> 24u)), red(cast<byte>(value >> 16u)), green(cast<byte>(value >> 8u)), blue(cast<byte>(value))
23 {
24 }
25 public uint ToUInt() const
26 {
27 return (cast<uint>(alpha) << 24u) | (cast<uint>(red) << 16u) | (cast<uint>(green) << 8u) | (cast<uint>(blue));
28 }
29 public Color ToGray(const Color& transparentColor) const
30 {
31 if (*this == transparentColor) return *this;
32 byte g = cast<byte>((cast<int>(red) + cast<int>(green) + cast<int>(blue) + cast<int>(2) * 255u) / 5);
33 return Color(alpha, g, g, g);
34 }
35 public Color ToGray() const
36 {
37 return ToGray(Color(0u, 255u, 255u, 255u));
38 }
39 public string ToString() const
40 {
41 string s = System.ToString(alpha);
42 s.Append('.').Append(System.ToString(red)).Append('.').Append(System.ToString(green)).Append('.').Append(System.ToString(blue));
43 return s;
44 }
45 public static Color AliceBlue()
46 {
47 return Color(240u, 248u, 255u);
48 }
49 public static Color AntiqueWhite()
50 {
51 return Color(250u, 235u, 215u);
52 }
53 public static Color Aqua()
54 {
55 return Color(0u, 255u, 255u);
56 }
57 public static Color Aquamarine()
58 {
59 return Color(127u, 255u, 212u);
60 }
61 public static Color Azure()
62 {
63 return Color(240u, 255u, 255u);
64 }
65 public static Color Beige()
66 {
67 return Color(245u, 245u, 220u);
68 }
69 public static Color Bisque()
70 {
71 return Color(255u, 228u, 196u);
72 }
73 public static Color Black()
74 {
75 return Color(0u, 0u, 0u);
76 }
77 public static Color BlanchedAlmond()
78 {
79 return Color(255u, 235u, 205u);
80 }
81 public static Color Blue()
82 {
83 return Color(0u, 0u, 255u);
84 }
85 public static Color BlueViolet()
86 {
87 return Color(138u, 43u, 226u);
88 }
89 public static Color Brown()
90 {
91 return Color(165u, 42u, 42u);
92 }
93 public static Color BurlyWood()
94 {
95 return Color(222u, 184u, 135u);
96 }
97 public static Color CadetBlue()
98 {
99 return Color(95u, 158u, 160u);
100 }
101 public static Color Chartreuse()
102 {
103 return Color(127u, 255u, 0u);
104 }
105 public static Color Chocolate()
106 {
107 return Color(210u, 105u, 30u);
108 }
109 public static Color Coral()
110 {
111 return Color(255u, 127u, 80u);
112 }
113 public static Color CornflowerBlue()
114 {
115 return Color(100u, 149u, 237u);
116 }
117 public static Color Cornsilk()
118 {
119 return Color(255u, 248u, 220u);
120 }
121 public static Color Crimson()
122 {
123 return Color(220u, 20u, 60u);
124 }
125 public static Color Cyan()
126 {
127 return Color(0u, 255u, 255u);
128 }
129 public static Color DarkBlue()
130 {
131 return Color(0u, 0u, 139u);
132 }
133 public static Color DarkCyan()
134 {
135 return Color(0u, 139u, 139u);
136 }
137 public static Color DarkGoldenrod()
138 {
139 return Color(184u, 134u, 11u);
140 }
141 public static Color DarkGray()
142 {
143 return Color(169u, 169u, 169u);
144 }
145 public static Color DarkGreen()
146 {
147 return Color(0u, 100u, 0u);
148 }
149 public static Color DarkKhaki()
150 {
151 return Color(189u, 183u, 107u);
152 }
153 public static Color DarkMagenta()
154 {
155 return Color(139u, 0u, 139u);
156 }
157 public static Color DarkOliveGreen()
158 {
159 return Color(85u, 107u, 47u);
160 }
161 public static Color DarkOrange()
162 {
163 return Color(255u, 140u, 0u);
164 }
165 public static Color DarkOrchid()
166 {
167 return Color(153u, 50u, 204u);
168 }
169 public static Color DarkRed()
170 {
171 return Color(139u, 0u, 0u);
172 }
173 public static Color DarkSalmon()
174 {
175 return Color(233u, 150u, 122u);
176 }
177 public static Color DarkSeaGreen()
178 {
179 return Color(143u, 188u, 139u);
180 }
181 public static Color DarkSlateBlue()
182 {
183 return Color(72u, 61u, 139u);
184 }
185 public static Color DarkSlateGray()
186 {
187 return Color(47u, 79u, 79u);
188 }
189 public static Color DarkTurquoise()
190 {
191 return Color(0u, 206u, 209u);
192 }
193 public static Color DarkViolet()
194 {
195 return Color(148u, 0u, 211u);
196 }
197 public static Color DeepPink()
198 {
199 return Color(255u, 20u, 147u);
200 }
201 public static Color DeepSkyBlue()
202 {
203 return Color(0u, 191u, 255u);
204 }
205 public static Color DimGray()
206 {
207 return Color(105u, 105u, 105u);
208 }
209 public static Color DodgerBlue()
210 {
211 return Color(30u, 144u, 255u);
212 }
213 public static Color Firebrick()
214 {
215 return Color(178u, 34u, 34u);
216 }
217 public static Color FloralWhite()
218 {
219 return Color(255u, 250u, 240u);
220 }
221 public static Color ForestGreen()
222 {
223 return Color(34u, 139u, 34u);
224 }
225 public static Color Fuchsia()
226 {
227 return Color(255u, 0u, 255u);
228 }
229 public static Color Gainsboro()
230 {
231 return Color(220u, 220u, 220u);
232 }
233 public static Color GhostWhite()
234 {
235 return Color(248u, 248u, 255u);
236 }
237 public static Color Gold()
238 {
239 return Color(255u, 215u, 0u);
240 }
241 public static Color Goldenrod()
242 {
243 return Color(218u, 165u, 32u);
244 }
245 public static Color Gray()
246 {
247 return Color(128u, 128u, 128u);
248 }
249 public static Color Green()
250 {
251 return Color(0u, 128u, 0u);
252 }
253 public static Color GreenYellow()
254 {
255 return Color(173u, 255u, 47u);
256 }
257 public static Color Honeydew()
258 {
259 return Color(240u, 255u, 240u);
260 }
261 public static Color HotPink()
262 {
263 return Color(255u, 105u, 180u);
264 }
265 public static Color IndianRed()
266 {
267 return Color(205u, 92u, 92u);
268 }
269 public static Color Indigo()
270 {
271 return Color(75u, 0u, 130u);
272 }
273 public static Color Ivory()
274 {
275 return Color(255u, 255u, 240u);
276 }
277 public static Color Khaki()
278 {
279 return Color(240u, 230u, 140u);
280 }
281 public static Color Lavender()
282 {
283 return Color(230u, 230u, 250u);
284 }
285 public static Color LavenderBlush()
286 {
287 return Color(255u, 240u, 245u);
288 }
289 public static Color LawnGreen()
290 {
291 return Color(124u, 252u, 0u);
292 }
293 public static Color LemonChiffon()
294 {
295 return Color(255u, 250u, 205u);
296 }
297 public static Color LightBlue()
298 {
299 return Color(173u, 216u, 230u);
300 }
301 public static Color LightCoral()
302 {
303 return Color(240u, 128u, 128u);
304 }
305 public static Color LightCyan()
306 {
307 return Color(224u, 255u, 255u);
308 }
309 public static Color LightGoldenrodYellow()
310 {
311 return Color(250u, 250u, 210u);
312 }
313 public static Color LightGray()
314 {
315 return Color(211u, 211u, 211u);
316 }
317 public static Color LightGreen()
318 {
319 return Color(144u, 238u, 144u);
320 }
321 public static Color LightPink()
322 {
323 return Color(255u, 182u, 193u);
324 }
325 public static Color LightSalmon()
326 {
327 return Color(255u, 160u, 122u);
328 }
329 public static Color LightSeaGreen()
330 {
331 return Color(32u, 178u, 170u);
332 }
333 public static Color LightSkyBlue()
334 {
335 return Color(135u, 206u, 250u);
336 }
337 public static Color LightSlateGray()
338 {
339 return Color(119u, 136u, 153u);
340 }
341 public static Color LightSteelBlue()
342 {
343 return Color(176u, 196u, 222u);
344 }
345 public static Color LightYellow()
346 {
347 return Color(255u, 255u, 224u);
348 }
349 public static Color Lime()
350 {
351 return Color(0u, 255u, 0u);
352 }
353 public static Color LimeGreen()
354 {
355 return Color(50u, 205u, 50u);
356 }
357 public static Color Linen()
358 {
359 return Color(250u, 240u, 230u);
360 }
361 public static Color Magenta()
362 {
363 return Color(255u, 0u, 255u);
364 }
365 public static Color Maroon()
366 {
367 return Color(128u, 0u, 0u);
368 }
369 public static Color MediumAquamarine()
370 {
371 return Color(102u, 205u, 170u);
372 }
373 public static Color MediumBlue()
374 {
375 return Color(0u, 0u, 205u);
376 }
377 public static Color MediumOrchid()
378 {
379 return Color(186u, 85u, 211u);
380 }
381 public static Color MediumPurple()
382 {
383 return Color(147u, 112u, 219u);
384 }
385 public static Color MediumSeaGreen()
386 {
387 return Color(60u, 179u, 113u);
388 }
389 public static Color MediumSlateBlue()
390 {
391 return Color(123u, 104u, 238u);
392 }
393 public static Color MediumSpringGreen()
394 {
395 return Color(0u, 250u, 154u);
396 }
397 public static Color MediumTurquoise()
398 {
399 return Color(72u, 209u, 204u);
400 }
401 public static Color MediumVioletRed()
402 {
403 return Color(199u, 21u, 133u);
404 }
405 public static Color MidnightBlue()
406 {
407 return Color(25u, 25u, 112u);
408 }
409 public static Color MintCream()
410 {
411 return Color(245u, 255u, 250u);
412 }
413 public static Color MistyRose()
414 {
415 return Color(255u, 228u, 225u);
416 }
417 public static Color Moccasin()
418 {
419 return Color(255u, 228u, 181u);
420 }
421 public static Color NavajoWhite()
422 {
423 return Color(255u, 222u, 173u);
424 }
425 public static Color Navy()
426 {
427 return Color(0u, 0u, 128u);
428 }
429 public static Color OldLace()
430 {
431 return Color(253u, 245u, 230u);
432 }
433 public static Color Olive()
434 {
435 return Color(128u, 128u, 0u);
436 }
437 public static Color OliveDrab()
438 {
439 return Color(107u, 142u, 35u);
440 }
441 public static Color Orange()
442 {
443 return Color(255u, 165u, 0u);
444 }
445 public static Color OrangeRed()
446 {
447 return Color(255u, 69u, 0u);
448 }
449 public static Color Orchid()
450 {
451 return Color(218u, 112u, 214u);
452 }
453 public static Color PaleGoldenrod()
454 {
455 return Color(238u, 232u, 170u);
456 }
457 public static Color PaleGreen()
458 {
459 return Color(152u, 251u, 152u);
460 }
461 public static Color PaleTurquoise()
462 {
463 return Color(175u, 238u, 238u);
464 }
465 public static Color PaleVioletRed()
466 {
467 return Color(219u, 112u, 147u);
468 }
469 public static Color PapayaWhip()
470 {
471 return Color(255u, 239u, 213u);
472 }
473 public static Color PeachPuff()
474 {
475 return Color(255u, 218u, 185u);
476 }
477 public static Color Peru()
478 {
479 return Color(205u, 133u, 63u);
480 }
481 public static Color Pink()
482 {
483 return Color(255u, 192u, 203u);
484 }
485 public static Color Plum()
486 {
487 return Color(221u, 160u, 221u);
488 }
489 public static Color PowderBlue()
490 {
491 return Color(176u, 224u, 230u);
492 }
493 public static Color Purple()
494 {
495 return Color(128u, 0u, 128u);
496 }
497 public static Color Red()
498 {
499 return Color(255u, 0u, 0u);
500 }
501 public static Color RosyBrown()
502 {
503 return Color(188u, 143u, 143u);
504 }
505 public static Color RoyalBlue()
506 {
507 return Color(65u, 105u, 225u);
508 }
509 public static Color SaddleBrown()
510 {
511 return Color(139u, 69u, 19u);
512 }
513 public static Color Salmon()
514 {
515 return Color(250u, 128u, 114u);
516 }
517 public static Color SandyBrown()
518 {
519 return Color(244u, 164u, 96u);
520 }
521 public static Color SeaGreen()
522 {
523 return Color(46u, 139u, 87u);
524 }
525 public static Color SeaShell()
526 {
527 return Color(255u, 245u, 238u);
528 }
529 public static Color Sienna()
530 {
531 return Color(160u, 82u, 45u);
532 }
533 public static Color Silver()
534 {
535 return Color(192u, 192u, 192u);
536 }
537 public static Color SkyBlue()
538 {
539 return Color(135u, 206u, 235u);
540 }
541 public static Color SlateBlue()
542 {
543 return Color(106u, 90u, 205u);
544 }
545 public static Color SlateGray()
546 {
547 return Color(112u, 128u, 144u);
548 }
549 public static Color Snow()
550 {
551 return Color(255u, 250u, 250u);
552 }
553 public static Color SpringGreen()
554 {
555 return Color(0u, 255u, 127u);
556 }
557 public static Color SteelBlue()
558 {
559 return Color(70u, 130u, 180u);
560 }
561 public static Color Tan()
562 {
563 return Color(210u, 180u, 140u);
564 }
565 public static Color Teal()
566 {
567 return Color(0u, 128u, 128u);
568 }
569 public static Color Thistle()
570 {
571 return Color(216u, 191u, 216u);
572 }
573 public static Color Tomato()
574 {
575 return Color(255u, 99u, 71u);
576 }
577 public static Color Transparent()
578 {
579 return Color(0u, 255u, 255u, 255u);
580 }
581 public static Color Turquoise()
582 {
583 return Color(64u, 224u, 208u);
584 }
585 public static Color Violet()
586 {
587 return Color(238u, 130u, 238u);
588 }
589 public static Color Wheat()
590 {
591 return Color(245u, 222u, 179u);
592 }
593 public static Color White()
594 {
595 return Color(255u, 255u, 255u);
596 }
597 public static Color WhiteSmoke()
598 {
599 return Color(245u, 245u, 245u);
600 }
601 public static Color Yellow()
602 {
603 return Color(255u, 255u, 0u);
604 }
605 public static Color YellowGreen()
606 {
607 return Color(154u, 205u, 50u);
608 }
609 public static Color DefaultBitmapTransparent()
610 {
611 return Color(0u, 128u, 128u);
612 }
613 public byte alpha;
614 public byte red;
615 public byte green;
616 public byte blue;
617 }
618
619 public bool operator==(const Color& left, const Color& right)
620 {
621 return left.alpha == right.alpha && left.red == right.red && left.green == right.green && left.blue == right.blue;
622 }
623
624 public ulong GetHashCode(const Color& color)
625 {
626 return (cast<ulong>(color.alpha) << (8u * 3u)) | (cast<ulong>(color.red) << (8u * 2u)) | (cast<ulong>(color.green) << (8u * 1u)) | cast<ulong>(color.blue);
627 }
628
629 [nodiscard]
630 public Result<Color> ParseColor(const string& s)
631 {
632 Color color;
633 List<string> components = s.Split('.');
634 if (components.Count() == 4)
635 {
636 auto alphaResult = ParseInt(components[0]);
637 if (alphaResult.Error())
638 {
639 return Result<Color>(ErrorId(alphaResult.GetErrorId()));
640 }
641 color.alpha = cast<byte>(alphaResult.Value());
642 auto redResult = ParseInt(components[1]);
643 if (redResult.Error())
644 {
645 return Result<Color>(ErrorId(redResult.GetErrorId()));
646 }
647 color.red = cast<byte>(redResult.Value());
648 auto greenResult = ParseInt(components[2]);
649 if (greenResult.Error())
650 {
651 return Result<Color>(ErrorId(greenResult.GetErrorId()));
652 }
653 color.green = cast<byte>(greenResult.Value());
654 auto blueResult = ParseInt(components[3]);
655 if (blueResult.Error())
656 {
657 return Result<Color>(ErrorId(blueResult.GetErrorId()));
658 }
659 color.blue = cast<byte>(blueResult.Value());
660 }
661 else
662 {
663 int errorId = AllocateError("could not parse color from string \'" + s + "\'");
664 return Result<Color>(ErrorId(errorId));
665 }
666 return Result<Color>(color);
667 }
668
669 public Color GetSystemColor(SystemColor color)
670 {
671 byte red;
672 byte green;
673 byte blue;
674 WinGetSysColor(cast<int>(color), red, green, blue);
675 return Color(red, green, blue);
676 }
677
678 public System.Windows.Color GetColor(System.Color.Constant consoleColor)
679 {
680 switch (consoleColor)
681 {
682 case System.Color.Constant.black:
683 {
684 return System.Windows.Color(12u, 12u, 12u);
685 }
686 case System.Color.Constant.darkRed:
687 {
688 return System.Windows.Color(197u, 15u, 31u);
689 }
690 case System.Color.Constant.darkGreen:
691 {
692 return System.Windows.Color(19u, 161u, 14u);
693 }
694 case System.Color.Constant.darkYellow:
695 {
696 return System.Windows.Color(193u, 156u, 0u);
697 }
698 case System.Color.Constant.darkBlue:
699 {
700 return System.Windows.Color(0u, 55u, 218u);
701 }
702 case System.Color.Constant.darkGray:
703 {
704 return System.Windows.Color(169u, 169u, 169u);
705 }
706 case System.Color.Constant.darkCyan:
707 {
708 return System.Windows.Color(58u, 150u, 221u);
709 }
710 case System.Color.Constant.gray:
711 {
712 return System.Windows.Color(204u, 204u, 204u);
713 }
714 case System.Color.Constant.red:
715 {
716 return System.Windows.Color(231u, 72u, 86u);
717 }
718 case System.Color.Constant.green:
719 {
720 return System.Windows.Color(22u, 198u, 12u);
721 }
722 case System.Color.Constant.yellow:
723 {
724 return System.Windows.Color(249u, 241u, 165u);
725 }
726 case System.Color.Constant.blue:
727 {
728 return System.Windows.Color(59u, 120u, 255u);
729 }
730 case System.Color.Constant.magenta:
731 {
732 return System.Windows.Color(180u, 0u, 158u);
733 }
734 case System.Color.Constant.cyan:
735 {
736 return System.Windows.Color(97u, 214u, 214u);
737 }
738 case System.Color.Constant.white:
739 {
740 return System.Windows.Color(242u, 242u, 242u);
741 }
742 }
743 return System.Windows.Color.Black();
744 }