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
PSDRV_ExtTextOut( PHYSDEV dev
, INT x
, INT y
, UINT flags
, const RECT
*lprect
, LPCWSTR str
, UINT count
,
42 PSDRV_PDEVICE
*physDev
= get_psdrv_dev( dev
);
44 BOOL bClipped
= FALSE
;
47 TRACE("(x=%d, y=%d, flags=0x%08x, str=%s, count=%d, lpDx=%p)\n", x
, y
,
48 flags
, debugstr_wn(str
, count
), count
, lpDx
);
50 if(physDev
->job
.id
== 0) return FALSE
;
52 /* write font if not already written */
57 /* set clipping and/or draw background */
58 if ((flags
& (ETO_CLIPPED
| ETO_OPAQUE
)) && (lprect
!= NULL
))
60 PSDRV_WriteGSave(dev
);
61 PSDRV_WriteRectangle(dev
, lprect
->left
, lprect
->top
, lprect
->right
- lprect
->left
,
62 lprect
->bottom
- lprect
->top
);
64 if (flags
& ETO_OPAQUE
)
67 PSDRV_WriteGSave(dev
);
68 PSDRV_WriteSetColor(dev
, &physDev
->bkColor
);
70 PSDRV_WriteGRestore(dev
);
73 if (flags
& ETO_CLIPPED
)
79 bResult
= PSDRV_Text(dev
, x
, y
, flags
, str
, count
, !(bClipped
&& bOpaque
), lpDx
);
80 PSDRV_WriteGRestore(dev
);
84 bResult
= PSDRV_Text(dev
, x
, y
, flags
, str
, count
, TRUE
, lpDx
);
91 /***********************************************************************
94 static BOOL
PSDRV_Text(PHYSDEV dev
, INT x
, INT y
, UINT flags
, LPCWSTR str
,
95 UINT count
, BOOL bDrawBackground
, const INT
*lpDx
)
97 PSDRV_PDEVICE
*physDev
= get_psdrv_dev( dev
);
103 if(physDev
->font
.fontloc
== Download
)
104 glyphs
= (LPWORD
)str
;
106 PSDRV_WriteMoveTo(dev
, x
, y
);
109 if(physDev
->font
.fontloc
== Download
)
110 PSDRV_WriteDownloadGlyphShow(dev
, glyphs
, count
);
112 PSDRV_WriteBuiltinGlyphShow(dev
, str
, count
);
116 POINT offset
= {0, 0};
118 for(i
= 0; i
< count
-1; i
++) {
119 if(physDev
->font
.fontloc
== Download
)
120 PSDRV_WriteDownloadGlyphShow(dev
, glyphs
+ i
, 1);
122 PSDRV_WriteBuiltinGlyphShow(dev
, str
+ i
, 1);
125 offset
.x
+= lpDx
[i
* 2];
126 offset
.y
+= lpDx
[i
* 2 + 1];
130 PSDRV_WriteMoveTo(dev
, x
+ offset
.x
, y
+ offset
.y
);
132 if(physDev
->font
.fontloc
== Download
)
133 PSDRV_WriteDownloadGlyphShow(dev
, glyphs
+ i
, 1);
135 PSDRV_WriteBuiltinGlyphShow(dev
, str
+ i
, 1);