Build AFM data for core PostScript fonts into WINEPS.
[wine.git] / dlls / wineps / psdrv.h
blobf0ca0d9152ca285080a777db1ecc465bcbda287c
1 #ifndef __WINE_PSDRV_H
2 #define __WINE_PSDRV_H
4 /*
5 * PostScript driver definitions
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"
17 typedef struct {
18 INT index;
19 LPCSTR sz;
20 } GLYPHNAME;
22 typedef struct {
23 LONG UV;
24 GLYPHNAME *name;
25 } UNICODEGLYPH;
27 typedef struct {
28 INT size;
29 const UNICODEGLYPH *glyphs;
30 } UNICODEVECTOR;
32 extern const INT PSDRV_AGLGlyphNamesSize;
33 extern GLYPHNAME PSDRV_AGLGlyphNames[];
34 extern UNICODEVECTOR PSDRV_AdobeGlyphList;
36 typedef struct {
37 float llx, lly, urx, ury;
38 } AFMBBOX;
40 typedef struct _tagAFMLIGS {
41 char *successor;
42 char *ligature;
43 struct _tagAFMLIGS *next;
44 } AFMLIGS;
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;
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;
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 */
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) */
96 typedef struct _tagAFMLISTENTRY {
97 AFM *afm;
98 struct _tagAFMLISTENTRY *next;
99 } AFMLISTENTRY;
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;
107 extern FONTFAMILY *PSDRV_AFMFontList;
108 extern AFM *const PSDRV_BuiltinAFMs[]; /* last element is NULL */
110 typedef struct _tagFONTNAME {
111 char *Name;
112 struct _tagFONTNAME *next;
113 } FONTNAME;
115 typedef struct {
116 float llx, lly, urx, ury;
117 } IMAGEABLEAREA;
119 typedef struct {
120 float x, y;
121 } PAPERDIMENSION;
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;
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;
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;
151 typedef struct _tagCONSTRAINT {
152 char *Feature1;
153 char *Value1;
154 char *Feature2;
155 char *Value2;
156 struct _tagCONSTRAINT *next;
157 } CONSTRAINT;
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;
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;
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;
193 /* Now comes:
195 numInstalledOptions of OPTIONs
199 } PSDRV_DEVMODEA;
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;
211 typedef struct {
212 float r, g, b;
213 } PSRGB;
215 typedef struct {
216 float i;
217 } PSGRAY;
220 /* def's for PSCOLOR.type */
221 #define PSCOLOR_GRAY 0
222 #define PSCOLOR_RGB 1
224 typedef struct {
225 int type;
226 union {
227 PSRGB rgb;
228 PSGRAY gray;
229 } value;
230 } PSCOLOR;
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;
242 typedef struct {
243 PSCOLOR color;
244 BOOL set;
245 } PSBRUSH;
247 typedef struct {
248 INT style;
249 INT width;
250 char *dash;
251 PSCOLOR color;
252 BOOL set;
253 } PSPEN;
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;
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;
275 typedef struct {
276 PRINTERINFO *pi;
277 PSDRV_DEVMODEA *dlgdm;
278 } PSDRV_DLGINFO;
280 extern INT16 WINAPI PSDRV_ExtDeviceMode16(HWND16 hwnd, HANDLE16 hDriver,
281 LPDEVMODEA lpdmOutput, LPSTR lpszDevice, LPSTR lpszPort,
282 LPDEVMODEA lpdmInput, LPSTR lpszProfile, WORD fwMode);
284 extern HANDLE PSDRV_Heap;
285 extern char *PSDRV_ANSIVector[256];
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 );
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 );
302 extern BOOL PSDRV_Brush(DC *dc, BOOL EO);
303 extern BOOL PSDRV_SetFont( DC *dc );
304 extern BOOL PSDRV_SetPen( DC *dc );
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);
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);
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 );
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();
425 #endif