2 * PostScript driver text functions
4 * Copyright 1998 Huw D M Davies
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
28 #include "wine/debug.h"
30 WINE_DEFAULT_DEBUG_CHANNEL(psdrv
);
32 static BOOL
PSDRV_Text(PHYSDEV dev
, INT x
, INT y
, UINT flags
,
33 LPCWSTR str
, UINT count
,
34 BOOL bDrawBackground
, const INT
*lpDx
);
36 /***********************************************************************
39 BOOL CDECL
PSDRV_ExtTextOut( PHYSDEV dev
, INT x
, INT y
, UINT flags
,
40 const RECT
*lprect
, LPCWSTR str
, UINT count
,
43 PSDRV_PDEVICE
*physDev
= get_psdrv_dev( dev
);
45 BOOL bClipped
= FALSE
;
48 TRACE("(x=%d, y=%d, flags=0x%08x, str=%s, count=%d, lpDx=%p)\n", x
, y
,
49 flags
, debugstr_wn(str
, count
), count
, lpDx
);
51 if(physDev
->job
.id
== 0) return FALSE
;
53 /* write font if not already written */
58 /* set clipping and/or draw background */
59 if ((flags
& (ETO_CLIPPED
| ETO_OPAQUE
)) && (lprect
!= NULL
))
61 PSDRV_WriteGSave(dev
);
62 PSDRV_WriteRectangle(dev
, lprect
->left
, lprect
->top
, lprect
->right
- lprect
->left
,
63 lprect
->bottom
- lprect
->top
);
65 if (flags
& ETO_OPAQUE
)
68 PSDRV_WriteGSave(dev
);
69 PSDRV_WriteSetColor(dev
, &physDev
->bkColor
);
71 PSDRV_WriteGRestore(dev
);
74 if (flags
& ETO_CLIPPED
)
80 bResult
= PSDRV_Text(dev
, x
, y
, flags
, str
, count
, !(bClipped
&& bOpaque
), lpDx
);
81 PSDRV_WriteGRestore(dev
);
85 bResult
= PSDRV_Text(dev
, x
, y
, flags
, str
, count
, TRUE
, lpDx
);
92 /***********************************************************************
95 static BOOL
PSDRV_Text(PHYSDEV dev
, INT x
, INT y
, UINT flags
, LPCWSTR str
,
96 UINT count
, BOOL bDrawBackground
, const INT
*lpDx
)
98 PSDRV_PDEVICE
*physDev
= get_psdrv_dev( dev
);
104 if(physDev
->font
.fontloc
== Download
)
105 glyphs
= (LPWORD
)str
;
107 PSDRV_WriteMoveTo(dev
, x
, y
);
110 if(physDev
->font
.fontloc
== Download
)
111 PSDRV_WriteDownloadGlyphShow(dev
, glyphs
, count
);
113 PSDRV_WriteBuiltinGlyphShow(dev
, str
, count
);
117 POINT offset
= {0, 0};
119 for(i
= 0; i
< count
-1; i
++) {
120 if(physDev
->font
.fontloc
== Download
)
121 PSDRV_WriteDownloadGlyphShow(dev
, glyphs
+ i
, 1);
123 PSDRV_WriteBuiltinGlyphShow(dev
, str
+ i
, 1);
126 offset
.x
+= lpDx
[i
* 2];
127 offset
.y
+= lpDx
[i
* 2 + 1];
131 PSDRV_WriteMoveTo(dev
, x
+ offset
.x
, y
+ offset
.y
);
133 if(physDev
->font
.fontloc
== Download
)
134 PSDRV_WriteDownloadGlyphShow(dev
, glyphs
+ i
, 1);
136 PSDRV_WriteBuiltinGlyphShow(dev
, str
+ i
, 1);