You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I'm in the process of migration from my home-brewed C# markup to Uno's C# markup. 99% of my home-brew version is redundant (or inferior) to Uno's C# markup. However, there is a small feature (that I use a lot) that I'd like to see if it would make sense to add to Uno's markup: Color/Brush conversions. The below examples are for the Shape.Fill() extension methods, but the concept would apply to Brush or Color property setters.
uint to Brush or Color conversion:
Since it's easy to specify a hex value as a uint in C#, create Brush or Color property setter extension methods that take a uint value:
where ColorExtensions.ColorFromString(string color) is:
publicstaticColorColorFromString(thisstrings){if(s.ToLower().StartsWith("rgb(",StringComparison.OrdinalIgnoreCase)){//var values = s.Substring(4, s.Length - 5).Split(',').Select(int.Parse).ToArray();varcomponents=s[4..^1].Split(',');if(components.Length!=3)thrownewFormatException($"Could not parse [{s}] into RGB integer components");varr=byte.Parse(components[0]);varg=byte.Parse(components[1]);varb=byte.Parse(components[2]);returnColor.FromArgb(1,r,g,b);}if(s.ToLower().StartsWith("rgba(",StringComparison.OrdinalIgnoreCase)){//var values = s.Substring(5, s.Length - 6).Split(',').Select(int.Parse).ToArray();varcomponents=s[5..^1].Split(',');if(components.Length!=4)thrownewFormatException($"Could not parse [{s}] into RGBA integer components");varr=byte.Parse(components[0]);varg=byte.Parse(components[1]);varb=byte.Parse(components[2]);vara=byte.Parse(components[3]);returnColor.FromArgb(a,r,g,b);}if(s.StartsWith("#",StringComparison.OrdinalIgnoreCase)){varcolor=ColorFromHex(s);returncolor;}varcolorName=s.ToLower();returncolorNameswitch{"aliceblue"=>ColorFromHex("F0F8FF"),"antiquewhite"=>ColorFromHex("FAEBD7"),"aqua"=>ColorFromHex("00FFFF"),"aquamarine"=>ColorFromHex("7FFFD4"),"azure"=>ColorFromHex("F0FFFF"),"beige"=>ColorFromHex("F5F5DC"),"bisque"=>ColorFromHex("FFE4C4"),"black"=>ColorFromHex("000000"),"blanchedalmond"=>ColorFromHex("FFEBCD"),"blue"=>ColorFromHex("0000FF"),"blueviolet"=>ColorFromHex("8A2BE2"),"brown"=>ColorFromHex("A52A2A"),"burlywood"=>ColorFromHex("DEB887"),"cadetblue"=>ColorFromHex("5F9EA0"),"chartreuse"=>ColorFromHex("7FFF00"),"chocolate"=>ColorFromHex("D2691E"),"coral"=>ColorFromHex("FF7F50"),"cornflowerblue"=>ColorFromHex("6495ED"),"cornsilk"=>ColorFromHex("FFF8DC"),"crimson"=>ColorFromHex("DC143C"),"cyan"=>ColorFromHex("00FFFF"),"darkblue"=>ColorFromHex("00008B"),"darkcyan"=>ColorFromHex("008B8B"),"darkgoldenrod"=>ColorFromHex("B8860B"),"darkgray"=>ColorFromHex("A9A9A9"),"darkgrey"=>ColorFromHex("A9A9A9"),"darkgreen"=>ColorFromHex("006400"),"darkkhaki"=>ColorFromHex("BDB76B"),"darkmagenta"=>ColorFromHex("8B008B"),"darkolivegreen"=>ColorFromHex("556B2F"),"darkorange"=>ColorFromHex("FF8C00"),"darkorchid"=>ColorFromHex("9932CC"),"darkred"=>ColorFromHex("8B0000"),"darksalmon"=>ColorFromHex("E9967A"),"darkseagreen"=>ColorFromHex("8FBC8F"),"darkslateblue"=>ColorFromHex("483D8B"),"darkslategray"=>ColorFromHex("2F4F4F"),"darkslategrey"=>ColorFromHex("2F4F4F"),"darkturquoise"=>ColorFromHex("00CED1"),"darkviolet"=>ColorFromHex("9400D3"),"deeppink"=>ColorFromHex("FF1493"),"deepskyblue"=>ColorFromHex("00BFFF"),"dimgray"=>ColorFromHex("696969"),"dimgrey"=>ColorFromHex("696969"),"dodgerblue"=>ColorFromHex("1E90FF"),"firebrick"=>ColorFromHex("B22222"),"floralwhite"=>ColorFromHex("FFFAF0"),"forestgreen"=>ColorFromHex("228B22"),"fuchsia"=>ColorFromHex("FF00FF"),"gainsboro"=>ColorFromHex("DCDCDC"),"ghostwhite"=>ColorFromHex("F8F8FF"),"gold"=>ColorFromHex("FFD700"),"goldenrod"=>ColorFromHex("DAA520"),"gray"=>ColorFromHex("808080"),"grey"=>ColorFromHex("808080"),"green"=>ColorFromHex("008000"),"greenyellow"=>ColorFromHex("ADFF2F"),"honeydew"=>ColorFromHex("F0FFF0"),"hotpink"=>ColorFromHex("FF69B4"),"indianred "=>ColorFromHex("CD5C5C"),"indigo "=>ColorFromHex("4B0082"),"ivory"=>ColorFromHex("FFFFF0"),"khaki"=>ColorFromHex("F0E68C"),"lavender"=>ColorFromHex("E6E6FA"),"lavenderblush"=>ColorFromHex("FFF0F5"),"lawngreen"=>ColorFromHex("7CFC00"),"lemonchiffon"=>ColorFromHex("FFFACD"),"lightblue"=>ColorFromHex("ADD8E6"),"lightcoral"=>ColorFromHex("F08080"),"lightcyan"=>ColorFromHex("E0FFFF"),"lightgoldenrodyellow"=>ColorFromHex("FAFAD2"),"lightgray"=>ColorFromHex("D3D3D3"),"lightgrey"=>ColorFromHex("D3D3D3"),"lightgreen"=>ColorFromHex("90EE90"),"lightpink"=>ColorFromHex("FFB6C1"),"lightsalmon"=>ColorFromHex("FFA07A"),"lightseagreen"=>ColorFromHex("20B2AA"),"lightskyblue"=>ColorFromHex("87CEFA"),"lightslategray"=>ColorFromHex("778899"),"lightslategrey"=>ColorFromHex("778899"),"lightsteelblue"=>ColorFromHex("B0C4DE"),"lightyellow"=>ColorFromHex("FFFFE0"),"lime"=>ColorFromHex("00FF00"),"limegreen"=>ColorFromHex("32CD32"),"linen"=>ColorFromHex("FAF0E6"),"magenta"=>ColorFromHex("FF00FF"),"maroon"=>ColorFromHex("800000"),"mediumaquamarine"=>ColorFromHex("66CDAA"),"mediumblue"=>ColorFromHex("0000CD"),"mediumorchid"=>ColorFromHex("BA55D3"),"mediumpurple"=>ColorFromHex("9370DB"),"mediumseagreen"=>ColorFromHex("3CB371"),"mediumslateblue"=>ColorFromHex("7B68EE"),"mediumspringgreen"=>ColorFromHex("00FA9A"),"mediumturquoise"=>ColorFromHex("48D1CC"),"mediumvioletred"=>ColorFromHex("C71585"),"midnightblue"=>ColorFromHex("191970"),"mintcream"=>ColorFromHex("F5FFFA"),"mistyrose"=>ColorFromHex("FFE4E1"),"moccasin"=>ColorFromHex("FFE4B5"),"navajowhite"=>ColorFromHex("FFDEAD"),"navy"=>ColorFromHex("000080"),"oldlace"=>ColorFromHex("FDF5E6"),"olive"=>ColorFromHex("808000"),"olivedrab"=>ColorFromHex("6B8E23"),"orange"=>ColorFromHex("FFA500"),"orangered"=>ColorFromHex("FF4500"),"orchid"=>ColorFromHex("DA70D6"),"palegoldenrod"=>ColorFromHex("EEE8AA"),"palegreen"=>ColorFromHex("98FB98"),"paleturquoise"=>ColorFromHex("AFEEEE"),"palevioletred"=>ColorFromHex("DB7093"),"papayawhip"=>ColorFromHex("FFEFD5"),"peachpuff"=>ColorFromHex("FFDAB9"),"peru"=>ColorFromHex("CD853F"),"pink"=>ColorFromHex("FFC0CB"),"plum"=>ColorFromHex("DDA0DD"),"powderblue"=>ColorFromHex("B0E0E6"),"purple"=>ColorFromHex("800080"),"rebeccapurple"=>ColorFromHex("663399"),"red"=>ColorFromHex("FF0000"),"rosybrown"=>ColorFromHex("BC8F8F"),"royalblue"=>ColorFromHex("4169E1"),"saddlebrown"=>ColorFromHex("8B4513"),"salmon"=>ColorFromHex("FA8072"),"sandybrown"=>ColorFromHex("F4A460"),"seagreen"=>ColorFromHex("2E8B57"),"seashell"=>ColorFromHex("FFF5EE"),"sienna"=>ColorFromHex("A0522D"),"silver"=>ColorFromHex("C0C0C0"),"skyblue"=>ColorFromHex("87CEEB"),"slateblue"=>ColorFromHex("6A5ACD"),"slategray"=>ColorFromHex("708090"),"slategrey"=>ColorFromHex("708090"),"snow"=>ColorFromHex("FFFAFA"),"springgreen"=>ColorFromHex("00FF7F"),"steelblue"=>ColorFromHex("4682B4"),"tan"=>ColorFromHex("D2B48C"),"teal"=>ColorFromHex("008080"),"thistle"=>ColorFromHex("D8BFD8"),"tomato"=>ColorFromHex("FF6347"),"turquoise"=>ColorFromHex("40E0D0"),"violet"=>ColorFromHex("EE82EE"),"wheat"=>ColorFromHex("F5DEB3"),"white"=>ColorFromHex("FFFFFF"),"whitesmoke"=>ColorFromHex("F5F5F5"),"yellow"=>ColorFromHex("FFFF00"),"yellowgreen"=>ColorFromHex("9ACD32"),
_ =>default(Color),};}
where ColorExtensions.ColorFromHex(string hex) is:
publicstaticColorColorFromHex(stringhex){// Undefinedif(hex.Length<3)returndefault(Color);varidx=hex[0]=='#'?1:0;switch(hex.Length-idx){case3://#rgb => ffrrggbbvart1=ToHexD(hex[idx++]);vart2=ToHexD(hex[idx++]);vart3=ToHexD(hex[idx]);returnColorFromRgb((int)t1,(int)t2,(int)t3);case4://#argb => aarrggbbvarf1=ToHexD(hex[idx++]);varf2=ToHexD(hex[idx++]);varf3=ToHexD(hex[idx++]);varf4=ToHexD(hex[idx]);returnColorFromRgba((int)f2,(int)f3,(int)f4,(int)f1);case6://#rrggbb => ffrrggbbreturnColorFromRgb((int)(ToHex(hex[idx++])<<4|ToHex(hex[idx++])),(int)(ToHex(hex[idx++])<<4|ToHex(hex[idx++])),(int)(ToHex(hex[idx++])<<4|ToHex(hex[idx])));case8://#aarrggbbvara1=ToHex(hex[idx++])<<4|ToHex(hex[idx++]);returnColorFromRgba((int)(ToHex(hex[idx++])<<4|ToHex(hex[idx++])),(int)(ToHex(hex[idx++])<<4|ToHex(hex[idx++])),(int)(ToHex(hex[idx++])<<4|ToHex(hex[idx])),(int)a1);default://everything else will result in unexpected resultsreturndefault(Color);}}privatestaticuintToHex(charc){varx=(ushort)c;if(x>='0'&&x<='9')return(uint)(x-'0');x|=0x20;if(x>='a'&&x<='f')return(uint)(x-'a'+10);return0;}privatestaticuintToHexD(charc){varj=ToHex(c);return(j<<4)|j;}
I thought this might be a good first "pull request" for me but I failed to find the code base for Uno's C# markup in the public repos.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
I'm in the process of migration from my home-brewed C# markup to Uno's C# markup. 99% of my home-brew version is redundant (or inferior) to Uno's C# markup. However, there is a small feature (that I use a lot) that I'd like to see if it would make sense to add to Uno's markup: Color/Brush conversions. The below examples are for the Shape.Fill() extension methods, but the concept would apply to Brush or Color property setters.
uint to Brush or Color conversion:
Since it's easy to specify a hex value as a uint in C#, create Brush or Color property setter extension methods that take a uint value:
where
ColorExtensions.ColorFromUint(uint hex)
is:usage:
Enhance string to Brush or Color conversions to support CSS notations:
For example, Uno's C# markup, the extension method is:
where as, in my home-brew code (and similarly in Avalonia) it is:
where
ColorExtensions.ColorFromString(string color)
is:where
ColorExtensions.ColorFromHex(string hex)
is:I thought this might be a good first "pull request" for me but I failed to find the code base for Uno's C# markup in the public repos.
Beta Was this translation helpful? Give feedback.
All reactions