~ubuntu-branches/ubuntu/karmic/moon/karmic

« back to all changes in this revision

Viewing changes to class/System.Windows/System.Windows.Media/Color.cs

  • Committer: Bazaar Package Importer
  • Author(s): Jo Shields
  • Date: 2009-02-14 12:01:08 UTC
  • Revision ID: james.westby@ubuntu.com-20090214120108-06539vb25vhbd8bn
Tags: upstream-1.0
ImportĀ upstreamĀ versionĀ 1.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
//
 
2
// System.Windows.Media.Color struct
 
3
//
 
4
// Contact:
 
5
//   Moonlight List (moonlight-list@lists.ximian.com)
 
6
//
 
7
// Copyright (C) 2007-2008 Novell, Inc (http://www.novell.com)
 
8
//
 
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:
 
16
//
 
17
// The above copyright notice and this permission notice shall be
 
18
// included in all copies or substantial portions of the Software.
 
19
//
 
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.
 
27
//
 
28
 
 
29
namespace System.Windows.Media {
 
30
 
 
31
        public struct Color : IFormattable {
 
32
 
 
33
                // maybe we should keep the 4 floats value and compute the argb on them
 
34
                // but that would require 4 times the memory
 
35
 
 
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.
 
41
                internal uint argb;
 
42
 
 
43
 
 
44
                private Color (uint value)
 
45
                {
 
46
                        argb = value;
 
47
                }
 
48
 
 
49
                public static Color FromArgb (byte a, byte r, byte g, byte b)
 
50
                {
 
51
                        return new Color ((uint)(a << 24 | r << 16 | g << 8 | b));
 
52
                }
 
53
 
 
54
                public byte A {
 
55
                        get { return (byte)(argb >> 24); }
 
56
                        set { argb = ((uint)(value << 24) | (argb & 0x00FFFFFF)); }
 
57
                }
 
58
 
 
59
                public byte R {
 
60
                        get { return (byte)((argb >> 16) & 0xFF); }
 
61
                        set { argb = ((uint)(value << 16) | (argb & 0xFF00FFFF)); }
 
62
                }
 
63
 
 
64
                public byte G {
 
65
                        get { return (byte)((argb >> 8) & 0xFF); }
 
66
                        set { argb = ((uint)(value << 8) | (argb & 0xFFFF00FF)); }
 
67
                }
 
68
 
 
69
                public byte B {
 
70
                        get { return (byte)(argb & 0xFF); }
 
71
                        set { argb = (uint)(value | (argb & 0xFFFFFF00)); }
 
72
                }
 
73
 
 
74
                public override int GetHashCode ()
 
75
                {
 
76
                        return (int) argb;
 
77
                }
 
78
 
 
79
                public override bool Equals (object o)
 
80
                {
 
81
                        return (o is Color) ? Equals ((Color)o) : false;
 
82
                }
 
83
 
 
84
                public bool Equals (Color color)
 
85
                {
 
86
                        return (argb == color.argb);
 
87
                }
 
88
 
 
89
                public override string ToString ()
 
90
                {
 
91
                        return String.Format ("#{0,8:X}", argb);
 
92
                }
 
93
                
 
94
                public string ToString (IFormatProvider provider)
 
95
                {
 
96
                        throw new System.NotImplementedException ();
 
97
                }
 
98
 
 
99
                string IFormattable.ToString (string value, IFormatProvider formatProvider)
 
100
                {
 
101
                        throw new System.NotImplementedException ();
 
102
                }
 
103
 
 
104
                public static bool operator == (Color color1, Color color2)
 
105
                {
 
106
                        return (color1.argb == color2.argb);
 
107
                }
 
108
 
 
109
                public static bool operator != (Color color1, Color color2)
 
110
                {
 
111
                        return (color1.argb != color2.argb);
 
112
                }
 
113
        }
 
114
}