From 29aeb38101244ee748a24150ffbbb1d8745c2046 Mon Sep 17 00:00:00 2001 From: FredKiefer Date: Sat, 9 Apr 2005 12:01:32 +0000 Subject: [PATCH] Added keyed encoding for NSFont and NSColor. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@21078 72102866-910b-0410-8b05-ffd578937521 --- ChangeLog | 5 +++ Source/NSColor.m | 94 ++++++++++++++++++++++++++++++++++++------------ Source/NSFont.m | 40 ++++++++++++++++----- 3 files changed, 109 insertions(+), 30 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8da87ad71..20d77f6b0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2005-04-09 Fred Kiefer + + * Source/NSColor.m: Implemented most keyed encoding methods. + * Source/NSFont.m: Implemented simple keyed encoding. + 2005-04-08 Fred Kiefer * Source/NSView.m (-addSubview:positioned:relativeTo:): Don't diff --git a/Source/NSColor.m b/Source/NSColor.m index 30f9b77d8..306b1f598 100644 --- a/Source/NSColor.m +++ b/Source/NSColor.m @@ -1579,9 +1579,18 @@ systemColorWithName(NSString *name) // - (void) encodeWithCoder: (NSCoder*)aCoder { - [aCoder encodeObject: [self colorSpaceName]]; - [aCoder encodeObject: _catalog_name]; - [aCoder encodeObject: _color_name]; + if ([aCoder allowsKeyedCoding]) + { + [aCoder encodeInt: 6 forKey: @"NSColorSpace"]; + [aCoder encodeObject: _catalog_name forKey: @"NSCatalogName"]; + [aCoder encodeObject: _color_name forKey: @"NSColorName"]; + } + else + { + [aCoder encodeObject: [self colorSpaceName]]; + [aCoder encodeObject: _catalog_name]; + [aCoder encodeObject: _color_name]; + } } - (id) initWithCoder: (NSCoder*)aDecoder @@ -1748,9 +1757,22 @@ systemColorWithName(NSString *name) // - (void) encodeWithCoder: (NSCoder*)aCoder { - [aCoder encodeObject: [self colorSpaceName]]; - [aCoder encodeValueOfObjCType: @encode(float) at: &_white_component]; - [aCoder encodeValueOfObjCType: @encode(float) at: &_alpha_component]; + if ([aCoder allowsKeyedCoding]) + { + NSString *str; + + // FIXME: Missing handling of alpha value + str = [[NSString alloc] initWithFormat: @"%f", _white_component]; + [aCoder encodeInt: 3 forKey: @"NSColorSpace"]; + [aCoder encodeBytes: [str cString] length: [str cStringLength] forKey: @"NSWhite"]; + RELEASE(str); + } + else + { + [aCoder encodeObject: [self colorSpaceName]]; + [aCoder encodeValueOfObjCType: @encode(float) at: &_white_component]; + [aCoder encodeValueOfObjCType: @encode(float) at: &_alpha_component]; + } } - (id) initWithCoder: (NSCoder*)aDecoder @@ -2032,12 +2054,19 @@ systemColorWithName(NSString *name) // - (void) encodeWithCoder: (NSCoder*)aCoder { - [aCoder encodeObject: [self colorSpaceName]]; - [aCoder encodeValueOfObjCType: @encode(float) at: &_cyan_component]; - [aCoder encodeValueOfObjCType: @encode(float) at: &_magenta_component]; - [aCoder encodeValueOfObjCType: @encode(float) at: &_yellow_component]; - [aCoder encodeValueOfObjCType: @encode(float) at: &_black_component]; - [aCoder encodeValueOfObjCType: @encode(float) at: &_alpha_component]; + if ([aCoder allowsKeyedCoding]) + { + // FIXME + } + else + { + [aCoder encodeObject: [self colorSpaceName]]; + [aCoder encodeValueOfObjCType: @encode(float) at: &_cyan_component]; + [aCoder encodeValueOfObjCType: @encode(float) at: &_magenta_component]; + [aCoder encodeValueOfObjCType: @encode(float) at: &_yellow_component]; + [aCoder encodeValueOfObjCType: @encode(float) at: &_black_component]; + [aCoder encodeValueOfObjCType: @encode(float) at: &_alpha_component]; + } } - (id) initWithCoder: (NSCoder*)aDecoder @@ -2269,14 +2298,28 @@ systemColorWithName(NSString *name) // - (void) encodeWithCoder: (NSCoder*)aCoder { - [aCoder encodeObject: [self colorSpaceName]]; - [aCoder encodeValueOfObjCType: @encode(float) at: &_red_component]; - [aCoder encodeValueOfObjCType: @encode(float) at: &_green_component]; - [aCoder encodeValueOfObjCType: @encode(float) at: &_blue_component]; - [aCoder encodeValueOfObjCType: @encode(float) at: &_hue_component]; - [aCoder encodeValueOfObjCType: @encode(float) at: &_saturation_component]; - [aCoder encodeValueOfObjCType: @encode(float) at: &_brightness_component]; - [aCoder encodeValueOfObjCType: @encode(float) at: &_alpha_component]; + if ([aCoder allowsKeyedCoding]) + { + NSString *str; + + // FIXME: Missing handling of alpha value + str = [[NSString alloc] initWithFormat: @"%f %f %f", _red_component, + _green_component, _blue_component]; + [aCoder encodeInt: 1 forKey: @"NSColorSpace"]; + [aCoder encodeBytes: [str cString] length: [str cStringLength] forKey: @"NSRGB"]; + RELEASE(str); + } + else + { + [aCoder encodeObject: [self colorSpaceName]]; + [aCoder encodeValueOfObjCType: @encode(float) at: &_red_component]; + [aCoder encodeValueOfObjCType: @encode(float) at: &_green_component]; + [aCoder encodeValueOfObjCType: @encode(float) at: &_blue_component]; + [aCoder encodeValueOfObjCType: @encode(float) at: &_hue_component]; + [aCoder encodeValueOfObjCType: @encode(float) at: &_saturation_component]; + [aCoder encodeValueOfObjCType: @encode(float) at: &_brightness_component]; + [aCoder encodeValueOfObjCType: @encode(float) at: &_alpha_component]; + } } - (id) initWithCoder: (NSCoder*)aDecoder @@ -2629,8 +2672,15 @@ systemColorWithName(NSString *name) // - (void) encodeWithCoder: (NSCoder*)aCoder { - [aCoder encodeObject: [self colorSpaceName]]; - [aCoder encodeObject: _pattern]; + if ([aCoder allowsKeyedCoding]) + { + // FIXME + } + else + { + [aCoder encodeObject: [self colorSpaceName]]; + [aCoder encodeObject: _pattern]; + } } - (id) initWithCoder: (NSCoder*)aDecoder diff --git a/Source/NSFont.m b/Source/NSFont.m index 936eec9da..4a45a0842 100644 --- a/Source/NSFont.m +++ b/Source/NSFont.m @@ -1083,17 +1083,41 @@ static BOOL flip_hack; - (void) encodeWithCoder: (NSCoder*)aCoder { - [aCoder encodeValueOfObjCType: @encode(int) at: &role]; - - if (role == 0) + if ([aCoder allowsKeyedCoding]) { - [aCoder encodeObject: fontName]; - [aCoder encodeArrayOfObjCType: @encode(float) count: 6 at: matrix]; - [aCoder encodeValueOfObjCType: @encode(BOOL) at: &matrixExplicitlySet]; + [aCoder encodeObject: fontName forKey: @"NSName"]; + [aCoder encodeInt: [self pointSize] forKey: @"NSSize"]; + + switch (role >> 1) + { + // FIXME: Many cases still missing + case RoleControlContentFont: + [aCoder encodeInt: 16 forKey: @"NSfFlags"]; + break; + case RoleLabelFont: + [aCoder encodeInt: 20 forKey: @"NSfFlags"]; + break; + case RoleTitleBarFont: + [aCoder encodeInt: 22 forKey: @"NSfFlags"]; + break; + default: + break; + } } - else if (role & 1) + else { - [aCoder encodeValueOfObjCType: @encode(float) at: &matrix[0]]; + [aCoder encodeValueOfObjCType: @encode(int) at: &role]; + + if (role == 0) + { + [aCoder encodeObject: fontName]; + [aCoder encodeArrayOfObjCType: @encode(float) count: 6 at: matrix]; + [aCoder encodeValueOfObjCType: @encode(BOOL) at: &matrixExplicitlySet]; + } + else if (role & 1) + { + [aCoder encodeValueOfObjCType: @encode(float) at: &matrix[0]]; + } } }