Skip to content

Commit

Permalink
Windows default font
Browse files Browse the repository at this point in the history
  • Loading branch information
mischnic committed Jun 4, 2018
1 parent e114e71 commit fec28c2
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 45 deletions.
7 changes: 3 additions & 4 deletions examples/drawtext/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -106,16 +106,15 @@ static void handlerDraw(uiAreaHandler *a, uiArea *area, uiAreaDrawParams *p)
} else {
uiFontButtonFont(fontButton, &defaultFont);
}
printf("%s\n", defaultFont.Family);
params.DefaultFont = &defaultFont;
params.Width = p->AreaWidth;
params.Align = (uiDrawTextAlign) uiComboboxSelected(alignment);
textLayout = uiDrawNewTextLayout(&params);
uiDrawText(p->Context, textLayout, 0, 0);
uiDrawFreeTextLayout(textLayout);
if(!useSystemFont) {
uiFreeFontButtonFont(&defaultFont);
}

//TODO RENAME?
uiFreeFontButtonFont(&defaultFont);
}

static void handlerMouseEvent(uiAreaHandler *a, uiArea *area, uiAreaMouseEvent *e)
Expand Down
82 changes: 41 additions & 41 deletions windows/drawtext.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -535,46 +535,46 @@ void uiDrawTextLayoutExtents(uiDrawTextLayout *tl, double *width, double *height
*height = metrics.height;
}

uiDrawTextFont *uiDrawLoadDefaultFont()
void uiDrawLoadDefaultFont(uiFontDescriptor *f)
{
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;
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 = uiprivLoadFontCollection();
family = uiprivFontCollectionFamilyName(collection, dwfamily);

pixels = GetDeviceCaps(GetDC(NULL), LOGPIXELSY);
if (pixels == 0)
logLastError(L"error getting device caps");
size = abs(metrics.lfMessageFont.lfHeight) * 72 / pixels;

uiprivFontDescriptorFromIDWriteFont(dwfont, f);
f->Family = toUTF8(family);
f->Size = size;

uiprivFree(family);
uiprivFontCollectionFree(collection);
dwfamily->Release();
gdi->Release();
}

0 comments on commit fec28c2

Please sign in to comment.