mirror of
https://github.com/gnustep/libs-back.git
synced 2025-04-22 15:31:14 +00:00
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:
parent
d29fcf430e
commit
5484fceeb8
3 changed files with 19 additions and 27 deletions
|
@ -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.
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue