Correct -setColor:state: to handle alpha better.

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/back/trunk@28957 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
fredkiefer 2009-11-04 21:56:49 +00:00
parent d29fcf430e
commit 5484fceeb8
3 changed files with 19 additions and 27 deletions

View file

@ -1,3 +1,8 @@
2009-11-04 Fred Kiefer <FredKiefer@gmx.de>
* Source/gsc/GSGState.m (-setColor:state:): Don't handle alpha specially.
* Source/cairo/CairoGState.m: Clean up last change.
2009-11-04 Richard Frith-Macdonald <rfm@gnu.org>
* Source\winlib\WIN32GState.m: Fixes for read image.

View file

@ -297,24 +297,6 @@ static float floatToUserSpace(NSAffineTransform *ctm, float f)
/*
* Color operations
*/
- (void) setColor: (device_color_t *)color state: (color_state_t)cState
{
device_color_t c;
[super setColor: color state: cState];
/*
if (_ct == NULL)
{
// Window device isn't set yet
return;
}
c = fillColor;
gsColorToRGB(&c);
// The underlying concept does not allow to determine if alpha is set or not.
cairo_set_source_rgba(_ct, c.field[0], c.field[1], c.field[2], c.field[AINDEX]);
*/
}
- (void) GSSetPatterColor: (NSImage*)image
{
// FIXME: Create a cairo surface from the image and set it as source.
@ -500,9 +482,6 @@ static float floatToUserSpace(NSAffineTransform *ctm, float f)
cairo_matrix_translate(&local_matrix, 0, -[_surface size].height);
cairo_set_matrix(_ct, &local_matrix);
// super call did go to the old _ct, so redo it
//[self setColor: &fillColor state: COLOR_BOTH];
// Cairo's default line width is 2.0
cairo_set_line_width(_ct, 1.0);
cairo_set_operator(_ct, CAIRO_OPERATOR_OVER);

View file

@ -120,15 +120,10 @@
in the current color */
- (void) setColor: (device_color_t *)color state: (color_state_t)cState
{
float alpha;
alpha = fillColor.field[AINDEX];
if (cState & COLOR_FILL)
fillColor = *color;
fillColor.field[AINDEX] = alpha;
alpha = strokeColor.field[AINDEX];
if (cState & COLOR_STROKE)
strokeColor = *color;
strokeColor.field[AINDEX] = alpha;
cstate = cState;
DESTROY(pattern);
}
@ -258,6 +253,8 @@
CLAMP(y)
CLAMP(k)
gsMakeColor(&col, cmyk_colorspace, c, m, y, k);
// Keep the old alpha value
col.field[AINDEX] = fillColor.field[AINDEX];
[self setColor: &col state: COLOR_BOTH];
}
@ -266,6 +263,8 @@
device_color_t col;
CLAMP(gray)
gsMakeColor(&col, gray_colorspace, gray, 0, 0, 0);
// Keep the old alpha value
col.field[AINDEX] = fillColor.field[AINDEX];
[self setColor: &col state: COLOR_BOTH];
}
@ -276,6 +275,8 @@
CLAMP(s)
CLAMP(b)
gsMakeColor(&col, hsb_colorspace, h, s, b, 0);
// Keep the old alpha value
col.field[AINDEX] = fillColor.field[AINDEX];
[self setColor: &col state: COLOR_BOTH];
}
@ -286,6 +287,8 @@
CLAMP(g)
CLAMP(b)
gsMakeColor(&col, rgb_colorspace, r, g, b, 0);
// Keep the old alpha value
col.field[AINDEX] = fillColor.field[AINDEX];
[self setColor: &col state: COLOR_BOTH];
}
@ -296,6 +299,8 @@
ASSIGN(fillColorS, spaceref);
gsMakeColor(&col, rgb_colorspace, 0, 0, 0, 0);
// Keep the old alpha value
col.field[AINDEX] = fillColor.field[AINDEX];
[self setColor: &col state: COLOR_FILL];
}
@ -305,6 +310,8 @@
ASSIGN(strokeColorS, spaceref);
gsMakeColor(&col, rgb_colorspace, 0, 0, 0, 0);
// Keep the old alpha value
col.field[AINDEX] = fillColor.field[AINDEX];
[self setColor: &col state: COLOR_STROKE];
}
@ -322,6 +329,7 @@
DPS_ERROR(DPSundefined, @"No fill colorspace defined, assume DeviceRGB");
gsMakeColor(&dcolor, rgb_colorspace, values[0], values[1],
values[2], values[3]);
dcolor.field[AINDEX] = values[4];
}
else
{
@ -348,6 +356,7 @@
DPS_ERROR(DPSundefined, @"No stroke colorspace defined, assume DeviceRGB");
gsMakeColor(&dcolor, rgb_colorspace, values[0], values[1],
values[2], values[3]);
dcolor.field[AINDEX] = values[4];
}
else
{
@ -641,7 +650,6 @@ typedef enum {
stroking unless fill and/or stroke color is set explicitly */
gsMakeColor(&fillColor, gray_colorspace, 0, 0, 0, 0);
fillColor.field[AINDEX] = 1.0;
strokeColor.field[AINDEX] = 1.0;
[self setColor: &fillColor state: COLOR_BOTH];
charSpacing = 0;