Large-scale renaming of all Win32 functions and types to use the
[wine/hacks.git] / graphics / psdrv / color.c
blob79b7e58f04b26f28bacc8b17970b4134c1326f9d
1 /*
2 * PostScript colour functions
4 * Copyright 1998 Huw D M Davies
6 */
8 #include "psdrv.h"
9 #include "debug.h"
11 /**********************************************************************
12 * PSDRV_CmpColor
14 * Return TRUE if col1 == col2
15 */
16 BOOL PSDRV_CmpColor(PSCOLOR *col1, PSCOLOR *col2)
18 if(col1->type != col2->type)
19 return FALSE;
21 switch(col1->type) {
22 case PSCOLOR_GRAY:
23 if(col1->value.gray.i == col2->value.gray.i)
24 return TRUE;
25 break;
26 case PSCOLOR_RGB:
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 )
30 return TRUE;
31 break;
32 default:
33 ERR(psdrv, "Unknown colour type %d\n", col1->type);
35 return FALSE;
39 /**********************************************************************
40 * PSDRV_CopyColor
42 * Copies col2 into col1. Return FALSE on error.
43 */
44 BOOL PSDRV_CopyColor(PSCOLOR *col1, PSCOLOR *col2)
47 switch(col2->type) {
48 case PSCOLOR_GRAY:
49 col1->value.gray.i = col2->value.gray.i;
50 break;
52 case PSCOLOR_RGB:
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;
56 break;
58 default:
59 ERR(psdrv, "Unknown colour type %d\n", col1->type);
60 return FALSE;
63 col1->type = col2->type;
64 return TRUE;
68 /**********************************************************************
69 * PSDRV_CreateColor
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,
76 COLORREF wincolor )
78 int ctype = wincolor >> 24;
79 float r, g, b;
81 if(ctype != 0)
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;
93 } else {
94 pscolor->type = PSCOLOR_GRAY;
95 /* FIXME configurable */
96 pscolor->value.gray.i = r * 0.3 + g * 0.59 + b * 0.11;
98 return;
102 /***********************************************************************
103 * PSDRV_SetBkColor
105 COLORREF PSDRV_SetBkColor( DC *dc, COLORREF color )
107 PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
108 COLORREF oldColor;
110 oldColor = dc->w.backgroundColor;
111 dc->w.backgroundColor = color;
113 PSDRV_CreateColor(physDev, &physDev->bkColor, color);
115 return oldColor;
119 /***********************************************************************
120 * PSDRV_SetTextColor
122 COLORREF PSDRV_SetTextColor( DC *dc, COLORREF color )
124 PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
125 COLORREF oldColor;
127 oldColor = dc->w.textColor;
128 dc->w.textColor = color;
130 PSDRV_CreateColor(physDev, &physDev->font.color, color);
131 physDev->font.set = FALSE;
132 return oldColor;