Add uiDrawLoadDefaultFont() API

This commit is contained in:
cody271 2017-09-05 16:27:32 -07:00 committed by Niklas Mischkulnig
parent cda991b7e2
commit 2ff751a836
4 changed files with 67 additions and 0 deletions

View File

@ -212,3 +212,8 @@ void uiDrawTextLayoutExtents(uiDrawTextLayout *tl, double *width, double *height
[tl->frame returnWidth:width height:NULL];
[tl->forLines returnWidth:NULL height:height];
}
uiDrawTextFont *uiDrawLoadDefaultFont()
{
return mkTextFontFromNSFont([NSFont systemFontOfSize:0]);
}

2
ui.h
View File

@ -919,6 +919,8 @@ struct uiFontDescriptor {
uiTextStretch Stretch;
};
_UI_EXTERN uiDrawTextFont *uiDrawLoadDefaultFont();
// uiDrawTextLayout is a concrete representation of a
// uiAttributedString that can be displayed in a uiDrawContext.
// It includes information important for the drawing of a block of

View File

@ -79,3 +79,19 @@ void uiDrawTextLayoutExtents(uiDrawTextLayout *tl, double *width, double *height
*width = pangoToCairo(logical.width);
*height = pangoToCairo(logical.height);
}
uiDrawTextFont *uiDrawLoadDefaultFont()
{
GtkWidget *widget;
GtkStyleContext *style;
PangoFontDescription *fontdesc;
PangoFont *font;
widget = g_object_ref_sink(gtk_drawing_area_new());
style = gtk_widget_get_style_context(widget);
gtk_style_context_get(style, GTK_STATE_FLAG_NORMAL,
"font", &fontdesc, NULL);
font = pangoDescToPangoFont(fontdesc);
g_object_unref(widget);
return mkTextFont(font, FALSE);
}

View File

@ -534,3 +534,47 @@ void uiDrawTextLayoutExtents(uiDrawTextLayout *tl, double *width, double *height
// TODO make sure the behavior of this on empty strings is the same on all platforms (ideally should be 0-width, line height-height; TODO note this in the docs too)
*height = metrics.height;
}
uiDrawTextFont *uiDrawLoadDefaultFont()
{
uiDrawTextFont *font;
fontCollection *collection;
IDWriteGdiInterop *gdi;
IDWriteFont *dwfont;
IDWriteFontFamily *dwfamily;
NONCLIENTMETRICS metrics;
WCHAR *family;
double size;
int pixels;
HRESULT hr;
metrics.cbSize = sizeof(metrics);
if (!SystemParametersInfo(SPI_GETNONCLIENTMETRICS, metrics.cbSize, &metrics, 0))
logLastError(L"error getting non-client metrics");
hr = dwfactory->GetGdiInterop(&gdi);
if (hr != S_OK)
logHRESULT(L"error getting GDI interop", hr);
hr = gdi->CreateFontFromLOGFONT(&metrics.lfMessageFont, &dwfont);
if (hr != S_OK)
logHRESULT(L"error loading font", hr);
hr = dwfont->GetFontFamily(&dwfamily);
if (hr != S_OK)
logHRESULT(L"error loading font family", hr);
collection = loadFontCollection();
family = fontCollectionFamilyName(collection, dwfamily);
pixels = GetDeviceCaps(GetDC(NULL), LOGPIXELSY);
if (pixels == 0)
logLastError(L"error getting device caps");
size = abs(metrics.lfMessageFont.lfHeight) * 72 / pixels;
font = mkTextFont(dwfont, FALSE, family, FALSE, size);
fontCollectionFree(collection);
dwfamily->Release();
gdi->Release();
return font;
}