2
// System.Windows.Media.Color struct
5
// Moonlight List (moonlight-list@lists.ximian.com)
7
// Copyright (C) 2007-2008 Novell, Inc (http://www.novell.com)
9
// Permission is hereby granted, free of charge, to any person obtaining
10
// a copy of this software and associated documentation files (the
11
// "Software"), to deal in the Software without restriction, including
12
// without limitation the rights to use, copy, modify, merge, publish,
13
// distribute, sublicense, and/or sell copies of the Software, and to
14
// permit persons to whom the Software is furnished to do so, subject to
15
// the following conditions:
17
// The above copyright notice and this permission notice shall be
18
// included in all copies or substantial portions of the Software.
20
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29
namespace System.Windows.Media {
31
public struct Color : IFormattable {
33
// maybe we should keep the 4 floats value and compute the argb on them
34
// but that would require 4 times the memory
36
// Its internal for now, but we should turn Color into a binary
37
// compatible format so we can pass that directly to Value, right
38
// now we are using a hack that creates the value out of the argb
39
// to be able to call C++'s uint32 constructor, but we should be
40
// passing all doubles instead.
44
private Color (uint value)
49
public static Color FromArgb (byte a, byte r, byte g, byte b)
51
return new Color ((uint)(a << 24 | r << 16 | g << 8 | b));
55
get { return (byte)(argb >> 24); }
56
set { argb = ((uint)(value << 24) | (argb & 0x00FFFFFF)); }
60
get { return (byte)((argb >> 16) & 0xFF); }
61
set { argb = ((uint)(value << 16) | (argb & 0xFF00FFFF)); }
65
get { return (byte)((argb >> 8) & 0xFF); }
66
set { argb = ((uint)(value << 8) | (argb & 0xFFFF00FF)); }
70
get { return (byte)(argb & 0xFF); }
71
set { argb = (uint)(value | (argb & 0xFFFFFF00)); }
74
public override int GetHashCode ()
79
public override bool Equals (object o)
81
return (o is Color) ? Equals ((Color)o) : false;
84
public bool Equals (Color color)
86
return (argb == color.argb);
89
public override string ToString ()
91
return String.Format ("#{0,8:X}", argb);
94
public string ToString (IFormatProvider provider)
96
throw new System.NotImplementedException ();
99
string IFormattable.ToString (string value, IFormatProvider formatProvider)
101
throw new System.NotImplementedException ();
104
public static bool operator == (Color color1, Color color2)
106
return (color1.argb == color2.argb);
109
public static bool operator != (Color color1, Color color2)
111
return (color1.argb != color2.argb);