You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
2.7 KiB
111 lines
2.7 KiB
/****************************** Module Header ******************************\
|
|
* Module Name: text.c
|
|
*
|
|
* Copyright (c) 1985 - 1999, Microsoft Corporation
|
|
*
|
|
* This module contains the MessageBox API and related functions.
|
|
*
|
|
* History:
|
|
* 10-01-90 EricK Created.
|
|
* 11-20-90 DarrinM Merged in User text APIs.
|
|
* 02-07-91 DarrinM Removed TextOut, ExtTextOut, and GetTextExtentPoint stubs.
|
|
\***************************************************************************/
|
|
|
|
|
|
/***************************************************************************\
|
|
* PSMGetTextExtent
|
|
*
|
|
* NOTE: This routine should only be called with the system font since having
|
|
* to realize a new font would cause memory to move...
|
|
*
|
|
* LATER: Can't this be eliminated altogether? Nothing should be moving
|
|
* anymore.
|
|
*
|
|
* History:
|
|
* 11-13-90 JimA Ported.
|
|
\***************************************************************************/
|
|
|
|
#ifdef _USERK_
|
|
|
|
BOOL xxxPSMGetTextExtent(
|
|
HDC hdc,
|
|
LPWSTR lpstr,
|
|
int cch,
|
|
PSIZE psize)
|
|
{
|
|
int result;
|
|
WCHAR szTemp[255], *pchOut;
|
|
PTHREADINFO ptiCurrent = PtiCurrentShared();
|
|
TL tl;
|
|
|
|
if (cch > sizeof(szTemp)/sizeof(WCHAR)) {
|
|
pchOut = (WCHAR*)UserAllocPool((cch+1) * sizeof(WCHAR), TAG_RTL);
|
|
if (pchOut == NULL) {
|
|
psize->cx = psize->cy = 0;
|
|
return FALSE;
|
|
}
|
|
ThreadLockPool(ptiCurrent, pchOut, &tl);
|
|
} else {
|
|
pchOut = szTemp;
|
|
}
|
|
|
|
result = HIWORD(GetPrefixCount(lpstr, cch, pchOut, cch));
|
|
|
|
if (result) {
|
|
lpstr = pchOut;
|
|
cch -= result;
|
|
}
|
|
if (CALL_LPK(ptiCurrent)) {
|
|
xxxClientGetTextExtentPointW(hdc, lpstr, cch, psize);
|
|
} else {
|
|
UserGetTextExtentPointW(hdc, lpstr, cch, psize);
|
|
}
|
|
if (pchOut != szTemp)
|
|
ThreadUnlockAndFreePool(ptiCurrent, &tl);
|
|
|
|
/*
|
|
* IanJa everyone seems to ignore the ret val
|
|
*/
|
|
return TRUE;
|
|
}
|
|
|
|
#else
|
|
|
|
BOOL PSMGetTextExtent(
|
|
HDC hdc,
|
|
LPCWSTR lpstr,
|
|
int cch,
|
|
PSIZE psize)
|
|
{
|
|
int result;
|
|
WCHAR szTemp[255], *pchOut;
|
|
|
|
if (cch > sizeof(szTemp)/sizeof(WCHAR)) {
|
|
pchOut = (WCHAR*)UserLocalAlloc(0, (cch+1) * sizeof(WCHAR));
|
|
if (pchOut == NULL) {
|
|
psize->cx = psize->cy = 0;
|
|
return FALSE;
|
|
}
|
|
} else {
|
|
pchOut = szTemp;
|
|
}
|
|
|
|
result = HIWORD(GetPrefixCount(lpstr, cch, pchOut, cch));
|
|
|
|
if (result) {
|
|
lpstr = pchOut;
|
|
cch -= result;
|
|
}
|
|
|
|
UserGetTextExtentPointW(hdc, lpstr, cch, psize);
|
|
|
|
if (pchOut != szTemp)
|
|
UserLocalFree(pchOut);
|
|
|
|
/*
|
|
* IanJa everyone seems to ignore the ret val
|
|
*/
|
|
return TRUE;
|
|
}
|
|
|
|
#endif // _USERK_
|