137 if (hOldFont ==
NULL)
139 DPRINT1(
"GetFontCellSize: SelectObject failed\n");
153 DPRINT1(
"GetFontCellSize: GetTextMetrics failed\n");
169 LogSize =
tm.tmHeight -
tm.tmInternalLeading;
194 LPCWSTR FaceName = lplf->lfFaceName;
233 if ( ( ((lplf->lfPitchAndFamily & 0x03) !=
FIXED_PITCH)
242 DPRINT1(
"Font '%S' rejected because it%s (lfPitchAndFamily = %d)\n",
244 !(lplf->lfPitchAndFamily &
FIXED_PITCH) ?
"'s not FIXED_PITCH" 247 lplf->lfPitchAndFamily);
254 DPRINT1(
"TrueType font '%S' rejected because it's not FF_MODERN (lfPitchAndFamily = %d)\n",
255 FaceName, lplf->lfPitchAndFamily);
260 if (FaceName[0] ==
L'@')
262 DPRINT1(
"Font '%S' rejected because it's vertical\n", FaceName);
279 &&
wcscmp(FaceName,
L"Terminal") != 0
283 DPRINT1(
"TrueType font '%S' rejected because it's not Asian charset (lfCharSet = %d)\n",
284 FaceName, lplf->lfCharSet);
300 DPRINT1(
"Cached TrueType font '%S' rejected because it claims a code page that is not Asian charset (lfCharSet = %d)\n",
301 FaceName, lplf->lfCharSet);
310 DPRINT1(
"Non-TrueType font '%S' rejected because it's not Asian charset or OEM_CHARSET (lfCharSet = %d)\n",
311 FaceName, lplf->lfCharSet);
316 if (
wcscmp(FaceName,
L"Terminal") != 0)
318 DPRINT1(
"Non-TrueType font '%S' rejected because it's not 'Terminal'\n", FaceName);
333 DPRINT1(
"Non-TrueType font '%S' rejected because it's not ANSI_CHARSET or DEFAULT_CHARSET or OEM_CHARSET (lfCharSet = %d)\n",
334 FaceName, lplf->lfCharSet);
384 return Param.IsValidFont;
401 DWORD dwNumValues = 0;
419 L"Software\\Microsoft\\Windows NT\\CurrentVersion\\Console\\TrueTypeFont",
430 DPRINT(
"ConCfgReadUserSettings: RegQueryInfoKeyW failed\n");
435 for (dwIndex = 0; dwIndex < dwNumValues; dwIndex++)
437 dwValue =
sizeof(szValue);
441 DPRINT1(
"InitTTFontCache: RegEnumValueW failed, continuing...\n");
449 CodePage =
wcstoul(szValueName, &pszNext, 10);
457 DPRINT1(
"InitTTFontCache: Failed to allocate memory, continuing...\n");
466 if (*pszNext ==
L'*')
478 pszNext,
wcslen(pszNext));
483 pszNext +=
wcslen(pszNext) + 1;
486 if (*pszNext ==
L'*')
495 pszNext,
wcslen(pszNext));
HFONT WINAPI CreateFontIndirectW(CONST LOGFONTW *lplf)
int WINAPI EnumFontFamiliesExW(HDC hdc, LPLOGFONTW lpLogfont, FONTENUMPROCW lpEnumFontFamExProc, LPARAM lParam, DWORD dwFlags)
STRSAFEAPI StringCchCopyNW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc, size_t cchToCopy)
BOOL WINAPI GetTextMetricsW(_In_ HDC, _Out_ LPTEXTMETRICW)
#define IsCJKCharSet(CharSet)
#define NTM_NONNEGATIVE_AC
HDC WINAPI GetDC(_In_opt_ HWND)
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
BYTE CodePageToCharSet(IN UINT CodePage)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
_Check_return_ unsigned long __cdecl wcstoul(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
#define InsertTailList(ListHead, Entry)
_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty(_In_ const LIST_ENTRY *ListHead)
VOID InitTTFontCache(VOID)
#define IsAdditionalTTFont(FaceName)
VOID ClearTTFontCache(VOID)
#define IsCJKCodePage(CodePage)
LONG WINAPI RegCloseKey(HKEY hKey)
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
#define CLIP_DEFAULT_PRECIS
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
LONG WINAPI RegEnumValueW(_In_ HKEY hKey, _In_ DWORD index, _Out_ LPWSTR value, _Inout_ PDWORD val_count, _Reserved_ PDWORD reserved, _Out_opt_ PDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ PDWORD count)
HFONT CreateConsoleFont2(IN LONG Height, IN LONG Width OPTIONAL, IN OUT PCONSOLE_STATE_INFO ConsoleInfo)
static BOOL CALLBACK IsValidConsoleFontProc(IN PLOGFONTW lplf, IN PNEWTEXTMETRICW lpntm, IN DWORD FontType, IN LPARAM lParam)
FORCEINLINE PLIST_ENTRY RemoveHeadList(_Inout_ PLIST_ENTRY ListHead)
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
BOOL GetFontCellSize(IN HDC hDC OPTIONAL, IN HFONT hFont, OUT PUINT Height, OUT PUINT Width)
PVOID NTAPI RtlAllocateHeap(IN PVOID HeapHandle, IN ULONG Flags, IN SIZE_T Size)
struct _LIST_ENTRY * Flink
#define OUT_DEFAULT_PRECIS
LONG WINAPI RegQueryInfoKeyW(HKEY hKey, LPWSTR lpClass, LPDWORD lpcClass, LPDWORD lpReserved, LPDWORD lpcSubKeys, LPDWORD lpcMaxSubKeyLen, LPDWORD lpcMaxClassLen, LPDWORD lpcValues, LPDWORD lpcMaxValueNameLen, LPDWORD lpcMaxValueLen, LPDWORD lpcbSecurityDescriptor, PFILETIME lpftLastWriteTime)
WCHAR FaceName[LF_FACESIZE]
int WINAPI GetDeviceCaps(_In_opt_ HDC, _In_ int)
static const WCHAR Cleanup[]
BOOL WINAPI TranslateCharsetInfo(LPDWORD lpSrc, LPCHARSETINFO lpCs, DWORD flags)
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
VOID RefreshTTFontCache(VOID)
#define InitializeListHead(ListHead)
PTT_FONT_ENTRY FindCachedTTFont(IN LPCWSTR FaceName, IN UINT CodePage)
static CONSOLE_SCREEN_BUFFER_INFO ConsoleInfo
HFONT CreateConsoleFontEx(IN LONG Height, IN LONG Width OPTIONAL, IN OUT LPWSTR FaceName, IN ULONG FontFamily, IN ULONG FontWeight, IN UINT CodePage)
struct _IS_VALID_CONSOLE_FONT_PARAM * PIS_VALID_CONSOLE_FONT_PARAM
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
HFONT CreateConsoleFont(IN OUT PCONSOLE_STATE_INFO ConsoleInfo)
BOOL IsValidConsoleFont2(IN PLOGFONTW lplf, IN PNEWTEXTMETRICW lpntm, IN DWORD FontType, IN UINT CodePage)
WCHAR FaceNameAlt[LF_FACESIZE]
WCHAR lfFaceName[LF_FACESIZE]
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
#define RtlZeroMemory(Destination, Length)
struct _IS_VALID_CONSOLE_FONT_PARAM IS_VALID_CONSOLE_FONT_PARAM
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
base of all file and directory entries
BOOL WINAPI GetTextExtentPoint32W(_In_ HDC hdc, _In_reads_(c) LPCWSTR lpString, _In_ int c, _Out_ LPSIZE psizl)
BOOL IsValidConsoleFont(IN LPCWSTR FaceName, IN UINT CodePage)
#define TRUETYPE_FONTTYPE
#define IsAdditionalTTFontCP(FaceName, CodePage)
#define HKEY_LOCAL_MACHINE
PULONG MinorVersion OPTIONAL