dwrite: Implement SetFontFallback().
This commit is contained in:
parent
c2c3001387
commit
fa1fe44c34
|
@ -235,6 +235,16 @@ static HRESULT get_fontfallback_from_format(const struct dwrite_textformat_data
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static HRESULT set_fontfallback_for_format(struct dwrite_textformat_data *format, IDWriteFontFallback *fallback)
|
||||||
|
{
|
||||||
|
if (format->fallback)
|
||||||
|
IDWriteFontFallback_Release(format->fallback);
|
||||||
|
format->fallback = fallback;
|
||||||
|
if (fallback)
|
||||||
|
IDWriteFontFallback_AddRef(fallback);
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
static struct layout_run *alloc_layout_run(void)
|
static struct layout_run *alloc_layout_run(void)
|
||||||
{
|
{
|
||||||
struct layout_run *ret;
|
struct layout_run *ret;
|
||||||
|
@ -1867,8 +1877,8 @@ static DWRITE_OPTICAL_ALIGNMENT WINAPI dwritetextlayout2_GetOpticalAlignment(IDW
|
||||||
static HRESULT WINAPI dwritetextlayout2_SetFontFallback(IDWriteTextLayout2 *iface, IDWriteFontFallback *fallback)
|
static HRESULT WINAPI dwritetextlayout2_SetFontFallback(IDWriteTextLayout2 *iface, IDWriteFontFallback *fallback)
|
||||||
{
|
{
|
||||||
struct dwrite_textlayout *This = impl_from_IDWriteTextLayout2(iface);
|
struct dwrite_textlayout *This = impl_from_IDWriteTextLayout2(iface);
|
||||||
FIXME("(%p)->(%p): stub\n", This, fallback);
|
TRACE("(%p)->(%p)\n", This, fallback);
|
||||||
return E_NOTIMPL;
|
return set_fontfallback_for_format(&This->format, fallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI dwritetextlayout2_GetFontFallback(IDWriteTextLayout2 *iface, IDWriteFontFallback **fallback)
|
static HRESULT WINAPI dwritetextlayout2_GetFontFallback(IDWriteTextLayout2 *iface, IDWriteFontFallback **fallback)
|
||||||
|
@ -2228,15 +2238,15 @@ static DWRITE_OPTICAL_ALIGNMENT WINAPI dwritetextformat1_layout_GetOpticalAlignm
|
||||||
static HRESULT WINAPI dwritetextformat1_layout_SetFontFallback(IDWriteTextFormat1 *iface, IDWriteFontFallback *fallback)
|
static HRESULT WINAPI dwritetextformat1_layout_SetFontFallback(IDWriteTextFormat1 *iface, IDWriteFontFallback *fallback)
|
||||||
{
|
{
|
||||||
struct dwrite_textlayout *This = impl_layout_form_IDWriteTextFormat1(iface);
|
struct dwrite_textlayout *This = impl_layout_form_IDWriteTextFormat1(iface);
|
||||||
FIXME("(%p)->(%p): stub\n", This, fallback);
|
TRACE("(%p)->(%p)\n", This, fallback);
|
||||||
return E_NOTIMPL;
|
return IDWriteTextLayout2_SetFontFallback(&This->IDWriteTextLayout2_iface, fallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI dwritetextformat1_layout_GetFontFallback(IDWriteTextFormat1 *iface, IDWriteFontFallback **fallback)
|
static HRESULT WINAPI dwritetextformat1_layout_GetFontFallback(IDWriteTextFormat1 *iface, IDWriteFontFallback **fallback)
|
||||||
{
|
{
|
||||||
struct dwrite_textlayout *This = impl_layout_form_IDWriteTextFormat1(iface);
|
struct dwrite_textlayout *This = impl_layout_form_IDWriteTextFormat1(iface);
|
||||||
TRACE("(%p)->(%p): stub\n", This, fallback);
|
TRACE("(%p)->(%p)\n", This, fallback);
|
||||||
return E_NOTIMPL;
|
return IDWriteTextLayout2_GetFontFallback(&This->IDWriteTextLayout2_iface, fallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const IDWriteTextFormat1Vtbl dwritetextformat1_layout_vtbl = {
|
static const IDWriteTextFormat1Vtbl dwritetextformat1_layout_vtbl = {
|
||||||
|
@ -3055,8 +3065,8 @@ static DWRITE_OPTICAL_ALIGNMENT WINAPI dwritetextformat1_GetOpticalAlignment(IDW
|
||||||
static HRESULT WINAPI dwritetextformat1_SetFontFallback(IDWriteTextFormat1 *iface, IDWriteFontFallback *fallback)
|
static HRESULT WINAPI dwritetextformat1_SetFontFallback(IDWriteTextFormat1 *iface, IDWriteFontFallback *fallback)
|
||||||
{
|
{
|
||||||
struct dwrite_textformat *This = impl_from_IDWriteTextFormat1(iface);
|
struct dwrite_textformat *This = impl_from_IDWriteTextFormat1(iface);
|
||||||
FIXME("(%p)->(%p): stub\n", This, fallback);
|
TRACE("(%p)->(%p)\n", This, fallback);
|
||||||
return E_NOTIMPL;
|
return set_fontfallback_for_format(&This->format, fallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI dwritetextformat1_GetFontFallback(IDWriteTextFormat1 *iface, IDWriteFontFallback **fallback)
|
static HRESULT WINAPI dwritetextformat1_GetFontFallback(IDWriteTextFormat1 *iface, IDWriteFontFallback **fallback)
|
||||||
|
|
|
@ -1204,10 +1204,12 @@ static void test_SetVerticalGlyphOrientation(void)
|
||||||
static void test_fallback(void)
|
static void test_fallback(void)
|
||||||
{
|
{
|
||||||
static const WCHAR strW[] = {'a','b','c','d',0};
|
static const WCHAR strW[] = {'a','b','c','d',0};
|
||||||
IDWriteFontFallback *fallback;
|
IDWriteFontFallback *fallback, *fallback2;
|
||||||
IDWriteTextLayout2 *layout2;
|
IDWriteTextLayout2 *layout2;
|
||||||
|
IDWriteTextFormat1 *format1;
|
||||||
IDWriteTextFormat *format;
|
IDWriteTextFormat *format;
|
||||||
IDWriteTextLayout *layout;
|
IDWriteTextLayout *layout;
|
||||||
|
IDWriteFactory2 *factory2;
|
||||||
IDWriteFactory *factory;
|
IDWriteFactory *factory;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
|
||||||
|
@ -1238,6 +1240,43 @@ if (0) /* crashes on native */
|
||||||
ok(hr == S_OK, "got 0x%08x\n", hr);
|
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||||
ok(fallback == NULL, "got %p\n", fallback);
|
ok(fallback == NULL, "got %p\n", fallback);
|
||||||
|
|
||||||
|
hr = IDWriteTextLayout2_QueryInterface(layout2, &IID_IDWriteTextFormat1, (void**)&format1);
|
||||||
|
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||||
|
|
||||||
|
fallback = (void*)0xdeadbeef;
|
||||||
|
hr = IDWriteTextFormat1_GetFontFallback(format1, &fallback);
|
||||||
|
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||||
|
ok(fallback == NULL, "got %p\n", fallback);
|
||||||
|
|
||||||
|
hr = IDWriteFactory_QueryInterface(factory, &IID_IDWriteFactory2, (void**)&factory2);
|
||||||
|
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||||
|
|
||||||
|
fallback = NULL;
|
||||||
|
hr = IDWriteFactory2_GetSystemFontFallback(factory2, &fallback);
|
||||||
|
todo_wine
|
||||||
|
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||||
|
if (hr == S_OK) {
|
||||||
|
ok(fallback != NULL, "got %p\n", fallback);
|
||||||
|
|
||||||
|
hr = IDWriteTextFormat1_SetFontFallback(format1, fallback);
|
||||||
|
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||||
|
|
||||||
|
fallback2 = (void*)0xdeadbeef;
|
||||||
|
hr = IDWriteTextLayout2_GetFontFallback(layout2, &fallback2);
|
||||||
|
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||||
|
ok(fallback2 == fallback, "got %p\n", fallback2);
|
||||||
|
|
||||||
|
hr = IDWriteTextLayout2_SetFontFallback(layout2, NULL);
|
||||||
|
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||||
|
|
||||||
|
fallback2 = (void*)0xdeadbeef;
|
||||||
|
hr = IDWriteTextFormat1_GetFontFallback(format1, &fallback2);
|
||||||
|
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||||
|
ok(fallback2 == NULL, "got %p\n", fallback2);
|
||||||
|
|
||||||
|
IDWriteFontFallback_Release(fallback);
|
||||||
|
}
|
||||||
|
IDWriteTextFormat1_Release(format1);
|
||||||
IDWriteTextLayout2_Release(layout2);
|
IDWriteTextLayout2_Release(layout2);
|
||||||
IDWriteFactory_Release(factory);
|
IDWriteFactory_Release(factory);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue