-Fixed MESSAGE functions that were thunking down to 16 bits implementation.
[wine] / graphics / psdrv / pen.c
1 /*
2  *      PostScript pen handling
3  *
4  *      Copyright 1998  Huw D M Davies
5  *
6  */
7
8 #include "windows.h"
9 #include "pen.h"
10 #include "psdrv.h"
11 #include "debug.h"
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 extern HPEN32 PSDRV_PEN_SelectObject( DC * dc, HPEN32 hpen, PENOBJ * pen )
23 {
24     HPEN32 prevpen = dc->w.hPen;
25     PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
26
27     TRACE(psdrv, "hpen = %08x colour = %08lx\n", hpen, pen->logpen.lopnColor);
28     dc->w.hPen = hpen;
29
30     physDev->pen.width = XLSTODS(dc, pen->logpen.lopnWidth.x);
31     if(physDev->pen.width < 0)
32         physDev->pen.width = -physDev->pen.width;
33
34     PSDRV_CreateColor(physDev, &physDev->pen.color, pen->logpen.lopnColor);
35
36     if(physDev->pen.width > 1) { /* dashes only for 0 or 1 pixel pens */
37         physDev->pen.dash = NULL;
38     } else {
39         switch(pen->logpen.lopnStyle & PS_STYLE_MASK) {
40         case PS_DASH:
41             physDev->pen.dash = PEN_dash;
42             break;
43
44         case PS_DOT:
45             physDev->pen.dash = PEN_dot;
46             break;
47
48         case PS_DASHDOT:
49             physDev->pen.dash = PEN_dashdot;
50             break;
51
52         case PS_DASHDOTDOT:
53             physDev->pen.dash = PEN_dashdotdot;
54             break;
55
56         case PS_ALTERNATE:
57             physDev->pen.dash = PEN_alternate;
58             break;
59
60         default:
61             physDev->pen.dash = NULL;
62             break;
63         }
64     }
65
66     physDev->pen.set = FALSE;
67     return prevpen;
68 }
69
70
71 /**********************************************************************
72  *
73  *      PSDRV_SetPen
74  *
75  */
76 BOOL32 PSDRV_SetPen(DC *dc)
77 {
78     PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
79
80     PSDRV_WriteSetColor(dc, &physDev->pen.color);
81
82     if(!physDev->pen.set) {
83         PSDRV_WriteSetPen(dc);
84         physDev->pen.set = TRUE;
85     }
86
87     return TRUE;
88 }
89
90