Build AFM data for core PostScript fonts into WINEPS.
[wine] / dlls / wineps / psdrv.h
1 #ifndef __WINE_PSDRV_H
2 #define __WINE_PSDRV_H
3
4 /*
5  *      PostScript driver definitions
6  *
7  *      Copyright 1998  Huw D M Davies
8  */
9 #include "windef.h"
10 #include "wingdi.h"
11 #include "font.h"
12 #include "pen.h"
13 #include "brush.h"
14 #include "wine/wingdi16.h"
15 #include "winspool.h"
16
17 typedef struct {
18     INT             index;
19     LPCSTR          sz;
20 } GLYPHNAME;
21
22 typedef struct {
23     LONG            UV;
24     GLYPHNAME       *name;
25 } UNICODEGLYPH;
26
27 typedef struct {
28     INT                 size;
29     const UNICODEGLYPH  *glyphs;
30 } UNICODEVECTOR;
31
32 extern const INT        PSDRV_AGLGlyphNamesSize;
33 extern GLYPHNAME        PSDRV_AGLGlyphNames[];
34 extern UNICODEVECTOR    PSDRV_AdobeGlyphList;
35
36 typedef struct {
37     float       llx, lly, urx, ury;
38 } AFMBBOX;
39
40 typedef struct _tagAFMLIGS {
41     char                *successor;
42     char                *ligature;
43     struct _tagAFMLIGS  *next;
44 } AFMLIGS;
45
46 typedef struct _tagAFMMETRICS {
47     int                 C;              /* character */  
48     LONG                UV;
49     float               WX;
50     GLYPHNAME           *N;             /* name */
51     AFMBBOX             B;
52     AFMLIGS             *L;             /* Ligatures */
53 } AFMMETRICS;
54
55 typedef struct {
56     USHORT              usUnitsPerEm;           /* head:unitsPerEm */
57     SHORT               sAscender;              /* hhea:Ascender */
58     SHORT               sDescender;             /* hhea:Descender */
59     SHORT               sLineGap;               /* hhea:LineGap */
60     SHORT               sAvgCharWidth;          /* OS/2:xAvgCharWidth */
61     SHORT               sTypoAscender;          /* OS/2:sTypoAscender */
62     SHORT               sTypoDescender;         /* OS/2:sTypoDescender */
63     SHORT               sTypoLineGap;           /* OS/2:sTypeLineGap */
64     USHORT              usWinAscent;            /* OS/2:usWinAscent */
65     USHORT              usWinDescent;           /* OS/2:usWinDescent */
66 } WINMETRICS;
67
68 typedef struct _tagAFM {
69     char                *FontName;
70     char                *FullName;
71     char                *FamilyName;
72     char                *EncodingScheme;
73     LONG                Weight;                 /* FW_NORMAL etc. */
74     float               ItalicAngle;
75     BOOL                IsFixedPitch;
76     float               UnderlinePosition;
77     float               UnderlineThickness;
78     AFMBBOX             FontBBox;
79     float               CapHeight;
80     float               XHeight;
81     float               Ascender;
82     float               Descender;
83     float               FullAscender;           /* Ascent of Aring character */
84     WINMETRICS          WinMetrics;
85     float               CharWidths[256];
86     int                 NumofMetrics;
87     AFMMETRICS          *Metrics;
88     UNICODEVECTOR       *Encoding;
89 } AFM; /* CharWidths is a shortcut to the WX values of numbered glyphs */
90
91 /* Note no 'next' in AFM. Use AFMLISTENTRY as a container. This allow more than
92    one list to exist without having to reallocate the entire AFM structure. We
93    keep a global list of all afms (PSDRV_AFMFontList) plus a list of available
94    fonts for each DC (dc->physDev->Fonts) */
95
96 typedef struct _tagAFMLISTENTRY {
97     AFM                         *afm;
98     struct _tagAFMLISTENTRY     *next;
99 } AFMLISTENTRY;
100
101 typedef struct _tagFONTFAMILY {
102     char                        *FamilyName; /* family name */
103     AFMLISTENTRY                *afmlist;    /* list of afms for this family */
104     struct _tagFONTFAMILY       *next;       /* next family */
105 } FONTFAMILY;
106
107 extern FONTFAMILY   *PSDRV_AFMFontList;
108 extern AFM          *const PSDRV_BuiltinAFMs[];     /* last element is NULL */
109
110 typedef struct _tagFONTNAME {
111     char                *Name;
112     struct _tagFONTNAME *next;
113 } FONTNAME;
114
115 typedef struct {
116     float       llx, lly, urx, ury;
117 } IMAGEABLEAREA;
118
119 typedef struct {
120     float       x, y;
121 } PAPERDIMENSION;
122
123 /* Solaris kludge */
124 #undef PAGESIZE
125 typedef struct _tagPAGESIZE {
126     char                *Name;
127     char                *FullName;
128     char                *InvocationString;
129     IMAGEABLEAREA       *ImageableArea;
130     PAPERDIMENSION      *PaperDimension;
131     WORD                WinPage; /*eg DMPAPER_A4. Doesn't really belong here */
132     struct _tagPAGESIZE *next;
133 } PAGESIZE;
134
135
136 typedef struct _tagOPTIONENTRY {
137     char                        *Name;          /* eg "True" */
138     char                        *FullName;      /* eg "Installed" */
139     char                        *InvocationString; /* Often NULL */
140     struct _tagOPTIONENTRY      *next;
141 } OPTIONENTRY;
142
143 typedef struct _tagOPTION { /* Treat bool as a special case of pickone */
144     char                        *OptionName;    /* eg "*Option1" */
145     char                        *FullName;      /* eg "Envelope Feeder" */
146     char                        *DefaultOption; /* eg "False" */
147     OPTIONENTRY                 *Options;
148     struct _tagOPTION           *next;
149 } OPTION;
150
151 typedef struct _tagCONSTRAINT {
152     char                        *Feature1;
153     char                        *Value1;
154     char                        *Feature2;
155     char                        *Value2;
156     struct _tagCONSTRAINT       *next;
157 } CONSTRAINT;
158
159 typedef struct _tagINPUTSLOT {
160     char                        *Name;
161     char                        *FullName;
162     char                        *InvocationString;
163     WORD                        WinBin; /* eg DMBIN_LOWER */
164     struct _tagINPUTSLOT        *next;
165 } INPUTSLOT;
166
167 typedef struct {
168     char                *NickName;
169     int                 LanguageLevel;
170     BOOL                ColorDevice;
171     int                 DefaultResolution;
172     signed int          LandscapeOrientation;
173     char                *JCLBegin;
174     char                *JCLToPSInterpreter;
175     char                *JCLEnd;
176     char                *DefaultFont;
177     FONTNAME            *InstalledFonts; /* ptr to a list of FontNames */
178     PAGESIZE            *PageSizes;
179     OPTION              *InstalledOptions;
180     CONSTRAINT          *Constraints;
181     INPUTSLOT           *InputSlots;
182 } PPD;
183
184 typedef struct {
185     DEVMODEA                    dmPublic;
186     struct _tagdocprivate {
187       int dummy;
188     }                           dmDocPrivate;
189     struct _tagdrvprivate {
190       UINT      numInstalledOptions; /* Options at end of struct */
191     }                           dmDrvPrivate;
192
193 /* Now comes:
194
195 numInstalledOptions of OPTIONs
196
197 */
198
199 } PSDRV_DEVMODEA;
200
201 typedef struct _tagPI {
202     char                    *FriendlyName;
203     PPD                     *ppd;
204     PSDRV_DEVMODEA          *Devmode;
205     FONTFAMILY              *Fonts;
206     PPRINTER_ENUM_VALUESA   FontSubTable;
207     DWORD                   FontSubTableSize;
208     struct _tagPI           *next;
209 } PRINTERINFO;
210
211 typedef struct {
212     float               r, g, b;
213 } PSRGB;
214
215 typedef struct {
216     float               i;
217 } PSGRAY;
218
219
220 /* def's for PSCOLOR.type */
221 #define PSCOLOR_GRAY    0
222 #define PSCOLOR_RGB     1
223
224 typedef struct {
225     int                 type;
226     union {
227         PSRGB  rgb;
228         PSGRAY gray;
229     }                   value;
230 } PSCOLOR;
231
232 typedef struct {
233     AFM                 *afm;
234     TEXTMETRICW         tm;
235     INT                 size;
236     float               scale;
237     INT                 escapement;
238     PSCOLOR             color;
239     BOOL                set;            /* Have we done a setfont yet */
240 } PSFONT;
241
242 typedef struct {
243     PSCOLOR             color;
244     BOOL                set;
245 } PSBRUSH;
246
247 typedef struct {
248     INT                 style;
249     INT         width;
250     char                *dash;
251     PSCOLOR             color;
252     BOOL                set;
253 } PSPEN;
254
255 typedef struct {
256     HANDLE16            hJob;
257     LPSTR               output;         /* Output file/port */
258     BOOL                banding;        /* Have we received a NEXTBAND */
259     BOOL                OutOfPage;      /* Page header not sent yet */
260     INT                 PageNo;
261 } JOB;
262
263 typedef struct {
264     PSFONT              font;           /* Current PS font */
265     PSPEN               pen;
266     PSBRUSH             brush;
267     PSCOLOR             bkColor;
268     PSCOLOR             inkColor;       /* Last colour set */
269     JOB                 job;
270     PSDRV_DEVMODEA      *Devmode;
271     PRINTERINFO         *pi;
272     RECT                PageSize;      /* Imageable area in device co-ords */
273 } PSDRV_PDEVICE;
274
275 typedef struct {
276     PRINTERINFO *pi;
277     PSDRV_DEVMODEA *dlgdm;
278 } PSDRV_DLGINFO;
279
280 extern INT16 WINAPI PSDRV_ExtDeviceMode16(HWND16 hwnd, HANDLE16 hDriver,
281                     LPDEVMODEA lpdmOutput, LPSTR lpszDevice, LPSTR lpszPort,
282                     LPDEVMODEA lpdmInput, LPSTR lpszProfile, WORD fwMode);
283
284 extern HANDLE PSDRV_Heap;
285 extern char *PSDRV_ANSIVector[256];
286
287 extern void PSDRV_MergeDevmodes(PSDRV_DEVMODEA *dm1, PSDRV_DEVMODEA *dm2,
288                          PRINTERINFO *pi);
289 extern BOOL PSDRV_GetFontMetrics(void);
290 extern PPD *PSDRV_ParsePPD(char *fname);
291 extern PRINTERINFO *PSDRV_FindPrinterInfo(LPCSTR name);
292 extern AFM *PSDRV_FindAFMinList(FONTFAMILY *head, char *name);
293 extern BOOL PSDRV_AddAFMtoList(FONTFAMILY **head, AFM *afm);
294 extern void PSDRV_FreeAFMList( FONTFAMILY *head );
295
296 extern BOOL WINAPI PSDRV_Init(HINSTANCE hinst, DWORD reason, LPVOID reserved);
297 extern HFONT16 PSDRV_FONT_SelectObject( DC *dc, HFONT16 hfont, FONTOBJ *font);
298 extern HPEN PSDRV_PEN_SelectObject( DC * dc, HPEN hpen, PENOBJ * pen );
299 extern HBRUSH PSDRV_BRUSH_SelectObject( DC * dc, HBRUSH hbrush,
300                                           BRUSHOBJ * brush );
301
302 extern BOOL PSDRV_Brush(DC *dc, BOOL EO);
303 extern BOOL PSDRV_SetFont( DC *dc );
304 extern BOOL PSDRV_SetPen( DC *dc );
305
306 extern BOOL PSDRV_CmpColor(PSCOLOR *col1, PSCOLOR *col2);
307 extern BOOL PSDRV_CopyColor(PSCOLOR *col1, PSCOLOR *col2);
308 extern void PSDRV_CreateColor( PSDRV_PDEVICE *physDev, PSCOLOR *pscolor,
309                      COLORREF wincolor );
310 extern char PSDRV_UnicodeToANSI(int u);
311
312 extern INT PSDRV_WriteHeader( DC *dc, LPCSTR title );
313 extern INT PSDRV_WriteFooter( DC *dc );
314 extern INT PSDRV_WriteNewPage( DC *dc );
315 extern INT PSDRV_WriteEndPage( DC *dc );
316 extern BOOL PSDRV_WriteMoveTo(DC *dc, INT x, INT y);
317 extern BOOL PSDRV_WriteLineTo(DC *dc, INT x, INT y);
318 extern BOOL PSDRV_WriteStroke(DC *dc);
319 extern BOOL PSDRV_WriteRectangle(DC *dc, INT x, INT y, INT width, 
320                         INT height);
321 extern BOOL PSDRV_WriteRRectangle(DC *dc, INT x, INT y, INT width, 
322                         INT height);
323 extern BOOL PSDRV_WriteSetFont(DC *dc, BOOL UseANSI);
324 extern BOOL PSDRV_WriteShow(DC *dc, LPCWSTR str, INT count);
325 extern BOOL PSDRV_WriteReencodeFont(DC *dc);
326 extern BOOL PSDRV_WriteSetPen(DC *dc);
327 extern BOOL PSDRV_WriteArc(DC *dc, INT x, INT y, INT w, INT h,
328                              double ang1, double ang2);
329 extern BOOL PSDRV_WriteSetColor(DC *dc, PSCOLOR *color);
330 extern BOOL PSDRV_WriteSetBrush(DC *dc);
331 extern BOOL PSDRV_WriteFill(DC *dc);
332 extern BOOL PSDRV_WriteEOFill(DC *dc);
333 extern BOOL PSDRV_WriteGSave(DC *dc);
334 extern BOOL PSDRV_WriteGRestore(DC *dc);
335 extern BOOL PSDRV_WriteNewPath(DC *dc);
336 extern BOOL PSDRV_WriteClosePath(DC *dc);
337 extern BOOL PSDRV_WriteInitClip(DC *dc);
338 extern BOOL PSDRV_WriteClip(DC *dc);
339 extern BOOL PSDRV_WriteRectClip(DC *dc, INT x, INT y, INT w, INT h);
340 extern BOOL PSDRV_WriteRectClip2(DC *dc, CHAR *pszArrayName);
341 extern BOOL PSDRV_WriteEOClip(DC *dc);
342 extern BOOL PSDRV_WriteHatch(DC *dc);
343 extern BOOL PSDRV_WriteRotate(DC *dc, float ang);
344 extern BOOL PSDRV_WriteIndexColorSpaceBegin(DC *dc, int size);
345 extern BOOL PSDRV_WriteIndexColorSpaceEnd(DC *dc);
346 extern BOOL PSDRV_WriteRGB(DC *dc, COLORREF *map, int number);
347 extern BOOL PSDRV_WriteImageDict(DC *dc, WORD depth, INT xDst, INT yDst,
348                                  INT widthDst, INT heightDst, INT widthSrc,
349                                  INT heightSrc, char *bits);
350 extern BOOL PSDRV_WriteBytes(DC *dc, const BYTE *bytes, int number);
351 extern BOOL PSDRV_WriteDIBits16(DC *dc, const WORD *words, int number);
352 extern BOOL PSDRV_WriteDIBits24(DC *dc, const BYTE *bits, int number);
353 extern BOOL PSDRV_WriteDIBits32(DC *dc, const BYTE *bits, int number);
354 extern int PSDRV_WriteSpool(DC *dc, LPSTR lpData, WORD cch);
355 extern BOOL PSDRV_WritePatternDict(DC *dc, BITMAP *bm, BYTE *bits);
356 extern BOOL PSDRV_WriteArrayPut(DC *dc, CHAR *pszArrayName, INT nIndex, LONG lCoord);
357 extern BOOL PSDRV_WriteArrayDef(DC *dc, CHAR *pszArrayName, INT nSize);
358
359 extern BOOL PSDRV_Arc( DC *dc, INT left, INT top, INT right,
360                          INT bottom, INT xstart, INT ystart,
361                          INT xend, INT yend );
362 extern BOOL PSDRV_Chord( DC *dc, INT left, INT top, INT right,
363                            INT bottom, INT xstart, INT ystart,
364                            INT xend, INT yend );
365 extern BOOL PSDRV_Ellipse( DC *dc, INT left, INT top, INT right,
366                              INT bottom );
367 extern INT PSDRV_EndDoc( DC *dc );
368 extern INT PSDRV_EndPage( DC *dc );
369 extern BOOL PSDRV_EnumDeviceFonts( HDC hdc, LPLOGFONTW plf, 
370                                    DEVICEFONTENUMPROC proc, LPARAM lp );
371 extern INT PSDRV_Escape( DC *dc, INT nEscape, INT cbInput, 
372                            SEGPTR lpInData, SEGPTR lpOutData );
373 extern BOOL PSDRV_ExtTextOut( DC *dc, INT x, INT y, UINT flags,
374                                 const RECT *lprect, LPCWSTR str, UINT count,
375                                 const INT *lpDx );
376 extern BOOL PSDRV_GetCharWidth( DC *dc, UINT firstChar, UINT lastChar,
377                                   LPINT buffer );
378 extern BOOL PSDRV_GetTextExtentPoint( DC *dc, LPCWSTR str, INT count,
379                                         LPSIZE size );
380 extern BOOL PSDRV_GetTextMetrics( DC *dc, TEXTMETRICW *metrics );
381 extern BOOL PSDRV_LineTo( DC *dc, INT x, INT y );
382 extern BOOL PSDRV_PatBlt( DC *dc, INT x, INT y, INT width, INT height, DWORD
383                           dwRop);
384 extern BOOL PSDRV_Pie( DC *dc, INT left, INT top, INT right,
385                          INT bottom, INT xstart, INT ystart,
386                          INT xend, INT yend );
387 extern BOOL PSDRV_Polygon( DC *dc, const POINT* pt, INT count );
388 extern BOOL PSDRV_Polyline( DC *dc, const POINT* pt, INT count );
389 extern BOOL PSDRV_PolyPolygon( DC *dc, const POINT* pts, const INT* counts,
390                                  UINT polygons );
391 extern BOOL PSDRV_PolyPolyline( DC *dc, const POINT* pts, const DWORD* counts,
392                                   DWORD polylines );
393 extern BOOL PSDRV_Rectangle( DC *dc, INT left, INT top, INT right,
394                               INT bottom );
395 extern BOOL PSDRV_RoundRect(DC *dc, INT left, INT top, INT right,
396                               INT bottom, INT ell_width, INT ell_height);
397 extern HGDIOBJ PSDRV_SelectObject( DC *dc, HGDIOBJ handle );
398 extern COLORREF PSDRV_SetBkColor( DC *dc, COLORREF color );
399 extern VOID PSDRV_SetDeviceClipping( DC *dc );
400 extern COLORREF PSDRV_SetPixel( DC *dc, INT x, INT y, COLORREF color );
401 extern COLORREF PSDRV_SetTextColor( DC *dc, COLORREF color );
402 extern INT PSDRV_StartDoc( DC *dc, const DOCINFOA *doc );
403 extern INT PSDRV_StartPage( DC *dc );
404 extern INT PSDRV_StretchDIBits( DC *dc, INT xDst, INT yDst,
405                                 INT widthDst, INT heightDst, INT xSrc,
406                                 INT ySrc, INT widthSrc, INT heightSrc,
407                                 const void *bits, const BITMAPINFO *info,
408                                 UINT wUsage, DWORD dwRop );
409
410 extern INT PSDRV_ExtDeviceMode(LPSTR lpszDriver, HWND hwnd,
411                                LPDEVMODEA lpdmOutput,
412                                LPSTR lpszDevice, LPSTR lpszPort,
413                                LPDEVMODEA lpdmInput, LPSTR lpszProfile,
414                                DWORD dwMode);
415 extern DWORD PSDRV_DeviceCapabilities(LPSTR lpszDriver, LPCSTR lpszDevice,
416                                       LPCSTR lpszPort,
417                                       WORD fwCapability, LPSTR lpszOutput,
418                                       LPDEVMODEA lpdm);
419 VOID PSDRV_DrawLine( DC *dc );
420 INT PSDRV_GlyphListInit();
421 GLYPHNAME *PSDRV_GlyphName(LPCSTR szName);
422 VOID PSDRV_IndexGlyphList();
423 BOOL PSDRV_GetTrueTypeMetrics();
424
425 #endif
426
427