mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-12 01:17:18 +00:00
86 lines
1.8 KiB
C
86 lines
1.8 KiB
C
|
/*
|
||
|
* Postscript driver text functions
|
||
|
*
|
||
|
* Copyright 1998 Huw D M Davies
|
||
|
*
|
||
|
*/
|
||
|
#include <string.h>
|
||
|
#include "windows.h"
|
||
|
#include "psdrv.h"
|
||
|
#include "debug.h"
|
||
|
#include "print.h"
|
||
|
|
||
|
/***********************************************************************
|
||
|
* PSDRV_ExtTextOut
|
||
|
*/
|
||
|
BOOL32 PSDRV_ExtTextOut( DC *dc, INT32 x, INT32 y, UINT32 flags,
|
||
|
const RECT32 *lprect, LPCSTR str, UINT32 count,
|
||
|
const INT32 *lpDx )
|
||
|
{
|
||
|
PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
|
||
|
char *strbuf;
|
||
|
SIZE32 sz;
|
||
|
|
||
|
TRACE(psdrv, "(x=%d, y=%d, flags=0x%08x, str='%s', count=%d)\n", x, y,
|
||
|
flags, str, count);
|
||
|
|
||
|
strbuf = (char *)HeapAlloc( GetProcessHeap(), 0, count + 1);
|
||
|
if(!strbuf) {
|
||
|
WARN(psdrv, "HeapAlloc failed\n");
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
if(dc->w.textAlign & TA_UPDATECP) {
|
||
|
x = dc->w.CursPosX;
|
||
|
y = dc->w.CursPosY;
|
||
|
}
|
||
|
|
||
|
x = XLPTODP(dc, x);
|
||
|
y = YLPTODP(dc, y);
|
||
|
|
||
|
GetTextExtentPoint32A(dc->hSelf, str, count, &sz);
|
||
|
sz.cx = XLSTODS(dc, sz.cx);
|
||
|
sz.cy = YLSTODS(dc, sz.cy);
|
||
|
|
||
|
switch(dc->w.textAlign & (TA_LEFT | TA_CENTER | TA_RIGHT) ) {
|
||
|
case TA_LEFT:
|
||
|
if(dc->w.textAlign & TA_UPDATECP)
|
||
|
dc->w.CursPosX = XDPTOLP(dc, x + sz.cx);
|
||
|
break;
|
||
|
|
||
|
case TA_CENTER:
|
||
|
x -= sz.cx/2;
|
||
|
break;
|
||
|
|
||
|
case TA_RIGHT:
|
||
|
x -= sz.cx;
|
||
|
if(dc->w.textAlign & TA_UPDATECP)
|
||
|
dc->w.CursPosX = XDPTOLP(dc, x);
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
switch(dc->w.textAlign & (TA_TOP | TA_BASELINE | TA_BOTTOM) ) {
|
||
|
case TA_TOP:
|
||
|
break;
|
||
|
|
||
|
case TA_BASELINE:
|
||
|
y -= physDev->font.tm.tmAscent;
|
||
|
break;
|
||
|
|
||
|
case TA_BOTTOM:
|
||
|
y -= sz.cy;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
memcpy(strbuf, str, count);
|
||
|
*(strbuf + count) = '\0';
|
||
|
|
||
|
PSDRV_SetFont(dc);
|
||
|
|
||
|
PSDRV_WriteMoveTo(dc, x, y);
|
||
|
PSDRV_WriteShow(dc, strbuf, strlen(strbuf));
|
||
|
|
||
|
HeapFree(GetProcessHeap(), 0, strbuf);
|
||
|
return TRUE;
|
||
|
}
|