Implement SHRegGetBoolUSValue{A|W}.
[wine] / dlls / wineps / pen.c
1 /*
2  *      PostScript pen handling
3  *
4  *      Copyright 1998  Huw D M Davies
5  *
6  */
7
8 #include "psdrv.h"
9 #include "debugtools.h"
10
11 DEFAULT_DEBUG_CHANNEL(psdrv);
12
13 static char PEN_dash[]       = "50 30";     /* -----   -----   -----  */
14 static char PEN_dot[]        = "20";      /* --  --  --  --  --  -- */
15 static char PEN_dashdot[]    = "40 30 20 30";  /* ----   --   ----   --  */
16 static char PEN_dashdotdot[] = "40 20 20 20 20 20"; /* ----  --  --  ----  */
17 static char PEN_alternate[]  = "1";
18
19 /***********************************************************************
20  *           PSDRV_PEN_SelectObject
21  */
22 HPEN PSDRV_PEN_SelectObject( DC * dc, HPEN hpen )
23 {
24     LOGPEN logpen;
25     HPEN prevpen = dc->hPen;
26     PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
27
28     if (!GetObjectA( hpen, sizeof(logpen), &logpen )) return 0;
29
30     TRACE("hpen = %08x colour = %08lx\n", hpen, logpen.lopnColor);
31
32     dc->hPen = hpen;
33
34     physDev->pen.width = INTERNAL_XWSTODS(dc, logpen.lopnWidth.x);
35     if(physDev->pen.width < 0)
36         physDev->pen.width = -physDev->pen.width;
37
38     PSDRV_CreateColor(physDev, &physDev->pen.color, logpen.lopnColor);
39     physDev->pen.style = logpen.lopnStyle & PS_STYLE_MASK;
40  
41     switch(physDev->pen.style) {
42     case PS_DASH:
43         physDev->pen.dash = PEN_dash;
44         break;
45
46     case PS_DOT:
47         physDev->pen.dash = PEN_dot;
48         break;
49
50     case PS_DASHDOT:
51         physDev->pen.dash = PEN_dashdot;
52         break;
53
54     case PS_DASHDOTDOT:
55         physDev->pen.dash = PEN_dashdotdot;
56         break;
57
58     case PS_ALTERNATE:
59         physDev->pen.dash = PEN_alternate;
60         break;
61
62     default:
63         physDev->pen.dash = NULL;
64     }       
65
66     if ((physDev->pen.width > 1) && (physDev->pen.dash != NULL)) {
67         physDev->pen.style = PS_SOLID;
68          physDev->pen.dash = NULL;
69     } 
70
71     physDev->pen.set = FALSE;
72     return prevpen;
73 }
74
75
76 /**********************************************************************
77  *
78  *      PSDRV_SetPen
79  *
80  */
81 BOOL PSDRV_SetPen(DC *dc)
82 {
83     PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
84
85     if (physDev->pen.style != PS_NULL) {
86         PSDRV_WriteSetColor(dc, &physDev->pen.color);
87         
88         if(!physDev->pen.set) {
89             PSDRV_WriteSetPen(dc);
90             physDev->pen.set = TRUE;
91         }    
92     }
93
94     return TRUE;
95 }