Implemented the new font button stuff on Windows.

This commit is contained in:
Pietro Gagliardi 2016-04-20 14:17:55 -04:00
parent e6effa042d
commit 655e05463d
3 changed files with 20 additions and 15 deletions

View File

@ -57,7 +57,7 @@ struct uiDrawTextFont {
double size;
};
uiDrawTextFont *mkTextFont(IDWriteFont *df, WCHAR *family, BOOL copyFamily, double size)
uiDrawTextFont *mkTextFont(IDWriteFont *df, BOOL addRef, WCHAR *family, BOOL copyFamily, double size)
{
uiDrawTextFont *font;
WCHAR *copy;
@ -65,6 +65,8 @@ uiDrawTextFont *mkTextFont(IDWriteFont *df, WCHAR *family, BOOL copyFamily, doub
font = uiNew(uiDrawTextFont);
font->f = df;
if (addRef)
font->f->AddRef();
if (copyFamily) {
copy = (WCHAR *) uiAlloc((wcslen(family) + 1) * sizeof (WCHAR), "WCHAR[]");
wcscpy(copy, family);
@ -260,6 +262,7 @@ uiDrawTextFont *uiDrawLoadClosestFont(const uiDrawTextFontDescriptor *desc)
logHRESULT("error loading font in uiDrawLoadClosestFont()", hr);
font = mkTextFont(match,
FALSE, // we own the initial reference; no need to add another one
wfamily, FALSE, // will be freed with font
desc->Size);

View File

@ -7,6 +7,8 @@ struct uiFontButton {
HWND hwnd;
struct fontDialogParams params;
BOOL already;
void (*onChanged)(uiFontButton *, void *);
void *onChangedData;
};
static void onDestroy(uiFontButton *);
@ -47,7 +49,7 @@ static BOOL onWM_COMMAND(uiControl *c, HWND hwnd, WORD code, LRESULT *lResult)
parent = GetAncestor(b->hwnd, GA_ROOT); // TODO didn't we have a function for this
if (showFontDialog(parent, &(b->params))) {
updateFontButtonLabel(b);
// TODO event
(*(b->onChanged))(b, b->onChangedData);
}
*lResult = 0;
@ -78,25 +80,25 @@ static void minimumSize(uiWindowsControl *c, uiWindowsSizing *d, intmax_t *width
*height = uiWindowsDlgUnitsToY(buttonHeight, d->BaseY);
}
#if 0
TODO
static void defaultOnClicked(uiButton *b, void *data)
static void defaultOnChanged(uiFontButton *b, void *data)
{
// do nothing
}
#endif
// TODO document that GetFont returns a NEW instance each time
uiDrawTextFont *uiFontButtonFont(uiFontButton *b)
{
// we don't own b->params.font; we have to add a reference
// we don't own b->params.familyName either; we have to copy it
return mkTextFont(b->params.font, TRUE, b->params.familyName, TRUE, b->params.size);
}
// TODO document that the Handle of a Font may not be unique
#if 0
TODO
void uiButtonOnClicked(uiButton *b, void (*f)(uiButton *, void *), void *data)
void uiFontButtonOnChanged(uiFontButton *b, void (*f)(uiFontButton *, void *), void *data)
{
b->onClicked = f;
b->onClickedData = data;
b->onChanged = f;
b->onChangedData = data;
}
#endif
uiFontButton *uiNewFontButton(void)
{
@ -114,7 +116,7 @@ uiFontButton *uiNewFontButton(void)
updateFontButtonLabel(b);
uiWindowsRegisterWM_COMMANDHandler(b->hwnd, onWM_COMMAND, uiControl(b));
//TODO uiButtonOnClicked(b, defaultOnClicked, NULL);
uiFontButtonOnChanged(b, defaultOnChanged, NULL);
uiWindowsFinishNewControl(b, uiFontButton);

View File

@ -162,7 +162,7 @@ extern WCHAR *fontCollectionCorrectString(fontCollection *fc, IDWriteLocalizedSt
// drawtext.cpp
#ifdef __cplusplus
extern uiDrawTextFont *mkTextFont(IDWriteFont *df, WCHAR *family, BOOL copyFamily, double size);
extern uiDrawTextFont *mkTextFont(IDWriteFont *df, BOOL addRef, WCHAR *family, BOOL copyFamily, double size);
struct dwriteAttr {
uiDrawTextWeight weight;
uiDrawTextItalic italic;