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.
73 lines
2.1 KiB
C++
73 lines
2.1 KiB
C++
/*++
|
|
Copyright (c) Microsoft Corporation
|
|
Licensed under the MIT license.
|
|
|
|
Module Name:
|
|
- FontInfoBase.hpp
|
|
|
|
Abstract:
|
|
- This serves as the structure defining font information.
|
|
|
|
- FontInfoBase - the base class that holds the font's GDI's LOGFONT
|
|
lfFaceName, lfWeight and lfPitchAndFamily, as well as the code page
|
|
to use for WideCharToMultiByte and font name.
|
|
|
|
Author(s):
|
|
- Michael Niksa (MiNiksa) 17-Nov-2015
|
|
--*/
|
|
|
|
#pragma once
|
|
|
|
#include "IFontDefaultList.hpp"
|
|
|
|
static constexpr wchar_t DEFAULT_TT_FONT_FACENAME[]{ L"__DefaultTTFont__" };
|
|
static constexpr wchar_t DEFAULT_RASTER_FONT_FACENAME[]{ L"Terminal" };
|
|
|
|
class FontInfoBase
|
|
{
|
|
public:
|
|
FontInfoBase(const std::wstring_view faceName,
|
|
const unsigned char family,
|
|
const unsigned int weight,
|
|
const bool fSetDefaultRasterFont,
|
|
const unsigned int uiCodePage);
|
|
|
|
FontInfoBase(const FontInfoBase& fibFont);
|
|
|
|
~FontInfoBase();
|
|
|
|
unsigned char GetFamily() const;
|
|
unsigned int GetWeight() const;
|
|
const std::wstring_view GetFaceName() const;
|
|
unsigned int GetCodePage() const;
|
|
|
|
HRESULT FillLegacyNameBuffer(gsl::span<wchar_t> buffer) const;
|
|
|
|
bool IsTrueTypeFont() const;
|
|
|
|
void SetFromEngine(const std::wstring_view faceName,
|
|
const unsigned char family,
|
|
const unsigned int weight,
|
|
const bool fSetDefaultRasterFont);
|
|
|
|
bool WasDefaultRasterSetFromEngine() const;
|
|
void ValidateFont();
|
|
|
|
static Microsoft::Console::Render::IFontDefaultList* s_pFontDefaultList;
|
|
static void s_SetFontDefaultList(_In_ Microsoft::Console::Render::IFontDefaultList* const pFontDefaultList);
|
|
|
|
friend bool operator==(const FontInfoBase& a, const FontInfoBase& b);
|
|
|
|
protected:
|
|
bool IsDefaultRasterFontNoSize() const;
|
|
|
|
private:
|
|
std::wstring _faceName;
|
|
unsigned int _weight;
|
|
unsigned char _family;
|
|
unsigned int _codePage;
|
|
bool _fDefaultRasterSetFromEngine;
|
|
};
|
|
|
|
bool operator==(const FontInfoBase& a, const FontInfoBase& b);
|