Smartmobili.Cocoa.NSColor.InitWithCoder C# (CSharp) Method

InitWithCoder() public method

public InitWithCoder ( NSCoder aDecoder ) : id
aDecoder NSCoder
return id
        public override id InitWithCoder(NSCoder aDecoder)
        {
            id self = this;

            if (aDecoder.AllowsKeyedCoding)
            {
                int colorSpace = aDecoder.DecodeIntForKey(@"NSColorSpace");

                if ((colorSpace == 1) || (colorSpace == 2))
                {
                    int length = 0;
                    byte[] data = null;
                    double red = 0.0;
                    double green = 0.0;
                    double blue = 0.0;
                    double alpha = 1.0;
                    NSString str = null;
                    NSScanner scanner = null;

                    if (aDecoder.ContainsValueForKey(@"NSRGB"))
                    {
                        data = aDecoder.DecodeBytesForKey(@"NSRGB", ref length);
                        str = (NSString)NSString.Alloc().InitWithBytes(data, (uint)data.Length, NSStringEncoding.NSASCIIStringEncoding);
                        scanner = (NSScanner)NSScanner.Alloc().InitWithString(str);
                        scanner.ScanDouble(ref red);
                        scanner.ScanDouble(ref green);
                        scanner.ScanDouble(ref blue);
                        scanner.ScanDouble(ref alpha);
                    }
                    if (colorSpace == 1)
                    {
                        self = NSColor.ColorWithCalibratedRed((double)red, (double)green, (double)blue, (double)alpha);
                    }
                    else
                    {
                        self = NSColor.ColorWithDeviceRed((double)red, (double)green, (double)blue, (double)alpha);
                    }
                }
                else if ((colorSpace == 3) || (colorSpace == 4))
                {
                    int length = 0;
                    byte[] data = null;
                    double white = 0.0;
                    double alpha = 0.0;
                    NSString str = null;
                    NSScanner scanner = null;

                    if (aDecoder.ContainsValueForKey(@"NSWhite"))
                    {
                        data = aDecoder.DecodeBytesForKey(@"NSWhite", ref length);
                        str = (NSString)NSString.Alloc().InitWithBytes(data, (uint)data.Length, NSStringEncoding.NSASCIIStringEncoding);
                        scanner = (NSScanner)NSScanner.Alloc().InitWithString(str);
                        scanner.ScanDouble(ref white);
                        scanner.ScanDouble(ref alpha);
                    }
                    if (colorSpace == 3)
                    {
                        self = NSColor.ColorWithCalibratedWhite((double)white, (double)alpha);
                    }
                    else
                    {
                        self = NSColor.ColorWithDeviceWhite((double)white, (double)alpha);
                    }
                }
                else if (colorSpace == 5)
                {
                    int length = 0;
                    byte[] data = null;
                    double cyan = 0.0;
                    double yellow = 0.0;
                    double magenta = 0.0;
                    double black = 0.0;
                    double alpha = 1.0;
                    NSString str = null;
                    NSScanner scanner = null;

                    if (aDecoder.ContainsValueForKey(@"NSCYMK"))
                    {
                        data = aDecoder.DecodeBytesForKey(@"NSCYMK", ref length);
                        str = (NSString)NSString.Alloc().InitWithBytes(data, (uint)data.Length, NSStringEncoding.NSASCIIStringEncoding);
                        scanner = (NSScanner)NSScanner.Alloc().InitWithString(str);
                        scanner.ScanDouble(ref cyan);
                        scanner.ScanDouble(ref yellow);
                        scanner.ScanDouble(ref magenta);
                        scanner.ScanDouble(ref black);
                        scanner.ScanDouble(ref alpha);
                    }

                    self = NSColor.ColorWithDeviceCyan((double)cyan, (double)magenta, (double)yellow, (double)black, (double)alpha);
                }
                else if (colorSpace == 6)
                {
                    NSString catalog = (NSString)aDecoder.DecodeObjectForKey(@"NSCatalogName");
                    NSString name = (NSString)aDecoder.DecodeObjectForKey(@"NSColorName");
                    //NSColor color = (NSColor)aDecoder.DecodeObjectForKey(@"NSColor");

                    self = NSColor.ColorWithCatalogName(catalog, name);
                }
                else if (colorSpace == 10)
                {
                    NSImage image = (NSImage)aDecoder.DecodeObjectForKey(@"NSImage");

                    self = NSColor.ColorWithPatternImage(image);
                }

                return self;
            }
            else if (aDecoder.VersionForClassName(@"NSColor") < 3)
            {
                double red;
                double green;
                double blue;
                double cyan;
                double magenta;
                double yellow;
                double black;
                double hue;
                double saturation;
                double brightness;
                double alpha;
                double white;

                int active_component;
                int valid_components;
                NSString colorspace_name;
                NSString catalog_name;
                NSString color_name;
                bool is_clear;

                // Version 1
                aDecoder.DecodeValueOfObjCType2<double>(out red);
                aDecoder.DecodeValueOfObjCType2<double>(out green);
                aDecoder.DecodeValueOfObjCType2<double>(out blue);
                aDecoder.DecodeValueOfObjCType2<double>(out alpha);
                aDecoder.DecodeValueOfObjCType2<bool>(out is_clear);

                // Version 2
                aDecoder.DecodeValueOfObjCType2<NSString>(out colorspace_name);
                aDecoder.DecodeValueOfObjCType2<NSString>(out catalog_name);
                aDecoder.DecodeValueOfObjCType2<NSString>(out color_name);
                aDecoder.DecodeValueOfObjCType2<double>(out cyan);
                aDecoder.DecodeValueOfObjCType2<double>(out magenta);
                aDecoder.DecodeValueOfObjCType2<double>(out yellow);
                aDecoder.DecodeValueOfObjCType2<double>(out black);
                aDecoder.DecodeValueOfObjCType2<double>(out hue);
                aDecoder.DecodeValueOfObjCType2<double>(out saturation);
                aDecoder.DecodeValueOfObjCType2<double>(out brightness);
                aDecoder.DecodeValueOfObjCType2<double>(out white);

                aDecoder.DecodeValueOfObjCType2<int>(out active_component);
                aDecoder.DecodeValueOfObjCType2<int>(out valid_components);

                if (colorspace_name.IsEqualToString(@"NSDeviceCMYKColorSpace"))
                {
                    self = NSColor.ColorWithDeviceCyan((double)cyan, (double)magenta, (double)yellow, (double)black, (double)alpha);
                }
                else if (colorspace_name.IsEqualToString(@"NSDeviceWhiteColorSpace"))
                {
                    self = NSColor.ColorWithDeviceWhite((double)white, (double)alpha);
                }
                else if (colorspace_name.IsEqualToString(@"NSCalibratedWhiteColorSpace"))
                {
                    self = NSColor.ColorWithCalibratedWhite((double)white, (double)alpha);
                }
                else if (colorspace_name.IsEqualToString(@"NSDeviceRGBColorSpace"))
                {
                    self = NSColor.ColorWithDeviceRed((double)red, (double)green, (double)blue, (double)alpha);
                }
                else if (colorspace_name.IsEqualToString(@"NSCalibratedRGBColorSpace"))
                {
                    self = NSColor.ColorWithCalibratedRed((double)red, (double)green, (double)blue, (double)alpha);
                }
                else if (colorspace_name.IsEqualToString(@"NSNamedColorSpace"))
                {
                    self = NSColor.ColorWithCatalogName(catalog_name, color_name);
                }
                return self;
            }
            else
            {
                 NSString	csName = (NSString)aDecoder.DecodeObject();

                 if (csName.IsEqualToString(@"NSDeviceCMYKColorSpace"))
                 {
                     self = GSDeviceCMYKColor.Alloc().InitWithCoder(aDecoder);
                 }
                 else if (csName.IsEqualToString(@"NSDeviceRGBColorSpace"))
                 {
                     self = GSDeviceRGBColor.Alloc().InitWithCoder(aDecoder);
                 }
                 else if (csName.IsEqualToString(@"NSDeviceWhiteColorSpace"))
                 {
                     self = GSDeviceWhiteColor.Alloc().InitWithCoder(aDecoder);
                 }
                 else if (csName.IsEqualToString(@"NSCalibratedWhiteColorSpace"))
                 {
                     self = GSCalibratedWhiteColor.Alloc().InitWithCoder(aDecoder);
                 }
                 else if (csName.IsEqualToString(@"NSCalibratedRGBColorSpace"))
                 {
                     self = GSCalibratedRGBColor.Alloc().InitWithCoder(aDecoder);
                 }
                 else if (csName.IsEqualToString(@"NSNamedColorSpace"))
                 {
                     self = GSNamedColor.Alloc().InitWithCoder(aDecoder);
                 }
                 else
                 {
                     System.Diagnostics.Trace.WriteLine("Unknown colorspace name in decoded color");
                     return null;
                 }

                 return self;
            }
        }