Fixed build errors. Now to test.
This commit is contained in:
parent
2f02836181
commit
a5bbc83359
|
@ -5,7 +5,11 @@
|
||||||
#define uiprivAlloc(x, y) uiAlloc(x, y)
|
#define uiprivAlloc(x, y) uiAlloc(x, y)
|
||||||
#define uiprivRealloc(x, y, z) uiRealloc(x, y, z)
|
#define uiprivRealloc(x, y, z) uiRealloc(x, y, z)
|
||||||
#define uiprivFree(x) uiFree(x)
|
#define uiprivFree(x) uiFree(x)
|
||||||
|
#ifndef _WIN32
|
||||||
#define uiprivStricmp(x, y) strcasecmp(x, y)
|
#define uiprivStricmp(x, y) strcasecmp(x, y)
|
||||||
|
#else
|
||||||
|
#define uiprivStricmp(x, y) stricmp(x, y)
|
||||||
|
#endif
|
||||||
|
|
||||||
// attribute.c
|
// attribute.c
|
||||||
extern uiAttribute *uiprivAttributeRetain(uiAttribute *a);
|
extern uiAttribute *uiprivAttributeRetain(uiAttribute *a);
|
||||||
|
|
|
@ -210,6 +210,7 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
// also needed by applyEffectsAttributes() below
|
// also needed by applyEffectsAttributes() below
|
||||||
|
// TODO provide all the fields of std::hash and std::equal_to?
|
||||||
class applyEffectsHash {
|
class applyEffectsHash {
|
||||||
public:
|
public:
|
||||||
typedef combinedEffectsAttr *ceaptr;
|
typedef combinedEffectsAttr *ceaptr;
|
||||||
|
|
|
@ -59,7 +59,7 @@ uiDrawTextLayout *uiDrawNewTextLayout(uiDrawTextLayoutParams *p)
|
||||||
logHRESULT(L"error applying text layout alignment", hr);
|
logHRESULT(L"error applying text layout alignment", hr);
|
||||||
|
|
||||||
hr = dwfactory->CreateTextLayout(
|
hr = dwfactory->CreateTextLayout(
|
||||||
(const WCHAR *) attrstrUTF16(p->String), attrstrUTF16Len(p->String),
|
(const WCHAR *) uiprivAttributedStringUTF16String(p->String), uiprivAttributedStringUTF16Len(p->String),
|
||||||
tl->format,
|
tl->format,
|
||||||
// FLOAT is float, not double, so this should work... TODO
|
// FLOAT is float, not double, so this should work... TODO
|
||||||
FLT_MAX, FLT_MAX,
|
FLT_MAX, FLT_MAX,
|
||||||
|
@ -84,11 +84,11 @@ uiDrawTextLayout *uiDrawNewTextLayout(uiDrawTextLayoutParams *p)
|
||||||
if (hr != S_OK)
|
if (hr != S_OK)
|
||||||
logHRESULT(L"error setting IDWriteTextLayout max layout width", hr);
|
logHRESULT(L"error setting IDWriteTextLayout max layout width", hr);
|
||||||
|
|
||||||
attrstrToIDWriteTextLayoutAttrs(p, tl->layout, &(tl->backgroundParams));
|
uiprivAttributedStringApplyAttributesToDWriteTextLayout(p, tl->layout, &(tl->backgroundParams));
|
||||||
|
|
||||||
// and finally copy the UTF-8/UTF-16 index conversion tables
|
// and finally copy the UTF-8/UTF-16 index conversion tables
|
||||||
tl->u8tou16 = attrstrCopyUTF8ToUTF16(p->String, &(tl->nUTF8));
|
tl->u8tou16 = uiprivAttributedStringCopyUTF8ToUTF16Table(p->String, &(tl->nUTF8));
|
||||||
tl->u16tou8 = attrstrCopyUTF16ToUTF8(p->String, &(tl->nUTF16));
|
tl->u16tou8 = uiprivAttributedStringCopyUTF16ToUTF8Table(p->String, &(tl->nUTF16));
|
||||||
|
|
||||||
return tl;
|
return tl;
|
||||||
}
|
}
|
||||||
|
@ -97,7 +97,7 @@ void uiDrawFreeTextLayout(uiDrawTextLayout *tl)
|
||||||
{
|
{
|
||||||
uiFree(tl->u16tou8);
|
uiFree(tl->u16tou8);
|
||||||
uiFree(tl->u8tou16);
|
uiFree(tl->u8tou16);
|
||||||
for (auto p in *(tl->backgroundParams))
|
for (auto p : *(tl->backgroundParams))
|
||||||
uiprivFree(p);
|
uiprivFree(p);
|
||||||
delete tl->backgroundParams;
|
delete tl->backgroundParams;
|
||||||
tl->layout->Release();
|
tl->layout->Release();
|
||||||
|
@ -147,7 +147,7 @@ drawingEffectsAttr::drawingEffectsAttr(void)
|
||||||
this->hasUnderlineColor = false;
|
this->hasUnderlineColor = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual HRESULT STDMETHODCALLTYPE drawingEffectsAttr::QueryInterface(REFIID riid, void **ppvObject)
|
HRESULT STDMETHODCALLTYPE drawingEffectsAttr::QueryInterface(REFIID riid, void **ppvObject)
|
||||||
{
|
{
|
||||||
if (ppvObject == NULL)
|
if (ppvObject == NULL)
|
||||||
return E_POINTER;
|
return E_POINTER;
|
||||||
|
@ -160,13 +160,13 @@ virtual HRESULT STDMETHODCALLTYPE drawingEffectsAttr::QueryInterface(REFIID riid
|
||||||
return E_NOINTERFACE;
|
return E_NOINTERFACE;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ULONG STDMETHODCALLTYPE drawingEffectsAttr::AddRef(void)
|
ULONG STDMETHODCALLTYPE drawingEffectsAttr::AddRef(void)
|
||||||
{
|
{
|
||||||
this->refcount++;
|
this->refcount++;
|
||||||
return this->refcount;
|
return this->refcount;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ULONG STDMETHODCALLTYPE drawingEffectsAttr::Release(void)
|
ULONG STDMETHODCALLTYPE drawingEffectsAttr::Release(void)
|
||||||
{
|
{
|
||||||
this->refcount--;
|
this->refcount--;
|
||||||
if (this->refcount == 0) {
|
if (this->refcount == 0) {
|
||||||
|
@ -315,7 +315,7 @@ public:
|
||||||
virtual HRESULT STDMETHODCALLTYPE DrawGlyphRun(void *clientDrawingContext, FLOAT baselineOriginX, FLOAT baselineOriginY, DWRITE_MEASURING_MODE measuringMode, const DWRITE_GLYPH_RUN *glyphRun, const DWRITE_GLYPH_RUN_DESCRIPTION *glyphRunDescription, IUnknown *clientDrawingEffect)
|
virtual HRESULT STDMETHODCALLTYPE DrawGlyphRun(void *clientDrawingContext, FLOAT baselineOriginX, FLOAT baselineOriginY, DWRITE_MEASURING_MODE measuringMode, const DWRITE_GLYPH_RUN *glyphRun, const DWRITE_GLYPH_RUN_DESCRIPTION *glyphRunDescription, IUnknown *clientDrawingEffect)
|
||||||
{
|
{
|
||||||
D2D1_POINT_2F baseline;
|
D2D1_POINT_2F baseline;
|
||||||
drawingEffecsAttr *dea = (drawingEffectAttrs *) clientDrawingEffect;
|
drawingEffectsAttr *dea = (drawingEffectsAttr *) clientDrawingEffect;
|
||||||
ID2D1SolidColorBrush *brush;
|
ID2D1SolidColorBrush *brush;
|
||||||
|
|
||||||
baseline.x = baselineOriginX;
|
baseline.x = baselineOriginX;
|
||||||
|
@ -330,7 +330,7 @@ public:
|
||||||
}
|
}
|
||||||
if (brush == NULL) {
|
if (brush == NULL) {
|
||||||
brush = this->black;
|
brush = this->black;
|
||||||
brush->Retain();
|
brush->AddRef();
|
||||||
}
|
}
|
||||||
this->rt->DrawGlyphRun(
|
this->rt->DrawGlyphRun(
|
||||||
baseline,
|
baseline,
|
||||||
|
@ -387,17 +387,17 @@ public:
|
||||||
}
|
}
|
||||||
if (brush == NULL) {
|
if (brush == NULL) {
|
||||||
brush = this->black;
|
brush = this->black;
|
||||||
brush->Retain();
|
brush->AddRef();
|
||||||
}
|
}
|
||||||
rect.left = baselineOriginX;
|
rect.left = baselineOriginX;
|
||||||
rect.top = baselineOriginY + underline->offset;
|
rect.top = baselineOriginY + underline->offset;
|
||||||
rect.right = rect.left + underline->width;
|
rect.right = rect.left + underline->width;
|
||||||
rect.bottom = rect.top + underline->thickness;
|
rect.bottom = rect.top + underline->thickness;
|
||||||
switch (utype) {
|
switch (utype) {
|
||||||
case uiDrawUnderlineStyleSingle:
|
case uiUnderlineSingle:
|
||||||
this->rt->FillRectangle(&rect, brush);
|
this->rt->FillRectangle(&rect, brush);
|
||||||
break;
|
break;
|
||||||
case uiDrawUnderlineStyleDouble:
|
case uiUnderlineDouble:
|
||||||
// TODO do any of the matrix methods return errors?
|
// TODO do any of the matrix methods return errors?
|
||||||
// TODO standardize double-underline shape across platforms? wavy underline shape?
|
// TODO standardize double-underline shape across platforms? wavy underline shape?
|
||||||
this->rt->GetTransform(&pixeltf);
|
this->rt->GetTransform(&pixeltf);
|
||||||
|
@ -420,7 +420,7 @@ public:
|
||||||
rect.bottom = rect.top + underline->thickness;
|
rect.bottom = rect.top + underline->thickness;
|
||||||
this->rt->FillRectangle(&rect, brush);
|
this->rt->FillRectangle(&rect, brush);
|
||||||
break;
|
break;
|
||||||
case uiDrawUnderlineStyleSuggestion:
|
case uiUnderlineSuggestion:
|
||||||
{ // TODO get rid of the extra block
|
{ // TODO get rid of the extra block
|
||||||
// TODO properly clean resources on failure
|
// TODO properly clean resources on failure
|
||||||
// TODO use fully qualified C overloads for all methods
|
// TODO use fully qualified C overloads for all methods
|
||||||
|
|
|
@ -47,7 +47,7 @@ WCHAR *uiprivFontCollectionFamilyName(fontCollection *fc, IDWriteFontFamily *fam
|
||||||
hr = family->GetFamilyNames(&names);
|
hr = family->GetFamilyNames(&names);
|
||||||
if (hr != S_OK)
|
if (hr != S_OK)
|
||||||
logHRESULT(L"error getting names of font out", hr);
|
logHRESULT(L"error getting names of font out", hr);
|
||||||
str = fontCollectionCorrectString(fc, names);
|
str = uiprivFontCollectionCorrectString(fc, names);
|
||||||
names->Release();
|
names->Release();
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
|
@ -87,7 +87,7 @@ static void defaultOnChanged(uiFontButton *b, void *data)
|
||||||
// do nothing
|
// do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
void uiFontButtonFont(uiFontButton *b, uiDrawFontDescriptor *desc)
|
void uiFontButtonFont(uiFontButton *b, uiFontDescriptor *desc)
|
||||||
{
|
{
|
||||||
uiprivFontDescriptorFromIDWriteFont(b->params.font, desc);
|
uiprivFontDescriptorFromIDWriteFont(b->params.font, desc);
|
||||||
desc->Family = toUTF8(b->params.familyName);
|
desc->Family = toUTF8(b->params.familyName);
|
||||||
|
|
|
@ -18,7 +18,7 @@ struct fontDialog {
|
||||||
|
|
||||||
struct fontDialogParams *params;
|
struct fontDialogParams *params;
|
||||||
|
|
||||||
fontCollection *fc;
|
struct fontCollection *fc;
|
||||||
|
|
||||||
RECT sampleRect;
|
RECT sampleRect;
|
||||||
HWND sampleBox;
|
HWND sampleBox;
|
||||||
|
@ -169,7 +169,7 @@ static WCHAR *fontStyleName(struct fontCollection *fc, IDWriteFont *font)
|
||||||
hr = font->GetFaceNames(&str);
|
hr = font->GetFaceNames(&str);
|
||||||
if (hr != S_OK)
|
if (hr != S_OK)
|
||||||
logHRESULT(L"error getting font style name for font dialog", hr);
|
logHRESULT(L"error getting font style name for font dialog", hr);
|
||||||
wstr = fontCollectionCorrectString(fc, str);
|
wstr = uiprivFontCollectionCorrectString(fc, str);
|
||||||
str->Release();
|
str->Release();
|
||||||
return wstr;
|
return wstr;
|
||||||
}
|
}
|
||||||
|
@ -365,7 +365,7 @@ static void fontDialogDrawSampleText(struct fontDialog *f, ID2D1RenderTarget *rt
|
||||||
if (hr != S_OK)
|
if (hr != S_OK)
|
||||||
exists = FALSE;
|
exists = FALSE;
|
||||||
if (exists) {
|
if (exists) {
|
||||||
sample = fontCollectionCorrectString(f->fc, sampleStrings);
|
sample = uiprivFontCollectionCorrectString(f->fc, sampleStrings);
|
||||||
sampleStrings->Release();
|
sampleStrings->Release();
|
||||||
} else
|
} else
|
||||||
sample = L"The quick brown fox jumps over the lazy dog.";
|
sample = L"The quick brown fox jumps over the lazy dog.";
|
||||||
|
@ -474,13 +474,13 @@ static struct fontDialog *beginFontDialog(HWND hwnd, LPARAM lParam)
|
||||||
f->styleCombobox = getDlgItem(f->hwnd, rcFontStyleCombobox);
|
f->styleCombobox = getDlgItem(f->hwnd, rcFontStyleCombobox);
|
||||||
f->sizeCombobox = getDlgItem(f->hwnd, rcFontSizeCombobox);
|
f->sizeCombobox = getDlgItem(f->hwnd, rcFontSizeCombobox);
|
||||||
|
|
||||||
f->fc = loadFontCollection();
|
f->fc = uiprivLoadFontCollection();
|
||||||
nFamilies = f->fc->fonts->GetFontFamilyCount();
|
nFamilies = f->fc->fonts->GetFontFamilyCount();
|
||||||
for (i = 0; i < nFamilies; i++) {
|
for (i = 0; i < nFamilies; i++) {
|
||||||
hr = f->fc->fonts->GetFontFamily(i, &family);
|
hr = f->fc->fonts->GetFontFamily(i, &family);
|
||||||
if (hr != S_OK)
|
if (hr != S_OK)
|
||||||
logHRESULT(L"error getting font family", hr);
|
logHRESULT(L"error getting font family", hr);
|
||||||
wname = fontCollectionFamilyName(f->fc, family);
|
wname = uiprivFontCollectionFamilyName(f->fc, family);
|
||||||
pos = cbAddString(f->familyCombobox, wname);
|
pos = cbAddString(f->familyCombobox, wname);
|
||||||
uiFree(wname);
|
uiFree(wname);
|
||||||
cbSetItemData(f->familyCombobox, (WPARAM) pos, (LPARAM) family);
|
cbSetItemData(f->familyCombobox, (WPARAM) pos, (LPARAM) family);
|
||||||
|
@ -503,7 +503,7 @@ static void endFontDialog(struct fontDialog *f, INT_PTR code)
|
||||||
{
|
{
|
||||||
wipeStylesBox(f);
|
wipeStylesBox(f);
|
||||||
cbWipeAndReleaseData(f->familyCombobox);
|
cbWipeAndReleaseData(f->familyCombobox);
|
||||||
fontCollectionFree(f->fc);
|
uiprivFontCollectionFree(f->fc);
|
||||||
if (EndDialog(f->hwnd, code) == 0)
|
if (EndDialog(f->hwnd, code) == 0)
|
||||||
logLastError(L"error ending font dialog");
|
logLastError(L"error ending font dialog");
|
||||||
uiFree(f);
|
uiFree(f);
|
||||||
|
@ -520,13 +520,13 @@ static INT_PTR tryFinishDialog(struct fontDialog *f, WPARAM wParam)
|
||||||
}
|
}
|
||||||
|
|
||||||
// OK
|
// OK
|
||||||
destroyFontDialogParams(f->params);
|
uiprivDestroyFontDialogParams(f->params);
|
||||||
f->params->font = (IDWriteFont *) cbGetItemData(f->styleCombobox, f->curStyle);
|
f->params->font = (IDWriteFont *) cbGetItemData(f->styleCombobox, f->curStyle);
|
||||||
// we need to save font from being destroyed with the combobox
|
// we need to save font from being destroyed with the combobox
|
||||||
f->params->font->AddRef();
|
f->params->font->AddRef();
|
||||||
f->params->size = f->curSize;
|
f->params->size = f->curSize;
|
||||||
family = (IDWriteFontFamily *) cbGetItemData(f->familyCombobox, f->curFamily);
|
family = (IDWriteFontFamily *) cbGetItemData(f->familyCombobox, f->curFamily);
|
||||||
f->params->familyName = fontCollectionFamilyName(f->fc, family);
|
f->params->familyName = uiprivFontCollectionFamilyName(f->fc, family);
|
||||||
f->params->styleName = fontStyleName(f->fc, f->params->font);
|
f->params->styleName = fontStyleName(f->fc, f->params->font);
|
||||||
endFontDialog(f, 2);
|
endFontDialog(f, 2);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -636,7 +636,7 @@ void uiprivLoadInitialFontDialogParams(struct fontDialogParams *params)
|
||||||
// If Arial isn't found, we'll use Helvetica and then MS Sans Serif as fallbacks, and if not, we'll just grab the first font family in the collection.
|
// If Arial isn't found, we'll use Helvetica and then MS Sans Serif as fallbacks, and if not, we'll just grab the first font family in the collection.
|
||||||
|
|
||||||
// We need the correct localized name for Regular (and possibly Arial too? let's say yes to be safe), so let's grab the strings from DirectWrite instead of hardcoding them.
|
// We need the correct localized name for Regular (and possibly Arial too? let's say yes to be safe), so let's grab the strings from DirectWrite instead of hardcoding them.
|
||||||
fc = loadFontCollection();
|
fc = uiprivLoadFontCollection();
|
||||||
family = tryFindFamily(fc->fonts, L"Arial");
|
family = tryFindFamily(fc->fonts, L"Arial");
|
||||||
if (family == NULL) {
|
if (family == NULL) {
|
||||||
family = tryFindFamily(fc->fonts, L"Helvetica");
|
family = tryFindFamily(fc->fonts, L"Helvetica");
|
||||||
|
@ -661,12 +661,12 @@ void uiprivLoadInitialFontDialogParams(struct fontDialogParams *params)
|
||||||
|
|
||||||
params->font = font;
|
params->font = font;
|
||||||
params->size = 10;
|
params->size = 10;
|
||||||
params->familyName = fontCollectionFamilyName(fc, family);
|
params->familyName = uiprivFontCollectionFamilyName(fc, family);
|
||||||
params->styleName = fontStyleName(fc, font);
|
params->styleName = fontStyleName(fc, font);
|
||||||
|
|
||||||
// don't release font; we still need it
|
// don't release font; we still need it
|
||||||
family->Release();
|
family->Release();
|
||||||
fontCollectionFree(fc);
|
uiprivFontCollectionFree(fc);
|
||||||
}
|
}
|
||||||
|
|
||||||
void uiprivDestroyFontDialogParams(struct fontDialogParams *params)
|
void uiprivDestroyFontDialogParams(struct fontDialogParams *params)
|
||||||
|
|
|
@ -49,13 +49,13 @@ void uiprivFontDescriptorFromIDWriteFont(IDWriteFont *font, uiFontDescriptor *ui
|
||||||
|
|
||||||
dwitalic = font->GetStyle();
|
dwitalic = font->GetStyle();
|
||||||
// TODO reverse the above misalignment if it is corrected
|
// TODO reverse the above misalignment if it is corrected
|
||||||
uidesc->Weight = (uiDrawTextWeight) (font->GetWeight());
|
uidesc->Weight = (uiTextWeight) (font->GetWeight());
|
||||||
dwstretch = font->GetStretch();
|
dwstretch = font->GetStretch();
|
||||||
|
|
||||||
for (uidesc->Italic = uiDrawTextItalicNormal; uidesc->Italic < uiDrawTextItalicItalic; uidesc->Italic++)
|
for (uidesc->Italic = uiTextItalicNormal; uidesc->Italic < uiTextItalicItalic; uidesc->Italic++)
|
||||||
if (dwriteItalics[uidesc->Italic] == dwitalic)
|
if (dwriteItalics[uidesc->Italic] == dwitalic)
|
||||||
break;
|
break;
|
||||||
for (uidesc->Stretch = uiDrawTextStretchUltraCondensed; uidesc->Stretch < uiDrawTextStretchUltraExpanded; uidesc->Stretch++)
|
for (uidesc->Stretch = uiTextStretchUltraCondensed; uidesc->Stretch < uiTextStretchUltraExpanded; uidesc->Stretch++)
|
||||||
if (dwriteStretches[uidesc->Stretch] == dwstretch)
|
if (dwriteStretches[uidesc->Stretch] == dwstretch)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,8 @@ static uiForEach addToTypography(const uiOpenTypeFeatures *otf, char a, char b,
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
|
||||||
ZeroMemory(&dff, sizeof (DWRITE_FONT_FEATURE));
|
ZeroMemory(&dff, sizeof (DWRITE_FONT_FEATURE));
|
||||||
dff.nameTag = /*(DWRITE_FONT_FEATURE_TAG)*/ DWRITE_MAKE_OPENTYPE_TAG(a, b, c, d);
|
// yes, the cast here is necessary (the compiler will complain otherwise)...
|
||||||
|
dff.nameTag = (DWRITE_FONT_FEATURE_TAG) DWRITE_MAKE_OPENTYPE_TAG(a, b, c, d);
|
||||||
dff.parameter = (UINT32) value;
|
dff.parameter = (UINT32) value;
|
||||||
hr = dt->AddFontFeature(dff);
|
hr = dt->AddFontFeature(dff);
|
||||||
if (hr != S_OK)
|
if (hr != S_OK)
|
||||||
|
|
Loading…
Reference in New Issue