b664761c79
We now truncate the font name as it goes out to GDI APIs, in console API servicing, and in the propsheet. I attempted to defer truncating the font to as far up the stack as possible, so as to make FontInfo usable for the broadest set of cases. There were a couple questions that came up: I know that `Settings` gets memset (memsat?) by the registry deserializer, and perhaps that's another place for us to tackle. Right now, this pull request enables fonts whose names are >= 32 characters _in Windows Terminal only_, but the underpinnings are there for conhost as well. We'd need to explicitly break at the API, or perhaps return a failure or log something to telemetry. * Should we log truncation at the API boundary to telemetry? -> Later; followup filed (#3123) * Should we fix Settings here, or later? -> Later; followup filed (#3123) * `TrueTypeFontList` is built out of things in winconp, the private console header. Concern about interop structures. -> Not used for interop, followup filed to clean it up (#3123) * Is `unsigned int` right for codepage? For width? -> Yes: codepage became UINT (from WORD) when we moved from Win16 to Win32 This commit also includes a workaround for #3170. Growing CONSOLE_INFORMATION made us lose the struct layout lottery during release builds, and this was an expedient fix. Closes #602. Related to #3123.
31 lines
910 B
C++
31 lines
910 B
C++
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
|
|
#include "precomp.h"
|
|
|
|
#include "renderFontDefaults.hpp"
|
|
|
|
#pragma hdrstop
|
|
|
|
RenderFontDefaults::RenderFontDefaults()
|
|
{
|
|
LOG_IF_NTSTATUS_FAILED(TrueTypeFontList::s_Initialize());
|
|
}
|
|
|
|
RenderFontDefaults::~RenderFontDefaults()
|
|
{
|
|
LOG_IF_FAILED(TrueTypeFontList::s_Destroy());
|
|
}
|
|
|
|
[[nodiscard]] HRESULT RenderFontDefaults::RetrieveDefaultFontNameForCodepage(const unsigned int codePage,
|
|
std::wstring& outFaceName)
|
|
try
|
|
{
|
|
// GH#3123: Propagate font length changes up through Settings and propsheet
|
|
wchar_t faceName[LF_FACESIZE]{ 0 };
|
|
NTSTATUS status = TrueTypeFontList::s_SearchByCodePage(codePage, faceName, ARRAYSIZE(faceName));
|
|
outFaceName.assign(faceName);
|
|
return HRESULT_FROM_NT(status);
|
|
}
|
|
CATCH_RETURN();
|