Change stroke and fill to use NSColorSpace

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/back/trunk@25711 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
fredkiefer 2007-12-10 15:34:56 +00:00
parent 07349e480f
commit 37b1a789d4
4 changed files with 53 additions and 69 deletions

View file

@ -1,3 +1,16 @@
2007-12-10 Fred Kiefer <FredKiefer@gmx.de>
* Source/xlib/GSXftFontInfo.m:
Explicitly include NSDictionary.h header for better MacOS-X
compatibility.
* Headers/gsc/GSGState.h: Change fillColorS and strokeColorS to
NSColorSpace.
* Source/gsc/GSGState.m (NSColor-colorWithValues:colorSpaceName:):
Removed.
* Source/gsc/GSGState.m (-GSSetFillColorspace:,
-GSSetStrokeColorspace:, -GSSetFillColor:, -GSSetStrokeColor:):
Changed to use NSColorSpace.
2007-12-03 Riccardo Mottola <riccardo@kaffe.org>
* Source/winlib/WIN32GState.m: Implement Greyscale image handling

View file

@ -37,6 +37,7 @@
@class NSAffineTransform;
@class NSBezierPath;
@class NSFont;
@class NSColorSpace;
@class GSContext;
typedef enum {
@ -57,8 +58,8 @@ typedef enum {
NSPoint offset; /* Offset from Drawable origin */
NSBezierPath *path; /* Current path */
GSFontInfo *font; /* Current font reference */
NSColor *fillColorS; /* Color(space) used for fill drawing */
NSColor *strokeColorS; /* Color(space) used for stroke drawing */
NSColorSpace *fillColorS; /* Colorspace used for fill drawing */
NSColorSpace *strokeColorS; /* Colorspace used for stroke drawing */
device_color_t fillColor; /* fill color */
device_color_t strokeColor; /* stroke color */
color_state_t cstate; /* state last time color was set */

View file

@ -44,31 +44,6 @@
path = [NSBezierPath new]; \
}
/* Just temporary until we improve NSColor */
@interface NSColor (PrivateColor)
+ colorWithValues: (const float *)values colorSpaceName: colorSpace;
@end
@implementation NSColor (PrivateColor)
+ colorWithValues: (const float *)values colorSpaceName: colorSpace
{
NSColor *color = nil;
if ([colorSpace isEqual: NSDeviceWhiteColorSpace])
color = [NSColor colorWithDeviceWhite: values[0] alpha: values[1]];
else if ([colorSpace isEqual: NSDeviceRGBColorSpace])
color = [NSColor colorWithDeviceRed: values[0] green: values[1]
blue: values[2] alpha: values[3]];
else if ([colorSpace isEqual: NSDeviceCMYKColorSpace])
color = [NSColor colorWithDeviceCyan: values[0] magenta: values[1]
yellow: values[2] black: values[3] alpha: values[4]];
else
DPS_ERROR(DPSundefined, @"Cannot convert colorspace");
return color;
}
@end
@implementation GSGState
/* Designated initializer. */
@ -318,14 +293,8 @@
- (void) GSSetFillColorspace: (void *)spaceref
{
device_color_t col;
float values[6];
NSDictionary *dict = (NSDictionary *)spaceref;
NSString *colorSpace = [dict objectForKey: GSColorSpaceName];
if (fillColorS)
RELEASE(fillColorS);
memset(values, 0, sizeof(float)*6);
fillColorS = [NSColor colorWithValues: values colorSpaceName:colorSpace];
RETAIN(fillColorS);
ASSIGN(fillColorS, spaceref);
gsMakeColor(&col, rgb_colorspace, 0, 0, 0, 0);
[self setColor: &col state: COLOR_FILL];
}
@ -333,14 +302,8 @@
- (void) GSSetStrokeColorspace: (void *)spaceref
{
device_color_t col;
float values[6];
NSDictionary *dict = (NSDictionary *)spaceref;
NSString *colorSpace = [dict objectForKey: GSColorSpaceName];
if (strokeColorS)
RELEASE(strokeColorS);
memset(values, 0, sizeof(float)*6);
strokeColorS = [NSColor colorWithValues: values colorSpaceName:colorSpace];
RETAIN(strokeColorS);
ASSIGN(strokeColorS, spaceref);
gsMakeColor(&col, rgb_colorspace, 0, 0, 0, 0);
[self setColor: &col state: COLOR_STROKE];
}
@ -349,22 +312,25 @@
{
device_color_t dcolor;
NSColor *color;
NSString *colorSpace;
if (fillColorS == nil)
if ((fillColorS == nil)
|| ((color = [NSColor colorWithColorSpace: fillColorS
components: values
count: [fillColorS numberOfComponents] + 1]) == nil)
|| ((color = [color colorUsingColorSpaceName: NSDeviceRGBColorSpace]) == nil))
{
DPS_ERROR(DPSundefined, @"No fill colorspace defined, assume DeviceRGB");
colorSpace = NSDeviceRGBColorSpace;
gsMakeColor(&dcolor, rgb_colorspace, values[0], values[1],
values[2], values[3]);
}
else
colorSpace = [fillColorS colorSpaceName];
RELEASE(fillColorS);
fillColorS = [NSColor colorWithValues: values colorSpaceName:colorSpace];
RETAIN(fillColorS);
color = [fillColorS colorUsingColorSpaceName: NSDeviceRGBColorSpace];
[color getRed: &dcolor.field[0]
green: &dcolor.field[1]
blue: &dcolor.field[2]
alpha: &dcolor.field[AINDEX]];
else
{
[color getRed: &dcolor.field[0]
green: &dcolor.field[1]
blue: &dcolor.field[2]
alpha: &dcolor.field[AINDEX]];
}
[self setColor: &dcolor state: COLOR_FILL];
}
@ -372,22 +338,25 @@
{
device_color_t dcolor;
NSColor *color;
NSString *colorSpace;
if (strokeColorS == nil)
if ((strokeColorS == nil)
|| ((color = [NSColor colorWithColorSpace: strokeColorS
components: values
count: [strokeColorS numberOfComponents] + 1]) == nil)
|| ((color = [color colorUsingColorSpaceName: NSDeviceRGBColorSpace]) == nil))
{
DPS_ERROR(DPSundefined, @"No stroke colorspace defined, assume DeviceRGB");
colorSpace = NSDeviceRGBColorSpace;
gsMakeColor(&dcolor, rgb_colorspace, values[0], values[1],
values[2], values[3]);
}
else
colorSpace = [strokeColorS colorSpaceName];
RELEASE(strokeColorS);
strokeColorS = [NSColor colorWithValues: values colorSpaceName:colorSpace];
RETAIN(strokeColorS);
color = [strokeColorS colorUsingColorSpaceName: NSDeviceRGBColorSpace];
[color getRed: &dcolor.field[0]
green: &dcolor.field[1]
blue: &dcolor.field[2]
alpha: &dcolor.field[AINDEX]];
else
{
[color getRed: &dcolor.field[0]
green: &dcolor.field[1]
blue: &dcolor.field[2]
alpha: &dcolor.field[AINDEX]];
}
[self setColor: &dcolor state: COLOR_STROKE];
}

View file

@ -34,6 +34,7 @@
#include "x11/XGServer.h"
#include <Foundation/NSData.h>
#include <Foundation/NSDebug.h>
#include <Foundation/NSDictionary.h>
#include <Foundation/NSValue.h>
// For the encoding functions
#include <GNUstepBase/Unicode.h>