33 int len = strlen(
string);
35 text.resize(MultiByteToWideChar(CP_UTF8, 0,
string,
len, &
text[0],
len));
42 LOGFONTA font_to_find;
43 font_to_find.lfCharSet = ANSI_CHARSET;
44 size_t font_len = strlen(fontname);
45 if (font_len >
sizeof(font_to_find.lfFaceName) - 1) {
46 font_len =
sizeof(font_to_find.lfFaceName) - 1;
48 memcpy(font_to_find.lfFaceName, fontname, font_len);
49 font_to_find.lfFaceName[
sizeof(font_to_find.lfFaceName) - 1] =
'\0';
50 font_to_find.lfPitchAndFamily = 0;
53 (LPARAM)&found_font, 0) == 0) {
54 found_font.lfHeight = (LONG)-fontsize;
55 found_font.lfWidth = 0;
56 font = std::make_unique<Font>(reference.
hdc, &found_font);
58 font = std::make_unique<Font>(FontFamily::GenericSerif(),
59 static_cast<REAL>(fontsize));
79 Graphics measureGraphics(deviceContext.
hdc);
80 measureGraphics.SetTextRenderingHint(TextRenderingHintAntiAlias);
81 measureGraphics.MeasureString(&
layout->text[0],
layout->text.size(),
82 layout->font.get(), PointF(0.0f, 0.0f),
85 FontFamily fontFamily;
86 layout->font->GetFamily(&fontFamily);
87 int style =
layout->font->GetStyle();
91 span->
size.
x = boundingBox.Width;
92 span->
size.
y =
layout->font->GetHeight(&measureGraphics);
94 fontFamily.GetCellAscent(style) * span->
font->
size /
95 fontFamily.GetEmHeight(style);
static int CALLBACK fetch_first_font(const LOGFONTA *logFont, const TEXTMETRICA *, DWORD, LPARAM lParam)
static gvtextlayout_engine_t gdiplus_textlayout_engine
void gdiplus_free_layout(void *layout)
bool gdiplus_textlayout(textspan_t *span, char **)
gvplugin_installed_t gvtextlayout_gdiplus_types[]
double yoffset_centerline
void(* free_layout)(void *layout)