5 * PostScript driver definitions
7 * Copyright 1998 Huw D M Davies
14 #include "wine/wingdi16.h"
29 const UNICODEGLYPH
*glyphs
;
32 extern const INT PSDRV_AGLGlyphNamesSize
;
33 extern GLYPHNAME PSDRV_AGLGlyphNames
[];
34 extern UNICODEVECTOR PSDRV_AdobeGlyphList
;
37 float llx
, lly
, urx
, ury
;
40 typedef struct _tagAFMLIGS
{
43 struct _tagAFMLIGS
*next
;
46 typedef struct _tagAFMMETRICS
{
47 int C
; /* character */
50 GLYPHNAME
*N
; /* name */
52 AFMLIGS
*L
; /* Ligatures */
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 */
68 typedef struct _tagAFM
{
73 LONG Weight
; /* FW_NORMAL etc. */
76 float UnderlinePosition
;
77 float UnderlineThickness
;
83 float FullAscender
; /* Ascent of Aring character */
84 WINMETRICS WinMetrics
;
85 float CharWidths
[256];
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
{
98 struct _tagAFMLISTENTRY
*next
;
101 typedef struct _tagFONTFAMILY
{
102 char *FamilyName
; /* family name */
103 AFMLISTENTRY
*afmlist
; /* list of afms for this family */
104 struct _tagFONTFAMILY
*next
; /* next family */
107 extern FONTFAMILY
*PSDRV_AFMFontList
;
108 extern AFM
*const PSDRV_BuiltinAFMs
[]; /* last element is NULL */
110 typedef struct _tagFONTNAME
{
112 struct _tagFONTNAME
*next
;
116 float llx
, lly
, urx
, ury
;
125 typedef struct _tagPAGESIZE
{
128 char *InvocationString
;
129 IMAGEABLEAREA
*ImageableArea
;
130 PAPERDIMENSION
*PaperDimension
;
131 WORD WinPage
; /*eg DMPAPER_A4. Doesn't really belong here */
132 struct _tagPAGESIZE
*next
;
136 typedef struct _tagOPTIONENTRY
{
137 char *Name
; /* eg "True" */
138 char *FullName
; /* eg "Installed" */
139 char *InvocationString
; /* Often NULL */
140 struct _tagOPTIONENTRY
*next
;
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
;
151 typedef struct _tagCONSTRAINT
{
156 struct _tagCONSTRAINT
*next
;
159 typedef struct _tagINPUTSLOT
{
162 char *InvocationString
;
163 WORD WinBin
; /* eg DMBIN_LOWER */
164 struct _tagINPUTSLOT
*next
;
171 int DefaultResolution
;
172 signed int LandscapeOrientation
;
174 char *JCLToPSInterpreter
;
177 FONTNAME
*InstalledFonts
; /* ptr to a list of FontNames */
179 OPTION
*InstalledOptions
;
180 CONSTRAINT
*Constraints
;
181 INPUTSLOT
*InputSlots
;
186 struct _tagdocprivate
{
189 struct _tagdrvprivate
{
190 UINT numInstalledOptions
; /* Options at end of struct */
195 numInstalledOptions of OPTIONs
201 typedef struct _tagPI
{
204 PSDRV_DEVMODEA
*Devmode
;
206 PPRINTER_ENUM_VALUESA FontSubTable
;
207 DWORD FontSubTableSize
;
220 /* def's for PSCOLOR.type */
221 #define PSCOLOR_GRAY 0
222 #define PSCOLOR_RGB 1
239 BOOL set
; /* Have we done a setfont yet */
257 LPSTR output
; /* Output file/port */
258 BOOL banding
; /* Have we received a NEXTBAND */
259 BOOL OutOfPage
; /* Page header not sent yet */
264 PSFONT font
; /* Current PS font */
268 PSCOLOR inkColor
; /* Last colour set */
270 PSDRV_DEVMODEA
*Devmode
;
272 RECT PageSize
; /* Imageable area in device co-ords */
277 PSDRV_DEVMODEA
*dlgdm
;
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
,
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
,
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
,
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
,
321 extern BOOL
PSDRV_WriteRRectangle(DC
*dc
, INT x
, INT y
, INT width
,
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
,
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
,
376 extern BOOL
PSDRV_GetCharWidth( DC
*dc
, UINT firstChar
, UINT lastChar
,
378 extern BOOL
PSDRV_GetTextExtentPoint( DC
*dc
, LPCWSTR str
, INT count
,
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
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
,
391 extern BOOL
PSDRV_PolyPolyline( DC
*dc
, const POINT
* pts
, const DWORD
* counts
,
393 extern BOOL
PSDRV_Rectangle( DC
*dc
, INT left
, INT top
, INT right
,
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
,
415 extern DWORD
PSDRV_DeviceCapabilities(LPSTR lpszDriver
, LPCSTR lpszDevice
,
417 WORD fwCapability
, LPSTR lpszOutput
,
419 VOID
PSDRV_DrawLine( DC
*dc
);
420 INT
PSDRV_GlyphListInit();
421 GLYPHNAME
*PSDRV_GlyphName(LPCSTR szName
);
422 VOID
PSDRV_IndexGlyphList();
423 BOOL
PSDRV_GetTrueTypeMetrics();