mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-05-30 20:30:37 +00:00
Added keyed decoding.
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@18510 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
7ba988efd5
commit
5f72e933d1
14 changed files with 816 additions and 458 deletions
|
@ -1044,7 +1044,72 @@ systemColorWithName(NSString *name)
|
|||
|
||||
- (id) initWithCoder: (NSCoder*)aDecoder
|
||||
{
|
||||
if ([aDecoder versionForClassName: @"NSColor"] < 3)
|
||||
if ([aDecoder allowsKeyedCoding])
|
||||
{
|
||||
int colorSpace = [aDecoder decodeIntForKey: @"NSColorSpace"];
|
||||
|
||||
DESTROY(self);
|
||||
if (colorSpace == 1)
|
||||
{
|
||||
unsigned length;
|
||||
const uint8_t *data;
|
||||
float red = 0.0;
|
||||
float green = 0.0;
|
||||
float blue = 0.0;
|
||||
float alpha = 0.0;
|
||||
NSString *str;
|
||||
NSScanner *scanner;
|
||||
|
||||
if ([aDecoder containsValueForKey: @"NSRGB"])
|
||||
{
|
||||
data = [aDecoder decodeBytesForKey: @"NSRGB"
|
||||
returnedLength: &length];
|
||||
str = [[NSString alloc] initWithCString: data length: length];
|
||||
scanner = [[NSScanner alloc] initWithString: str];
|
||||
[scanner scanFloat: &red];
|
||||
[scanner scanFloat: &green];
|
||||
[scanner scanFloat: &blue];
|
||||
}
|
||||
|
||||
self = [NSColor colorWithCalibratedRed: red
|
||||
green: green
|
||||
blue: blue
|
||||
alpha: alpha];
|
||||
}
|
||||
else if (colorSpace == 3)
|
||||
{
|
||||
unsigned length;
|
||||
const uint8_t *data;
|
||||
float white = 0.0;
|
||||
float alpha = 0.0;
|
||||
NSString *str;
|
||||
NSScanner *scanner;
|
||||
|
||||
if ([aDecoder containsValueForKey: @"NSWhite"])
|
||||
{
|
||||
data = [aDecoder decodeBytesForKey: @"NSWhite"
|
||||
returnedLength: &length];
|
||||
str = [[NSString alloc] initWithCString: data length: length];
|
||||
scanner = [[NSScanner alloc] initWithString: str];
|
||||
[scanner scanFloat: &white];
|
||||
}
|
||||
|
||||
self = [NSColor colorWithDeviceWhite: white
|
||||
alpha: alpha];
|
||||
}
|
||||
else if (colorSpace == 6)
|
||||
{
|
||||
NSString *catalog = [aDecoder decodeObjectForKey: @"NSCatalogName"];
|
||||
NSString *name = [aDecoder decodeObjectForKey: @"NSColorName"];
|
||||
//NSColor *color = [aDecoder decodeObjectForKey: @"NSColor"];
|
||||
|
||||
self = [NSColor colorWithCatalogName: catalog
|
||||
colorName: name];
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
else if ([aDecoder versionForClassName: @"NSColor"] < 3)
|
||||
{
|
||||
float red;
|
||||
float green;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue