2 * PostScript colour functions
4 * Copyright 1998 Huw D M Davies
11 /**********************************************************************
14 * Return TRUE if col1 == col2
16 BOOL
PSDRV_CmpColor(PSCOLOR
*col1
, PSCOLOR
*col2
)
18 if(col1
->type
!= col2
->type
)
23 if(col1
->value
.gray
.i
== col2
->value
.gray
.i
)
27 if( col1
->value
.rgb
.r
== col2
->value
.rgb
.r
&&
28 col1
->value
.rgb
.g
== col2
->value
.rgb
.g
&&
29 col1
->value
.rgb
.b
== col2
->value
.rgb
.b
)
33 ERR(psdrv
, "Unknown colour type %d\n", col1
->type
);
39 /**********************************************************************
42 * Copies col2 into col1. Return FALSE on error.
44 BOOL
PSDRV_CopyColor(PSCOLOR
*col1
, PSCOLOR
*col2
)
49 col1
->value
.gray
.i
= col2
->value
.gray
.i
;
53 col1
->value
.rgb
.r
= col2
->value
.rgb
.r
;
54 col1
->value
.rgb
.g
= col2
->value
.rgb
.g
;
55 col1
->value
.rgb
.b
= col2
->value
.rgb
.b
;
59 ERR(psdrv
, "Unknown colour type %d\n", col1
->type
);
63 col1
->type
= col2
->type
;
68 /**********************************************************************
71 * Creates a PostScript colour from a COLORREF.
72 * Result is grey scale if ColorDevice field of ppd is FALSE else an
73 * rgb colour is produced.
75 void PSDRV_CreateColor( PSDRV_PDEVICE
*physDev
, PSCOLOR
*pscolor
,
78 int ctype
= wincolor
>> 24;
82 FIXME(psdrv
, "Colour is %08lx\n", wincolor
);
84 r
= (wincolor
& 0xff) / 256.0;
85 g
= ((wincolor
>> 8) & 0xff) / 256.0;
86 b
= ((wincolor
>> 16) & 0xff) / 256.0;
88 if(physDev
->pi
->ppd
->ColorDevice
) {
89 pscolor
->type
= PSCOLOR_RGB
;
90 pscolor
->value
.rgb
.r
= r
;
91 pscolor
->value
.rgb
.g
= g
;
92 pscolor
->value
.rgb
.b
= b
;
94 pscolor
->type
= PSCOLOR_GRAY
;
95 /* FIXME configurable */
96 pscolor
->value
.gray
.i
= r
* 0.3 + g
* 0.59 + b
* 0.11;
102 /***********************************************************************
105 COLORREF
PSDRV_SetBkColor( DC
*dc
, COLORREF color
)
107 PSDRV_PDEVICE
*physDev
= (PSDRV_PDEVICE
*)dc
->physDev
;
110 oldColor
= dc
->w
.backgroundColor
;
111 dc
->w
.backgroundColor
= color
;
113 PSDRV_CreateColor(physDev
, &physDev
->bkColor
, color
);
119 /***********************************************************************
122 COLORREF
PSDRV_SetTextColor( DC
*dc
, COLORREF color
)
124 PSDRV_PDEVICE
*physDev
= (PSDRV_PDEVICE
*)dc
->physDev
;
127 oldColor
= dc
->w
.textColor
;
128 dc
->w
.textColor
= color
;
130 PSDRV_CreateColor(physDev
, &physDev
->font
.color
, color
);
131 physDev
->font
.set
= FALSE
;