2 * PostScript colour functions
4 * Copyright 1998 Huw D M Davies
12 /**********************************************************************
15 * Return TRUE if col1 == col2
17 BOOL32
PSDRV_CmpColor(PSCOLOR
*col1
, PSCOLOR
*col2
)
19 if(col1
->type
!= col2
->type
)
24 if(col1
->value
.gray
.i
== col2
->value
.gray
.i
)
28 if( col1
->value
.rgb
.r
== col2
->value
.rgb
.r
&&
29 col1
->value
.rgb
.g
== col2
->value
.rgb
.g
&&
30 col1
->value
.rgb
.b
== col2
->value
.rgb
.b
)
34 ERR(psdrv
, "Unknown colour type %d\n", col1
->type
);
40 /**********************************************************************
43 * Copies col2 into col1. Return FALSE on error.
45 BOOL32
PSDRV_CopyColor(PSCOLOR
*col1
, PSCOLOR
*col2
)
50 col1
->value
.gray
.i
= col2
->value
.gray
.i
;
54 col1
->value
.rgb
.r
= col2
->value
.rgb
.r
;
55 col1
->value
.rgb
.g
= col2
->value
.rgb
.g
;
56 col1
->value
.rgb
.b
= col2
->value
.rgb
.b
;
60 ERR(psdrv
, "Unknown colour type %d\n", col1
->type
);
64 col1
->type
= col2
->type
;
69 /**********************************************************************
72 * Creates a PostScript colour from a COLORREF.
73 * Result is grey scale if ColorDevice field of ppd is FALSE else an
74 * rgb colour is produced.
76 void PSDRV_CreateColor( PSDRV_PDEVICE
*physDev
, PSCOLOR
*pscolor
,
79 int ctype
= wincolor
>> 24;
83 FIXME(psdrv
, "Colour is %08lx\n", wincolor
);
85 r
= (wincolor
& 0xff) / 256.0;
86 g
= ((wincolor
>> 8) & 0xff) / 256.0;
87 b
= ((wincolor
>> 16) & 0xff) / 256.0;
89 if(physDev
->pi
->ppd
->ColorDevice
) {
90 pscolor
->type
= PSCOLOR_RGB
;
91 pscolor
->value
.rgb
.r
= r
;
92 pscolor
->value
.rgb
.g
= g
;
93 pscolor
->value
.rgb
.b
= b
;
95 pscolor
->type
= PSCOLOR_GRAY
;
96 /* FIXME configurable */
97 pscolor
->value
.gray
.i
= r
* 0.3 + g
* 0.59 + b
* 0.11;
103 /***********************************************************************
106 COLORREF
PSDRV_SetBkColor( DC
*dc
, COLORREF color
)
108 PSDRV_PDEVICE
*physDev
= (PSDRV_PDEVICE
*)dc
->physDev
;
111 oldColor
= dc
->w
.backgroundColor
;
112 dc
->w
.backgroundColor
= color
;
114 PSDRV_CreateColor(physDev
, &physDev
->bkColor
, color
);
120 /***********************************************************************
123 COLORREF
PSDRV_SetTextColor( DC
*dc
, COLORREF color
)
125 PSDRV_PDEVICE
*physDev
= (PSDRV_PDEVICE
*)dc
->physDev
;
128 oldColor
= dc
->w
.textColor
;
129 dc
->w
.textColor
= color
;
131 PSDRV_CreateColor(physDev
, &physDev
->font
.color
, color
);
132 physDev
->font
.set
= FALSE
;