dwrite: Update to IDWriteFontFace2.
This commit is contained in:
parent
1f9ca4775a
commit
a1ff4f904e
|
@ -113,7 +113,7 @@ struct dwrite_fonttable {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct dwrite_fontface {
|
struct dwrite_fontface {
|
||||||
IDWriteFontFace IDWriteFontFace_iface;
|
IDWriteFontFace2 IDWriteFontFace2_iface;
|
||||||
LONG ref;
|
LONG ref;
|
||||||
|
|
||||||
struct dwrite_fontface_data *data;
|
struct dwrite_fontface_data *data;
|
||||||
|
@ -138,9 +138,9 @@ static HRESULT create_fontfamily_from_data(struct dwrite_fontfamily_data *data,
|
||||||
static HRESULT create_font_base(IDWriteFont **font);
|
static HRESULT create_font_base(IDWriteFont **font);
|
||||||
static HRESULT create_font_from_data(struct dwrite_font_data*,IDWriteFontFamily*,IDWriteFont**);
|
static HRESULT create_font_from_data(struct dwrite_font_data*,IDWriteFontFamily*,IDWriteFont**);
|
||||||
|
|
||||||
static inline struct dwrite_fontface *impl_from_IDWriteFontFace(IDWriteFontFace *iface)
|
static inline struct dwrite_fontface *impl_from_IDWriteFontFace2(IDWriteFontFace2 *iface)
|
||||||
{
|
{
|
||||||
return CONTAINING_RECORD(iface, struct dwrite_fontface, IDWriteFontFace_iface);
|
return CONTAINING_RECORD(iface, struct dwrite_fontface, IDWriteFontFace2_iface);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline struct dwrite_font *impl_from_IDWriteFont2(IDWriteFont2 *iface)
|
static inline struct dwrite_font *impl_from_IDWriteFont2(IDWriteFont2 *iface)
|
||||||
|
@ -224,16 +224,19 @@ static VOID _free_fontfamily_data(struct dwrite_fontfamily_data *data)
|
||||||
heap_free(data);
|
heap_free(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI dwritefontface_QueryInterface(IDWriteFontFace *iface, REFIID riid, void **obj)
|
static HRESULT WINAPI dwritefontface_QueryInterface(IDWriteFontFace2 *iface, REFIID riid, void **obj)
|
||||||
{
|
{
|
||||||
struct dwrite_fontface *This = impl_from_IDWriteFontFace(iface);
|
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
||||||
|
|
||||||
TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), obj);
|
TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), obj);
|
||||||
|
|
||||||
if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDWriteFontFace))
|
if (IsEqualIID(riid, &IID_IDWriteFontFace2) ||
|
||||||
|
IsEqualIID(riid, &IID_IDWriteFontFace1) ||
|
||||||
|
IsEqualIID(riid, &IID_IDWriteFontFace) ||
|
||||||
|
IsEqualIID(riid, &IID_IUnknown))
|
||||||
{
|
{
|
||||||
*obj = iface;
|
*obj = iface;
|
||||||
IDWriteFontFace_AddRef(iface);
|
IDWriteFontFace2_AddRef(iface);
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -241,17 +244,17 @@ static HRESULT WINAPI dwritefontface_QueryInterface(IDWriteFontFace *iface, REFI
|
||||||
return E_NOINTERFACE;
|
return E_NOINTERFACE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ULONG WINAPI dwritefontface_AddRef(IDWriteFontFace *iface)
|
static ULONG WINAPI dwritefontface_AddRef(IDWriteFontFace2 *iface)
|
||||||
{
|
{
|
||||||
struct dwrite_fontface *This = impl_from_IDWriteFontFace(iface);
|
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
||||||
ULONG ref = InterlockedIncrement(&This->ref);
|
ULONG ref = InterlockedIncrement(&This->ref);
|
||||||
TRACE("(%p)->(%d)\n", This, ref);
|
TRACE("(%p)->(%d)\n", This, ref);
|
||||||
return ref;
|
return ref;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ULONG WINAPI dwritefontface_Release(IDWriteFontFace *iface)
|
static ULONG WINAPI dwritefontface_Release(IDWriteFontFace2 *iface)
|
||||||
{
|
{
|
||||||
struct dwrite_fontface *This = impl_from_IDWriteFontFace(iface);
|
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
||||||
ULONG ref = InterlockedDecrement(&This->ref);
|
ULONG ref = InterlockedDecrement(&This->ref);
|
||||||
|
|
||||||
TRACE("(%p)->(%d)\n", This, ref);
|
TRACE("(%p)->(%d)\n", This, ref);
|
||||||
|
@ -259,7 +262,7 @@ static ULONG WINAPI dwritefontface_Release(IDWriteFontFace *iface)
|
||||||
if (!ref)
|
if (!ref)
|
||||||
{
|
{
|
||||||
if (This->cmap.context)
|
if (This->cmap.context)
|
||||||
IDWriteFontFace_ReleaseFontTable(iface, This->cmap.context);
|
IDWriteFontFace2_ReleaseFontTable(iface, This->cmap.context);
|
||||||
_free_fontface_data(This->data);
|
_free_fontface_data(This->data);
|
||||||
heap_free(This);
|
heap_free(This);
|
||||||
}
|
}
|
||||||
|
@ -267,18 +270,19 @@ static ULONG WINAPI dwritefontface_Release(IDWriteFontFace *iface)
|
||||||
return ref;
|
return ref;
|
||||||
}
|
}
|
||||||
|
|
||||||
static DWRITE_FONT_FACE_TYPE WINAPI dwritefontface_GetType(IDWriteFontFace *iface)
|
static DWRITE_FONT_FACE_TYPE WINAPI dwritefontface_GetType(IDWriteFontFace2 *iface)
|
||||||
{
|
{
|
||||||
struct dwrite_fontface *This = impl_from_IDWriteFontFace(iface);
|
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
||||||
TRACE("(%p)\n", This);
|
TRACE("(%p)\n", This);
|
||||||
return This->data->type;
|
return This->data->type;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI dwritefontface_GetFiles(IDWriteFontFace *iface, UINT32 *number_of_files,
|
static HRESULT WINAPI dwritefontface_GetFiles(IDWriteFontFace2 *iface, UINT32 *number_of_files,
|
||||||
IDWriteFontFile **fontfiles)
|
IDWriteFontFile **fontfiles)
|
||||||
{
|
{
|
||||||
|
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
||||||
int i;
|
int i;
|
||||||
struct dwrite_fontface *This = impl_from_IDWriteFontFace(iface);
|
|
||||||
TRACE("(%p)->(%p %p)\n", This, number_of_files, fontfiles);
|
TRACE("(%p)->(%p %p)\n", This, number_of_files, fontfiles);
|
||||||
if (fontfiles == NULL)
|
if (fontfiles == NULL)
|
||||||
{
|
{
|
||||||
|
@ -297,52 +301,52 @@ static HRESULT WINAPI dwritefontface_GetFiles(IDWriteFontFace *iface, UINT32 *nu
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static UINT32 WINAPI dwritefontface_GetIndex(IDWriteFontFace *iface)
|
static UINT32 WINAPI dwritefontface_GetIndex(IDWriteFontFace2 *iface)
|
||||||
{
|
{
|
||||||
struct dwrite_fontface *This = impl_from_IDWriteFontFace(iface);
|
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
||||||
TRACE("(%p)\n", This);
|
TRACE("(%p)\n", This);
|
||||||
return This->data->index;
|
return This->data->index;
|
||||||
}
|
}
|
||||||
|
|
||||||
static DWRITE_FONT_SIMULATIONS WINAPI dwritefontface_GetSimulations(IDWriteFontFace *iface)
|
static DWRITE_FONT_SIMULATIONS WINAPI dwritefontface_GetSimulations(IDWriteFontFace2 *iface)
|
||||||
{
|
{
|
||||||
struct dwrite_fontface *This = impl_from_IDWriteFontFace(iface);
|
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
||||||
TRACE("(%p)\n", This);
|
TRACE("(%p)\n", This);
|
||||||
return This->data->simulations;
|
return This->data->simulations;
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL WINAPI dwritefontface_IsSymbolFont(IDWriteFontFace *iface)
|
static BOOL WINAPI dwritefontface_IsSymbolFont(IDWriteFontFace2 *iface)
|
||||||
{
|
{
|
||||||
struct dwrite_fontface *This = impl_from_IDWriteFontFace(iface);
|
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
||||||
FIXME("(%p): stub\n", This);
|
FIXME("(%p): stub\n", This);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void WINAPI dwritefontface_GetMetrics(IDWriteFontFace *iface, DWRITE_FONT_METRICS *metrics)
|
static void WINAPI dwritefontface_GetMetrics(IDWriteFontFace2 *iface, DWRITE_FONT_METRICS *metrics)
|
||||||
{
|
{
|
||||||
struct dwrite_fontface *This = impl_from_IDWriteFontFace(iface);
|
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
||||||
FIXME("(%p)->(%p): stub\n", This, metrics);
|
FIXME("(%p)->(%p): stub\n", This, metrics);
|
||||||
}
|
}
|
||||||
|
|
||||||
static UINT16 WINAPI dwritefontface_GetGlyphCount(IDWriteFontFace *iface)
|
static UINT16 WINAPI dwritefontface_GetGlyphCount(IDWriteFontFace2 *iface)
|
||||||
{
|
{
|
||||||
struct dwrite_fontface *This = impl_from_IDWriteFontFace(iface);
|
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
||||||
FIXME("(%p): stub\n", This);
|
FIXME("(%p): stub\n", This);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI dwritefontface_GetDesignGlyphMetrics(IDWriteFontFace *iface,
|
static HRESULT WINAPI dwritefontface_GetDesignGlyphMetrics(IDWriteFontFace2 *iface,
|
||||||
UINT16 const *glyph_indices, UINT32 glyph_count, DWRITE_GLYPH_METRICS *metrics, BOOL is_sideways)
|
UINT16 const *glyph_indices, UINT32 glyph_count, DWRITE_GLYPH_METRICS *metrics, BOOL is_sideways)
|
||||||
{
|
{
|
||||||
struct dwrite_fontface *This = impl_from_IDWriteFontFace(iface);
|
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
||||||
FIXME("(%p)->(%p %u %p %d): stub\n", This, glyph_indices, glyph_count, metrics, is_sideways);
|
FIXME("(%p)->(%p %u %p %d): stub\n", This, glyph_indices, glyph_count, metrics, is_sideways);
|
||||||
return E_NOTIMPL;
|
return E_NOTIMPL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI dwritefontface_GetGlyphIndices(IDWriteFontFace *iface, UINT32 const *codepoints,
|
static HRESULT WINAPI dwritefontface_GetGlyphIndices(IDWriteFontFace2 *iface, UINT32 const *codepoints,
|
||||||
UINT32 count, UINT16 *glyph_indices)
|
UINT32 count, UINT16 *glyph_indices)
|
||||||
{
|
{
|
||||||
struct dwrite_fontface *This = impl_from_IDWriteFontFace(iface);
|
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
if (This->is_system)
|
if (This->is_system)
|
||||||
|
@ -378,7 +382,7 @@ static HRESULT WINAPI dwritefontface_GetGlyphIndices(IDWriteFontFace *iface, UIN
|
||||||
if (!This->cmap.data)
|
if (!This->cmap.data)
|
||||||
{
|
{
|
||||||
BOOL exists = FALSE;
|
BOOL exists = FALSE;
|
||||||
hr = IDWriteFontFace_TryGetFontTable(iface, MS_CMAP_TAG, (const void**)&This->cmap.data, &This->cmap.size, &This->cmap.context, &exists);
|
hr = IDWriteFontFace2_TryGetFontTable(iface, MS_CMAP_TAG, (const void**)&This->cmap.data, &This->cmap.size, &This->cmap.context, &exists);
|
||||||
if (FAILED(hr) || !exists)
|
if (FAILED(hr) || !exists)
|
||||||
{
|
{
|
||||||
ERR("Font does not have a CMAP table\n");
|
ERR("Font does not have a CMAP table\n");
|
||||||
|
@ -394,10 +398,10 @@ static HRESULT WINAPI dwritefontface_GetGlyphIndices(IDWriteFontFace *iface, UIN
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI dwritefontface_TryGetFontTable(IDWriteFontFace *iface, UINT32 table_tag,
|
static HRESULT WINAPI dwritefontface_TryGetFontTable(IDWriteFontFace2 *iface, UINT32 table_tag,
|
||||||
const void **table_data, UINT32 *table_size, void **context, BOOL *exists)
|
const void **table_data, UINT32 *table_size, void **context, BOOL *exists)
|
||||||
{
|
{
|
||||||
struct dwrite_fontface *This = impl_from_IDWriteFontFace(iface);
|
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
||||||
if (This->is_system)
|
if (This->is_system)
|
||||||
{
|
{
|
||||||
FIXME("(%p)->(%u %p %p %p %p): stub\n", This, table_tag, table_data, table_size, context, exists);
|
FIXME("(%p)->(%u %p %p %p %p): stub\n", This, table_tag, table_data, table_size, context, exists);
|
||||||
|
@ -437,9 +441,9 @@ static HRESULT WINAPI dwritefontface_TryGetFontTable(IDWriteFontFace *iface, UIN
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void WINAPI dwritefontface_ReleaseFontTable(IDWriteFontFace *iface, void *table_context)
|
static void WINAPI dwritefontface_ReleaseFontTable(IDWriteFontFace2 *iface, void *table_context)
|
||||||
{
|
{
|
||||||
struct dwrite_fontface *This = impl_from_IDWriteFontFace(iface);
|
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
||||||
struct dwrite_fonttablecontext *tablecontext = (struct dwrite_fonttablecontext*)table_context;
|
struct dwrite_fonttablecontext *tablecontext = (struct dwrite_fonttablecontext*)table_context;
|
||||||
IDWriteFontFileStream *stream;
|
IDWriteFontFileStream *stream;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
@ -459,43 +463,177 @@ static void WINAPI dwritefontface_ReleaseFontTable(IDWriteFontFace *iface, void
|
||||||
heap_free(tablecontext);
|
heap_free(tablecontext);
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI dwritefontface_GetGlyphRunOutline(IDWriteFontFace *iface, FLOAT emSize,
|
static HRESULT WINAPI dwritefontface_GetGlyphRunOutline(IDWriteFontFace2 *iface, FLOAT emSize,
|
||||||
UINT16 const *glyph_indices, FLOAT const* glyph_advances, DWRITE_GLYPH_OFFSET const *glyph_offsets,
|
UINT16 const *glyph_indices, FLOAT const* glyph_advances, DWRITE_GLYPH_OFFSET const *glyph_offsets,
|
||||||
UINT32 glyph_count, BOOL is_sideways, BOOL is_rtl, IDWriteGeometrySink *geometrysink)
|
UINT32 glyph_count, BOOL is_sideways, BOOL is_rtl, IDWriteGeometrySink *geometrysink)
|
||||||
{
|
{
|
||||||
struct dwrite_fontface *This = impl_from_IDWriteFontFace(iface);
|
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
||||||
FIXME("(%p)->(%f %p %p %p %u %d %d %p): stub\n", This, emSize, glyph_indices, glyph_advances, glyph_offsets,
|
FIXME("(%p)->(%f %p %p %p %u %d %d %p): stub\n", This, emSize, glyph_indices, glyph_advances, glyph_offsets,
|
||||||
glyph_count, is_sideways, is_rtl, geometrysink);
|
glyph_count, is_sideways, is_rtl, geometrysink);
|
||||||
return E_NOTIMPL;
|
return E_NOTIMPL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI dwritefontface_GetRecommendedRenderingMode(IDWriteFontFace *iface, FLOAT emSize,
|
static HRESULT WINAPI dwritefontface_GetRecommendedRenderingMode(IDWriteFontFace2 *iface, FLOAT emSize,
|
||||||
FLOAT pixels_per_dip, DWRITE_MEASURING_MODE mode, IDWriteRenderingParams* params, DWRITE_RENDERING_MODE* rendering_mode)
|
FLOAT pixels_per_dip, DWRITE_MEASURING_MODE mode, IDWriteRenderingParams* params, DWRITE_RENDERING_MODE* rendering_mode)
|
||||||
{
|
{
|
||||||
struct dwrite_fontface *This = impl_from_IDWriteFontFace(iface);
|
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
||||||
FIXME("(%p)->(%f %f %d %p %p): stub\n", This, emSize, pixels_per_dip, mode, params, rendering_mode);
|
FIXME("(%p)->(%f %f %d %p %p): stub\n", This, emSize, pixels_per_dip, mode, params, rendering_mode);
|
||||||
return E_NOTIMPL;
|
return E_NOTIMPL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI dwritefontface_GetGdiCompatibleMetrics(IDWriteFontFace *iface, FLOAT emSize, FLOAT pixels_per_dip,
|
static HRESULT WINAPI dwritefontface_GetGdiCompatibleMetrics(IDWriteFontFace2 *iface, FLOAT emSize, FLOAT pixels_per_dip,
|
||||||
DWRITE_MATRIX const *transform, DWRITE_FONT_METRICS *metrics)
|
DWRITE_MATRIX const *transform, DWRITE_FONT_METRICS *metrics)
|
||||||
{
|
{
|
||||||
struct dwrite_fontface *This = impl_from_IDWriteFontFace(iface);
|
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
||||||
FIXME("(%p)->(%f %f %p %p): stub\n", This, emSize, pixels_per_dip, transform, metrics);
|
FIXME("(%p)->(%f %f %p %p): stub\n", This, emSize, pixels_per_dip, transform, metrics);
|
||||||
return E_NOTIMPL;
|
return E_NOTIMPL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI dwritefontface_GetGdiCompatibleGlyphMetrics(IDWriteFontFace *iface, FLOAT emSize, FLOAT pixels_per_dip,
|
static HRESULT WINAPI dwritefontface_GetGdiCompatibleGlyphMetrics(IDWriteFontFace2 *iface, FLOAT emSize, FLOAT pixels_per_dip,
|
||||||
DWRITE_MATRIX const *transform, BOOL use_gdi_natural, UINT16 const *glyph_indices, UINT32 glyph_count,
|
DWRITE_MATRIX const *transform, BOOL use_gdi_natural, UINT16 const *glyph_indices, UINT32 glyph_count,
|
||||||
DWRITE_GLYPH_METRICS *metrics, BOOL is_sideways)
|
DWRITE_GLYPH_METRICS *metrics, BOOL is_sideways)
|
||||||
{
|
{
|
||||||
struct dwrite_fontface *This = impl_from_IDWriteFontFace(iface);
|
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
||||||
FIXME("(%p)->(%f %f %p %d %p %u %p %d): stub\n", This, emSize, pixels_per_dip, transform, use_gdi_natural, glyph_indices,
|
FIXME("(%p)->(%f %f %p %d %p %u %p %d): stub\n", This, emSize, pixels_per_dip, transform, use_gdi_natural, glyph_indices,
|
||||||
glyph_count, metrics, is_sideways);
|
glyph_count, metrics, is_sideways);
|
||||||
return E_NOTIMPL;
|
return E_NOTIMPL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const IDWriteFontFaceVtbl dwritefontfacevtbl = {
|
static HRESULT WINAPI dwritefontface1_GetMetrics(IDWriteFontFace2 *iface, DWRITE_FONT_METRICS1 *metrics)
|
||||||
|
{
|
||||||
|
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
||||||
|
FIXME("(%p)->(%p): stub\n", This, metrics);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI dwritefontface1_GetGdiCompatibleMetrics(IDWriteFontFace2 *iface, FLOAT em_size, FLOAT pixels_per_dip,
|
||||||
|
const DWRITE_MATRIX *transform, DWRITE_FONT_METRICS1 *metrics)
|
||||||
|
{
|
||||||
|
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
||||||
|
FIXME("(%p)->(%f %f %p %p): stub\n", This, em_size, pixels_per_dip, transform, metrics);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void WINAPI dwritefontface1_GetCaretMetrics(IDWriteFontFace2 *iface, DWRITE_CARET_METRICS *metrics)
|
||||||
|
{
|
||||||
|
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
||||||
|
FIXME("(%p)->(%p): stub\n", This, metrics);
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI dwritefontface1_GetUnicodeRanges(IDWriteFontFace2 *iface, UINT32 max_count,
|
||||||
|
DWRITE_UNICODE_RANGE *ranges, UINT32 *count)
|
||||||
|
{
|
||||||
|
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
||||||
|
FIXME("(%p)->(%u %p %p): stub\n", This, max_count, ranges, count);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOL WINAPI dwritefontface1_IsMonospacedFont(IDWriteFontFace2 *iface)
|
||||||
|
{
|
||||||
|
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
||||||
|
FIXME("(%p): stub\n", This);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI dwritefontface1_GetDesignGlyphAdvances(IDWriteFontFace2 *iface,
|
||||||
|
UINT32 glyph_count, UINT16 const *indices, INT32 *advances, BOOL is_sideways)
|
||||||
|
{
|
||||||
|
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
||||||
|
FIXME("(%p)->(%u %p %p %d): stub\n", This, glyph_count, indices, advances, is_sideways);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI dwritefontface1_GetGdiCompatibleGlyphAdvances(IDWriteFontFace2 *iface,
|
||||||
|
FLOAT em_size, FLOAT pixels_per_dip, const DWRITE_MATRIX *transform, BOOL use_gdi_natural,
|
||||||
|
BOOL is_sideways, UINT32 glyph_count, UINT16 const *indices, INT32 *advances)
|
||||||
|
{
|
||||||
|
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
||||||
|
FIXME("(%p)->(%f %f %p %d %d %u %p %p): stub\n", This, em_size, pixels_per_dip, transform,
|
||||||
|
use_gdi_natural, is_sideways, glyph_count, indices, advances);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI dwritefontface1_GetKerningPairAdjustments(IDWriteFontFace2 *iface, UINT32 glyph_count,
|
||||||
|
const UINT16 *indices, INT32 *adjustments)
|
||||||
|
{
|
||||||
|
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
||||||
|
FIXME("(%p)->(%u %p %p): stub\n", This, glyph_count, indices, adjustments);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOL WINAPI dwritefontface1_HasKerningPairs(IDWriteFontFace2 *iface)
|
||||||
|
{
|
||||||
|
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
||||||
|
FIXME("(%p): stub\n", This);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI dwritefontface1_GetRecommendedRenderingMode(IDWriteFontFace2 *iface,
|
||||||
|
FLOAT font_emsize, FLOAT dpiX, FLOAT dpiY, const DWRITE_MATRIX *transform, BOOL is_sideways,
|
||||||
|
DWRITE_OUTLINE_THRESHOLD threshold, DWRITE_MEASURING_MODE measuring_mode, DWRITE_RENDERING_MODE *rendering_mode)
|
||||||
|
{
|
||||||
|
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
||||||
|
FIXME("(%p)->(%f %f %f %p %d %d %d %p): stub\n", This, font_emsize, dpiX, dpiY, transform, is_sideways,
|
||||||
|
threshold, measuring_mode, rendering_mode);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI dwritefontface1_GetVerticalGlyphVariants(IDWriteFontFace2 *iface, UINT32 glyph_count,
|
||||||
|
const UINT16 *nominal_indices, UINT16 *vertical_indices)
|
||||||
|
{
|
||||||
|
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
||||||
|
FIXME("(%p)->(%u %p %p): stub\n", This, glyph_count, nominal_indices, vertical_indices);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOL WINAPI dwritefontface1_HasVerticalGlyphVariants(IDWriteFontFace2 *iface)
|
||||||
|
{
|
||||||
|
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
||||||
|
FIXME("(%p): stub\n", This);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOL WINAPI dwritefontface2_IsColorFont(IDWriteFontFace2 *iface)
|
||||||
|
{
|
||||||
|
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
||||||
|
FIXME("(%p): stub\n", This);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static UINT32 WINAPI dwritefontface2_GetColorPaletteCount(IDWriteFontFace2 *iface)
|
||||||
|
{
|
||||||
|
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
||||||
|
FIXME("(%p): stub\n", This);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static UINT32 WINAPI dwritefontface2_GetPaletteEntryCount(IDWriteFontFace2 *iface)
|
||||||
|
{
|
||||||
|
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
||||||
|
FIXME("(%p): stub\n", This);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI dwritefontface2_GetPaletteEntries(IDWriteFontFace2 *iface, UINT32 palette_index,
|
||||||
|
UINT32 first_entry_index, UINT32 entry_count, DWRITE_COLOR_F *entries)
|
||||||
|
{
|
||||||
|
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
||||||
|
FIXME("(%p)->(%u %u %u %p): stub\n", This, palette_index, first_entry_index, entry_count, entries);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI dwritefontface2_GetRecommendedRenderingMode(IDWriteFontFace2 *iface, FLOAT fontEmSize,
|
||||||
|
FLOAT dpiX, FLOAT dpiY, DWRITE_MATRIX const *transform, BOOL is_sideways, DWRITE_OUTLINE_THRESHOLD threshold,
|
||||||
|
DWRITE_MEASURING_MODE measuringmode, IDWriteRenderingParams *params, DWRITE_RENDERING_MODE *renderingmode,
|
||||||
|
DWRITE_GRID_FIT_MODE *gridfitmode)
|
||||||
|
{
|
||||||
|
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
||||||
|
FIXME("(%p)->(%f %f %f %p %d %d %d %p %p %p): stub\n", This, fontEmSize, dpiX, dpiY, transform, is_sideways, threshold,
|
||||||
|
measuringmode, params, renderingmode, gridfitmode);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const IDWriteFontFace2Vtbl dwritefontfacevtbl = {
|
||||||
dwritefontface_QueryInterface,
|
dwritefontface_QueryInterface,
|
||||||
dwritefontface_AddRef,
|
dwritefontface_AddRef,
|
||||||
dwritefontface_Release,
|
dwritefontface_Release,
|
||||||
|
@ -513,7 +651,24 @@ static const IDWriteFontFaceVtbl dwritefontfacevtbl = {
|
||||||
dwritefontface_GetGlyphRunOutline,
|
dwritefontface_GetGlyphRunOutline,
|
||||||
dwritefontface_GetRecommendedRenderingMode,
|
dwritefontface_GetRecommendedRenderingMode,
|
||||||
dwritefontface_GetGdiCompatibleMetrics,
|
dwritefontface_GetGdiCompatibleMetrics,
|
||||||
dwritefontface_GetGdiCompatibleGlyphMetrics
|
dwritefontface_GetGdiCompatibleGlyphMetrics,
|
||||||
|
dwritefontface1_GetMetrics,
|
||||||
|
dwritefontface1_GetGdiCompatibleMetrics,
|
||||||
|
dwritefontface1_GetCaretMetrics,
|
||||||
|
dwritefontface1_GetUnicodeRanges,
|
||||||
|
dwritefontface1_IsMonospacedFont,
|
||||||
|
dwritefontface1_GetDesignGlyphAdvances,
|
||||||
|
dwritefontface1_GetGdiCompatibleGlyphAdvances,
|
||||||
|
dwritefontface1_GetKerningPairAdjustments,
|
||||||
|
dwritefontface1_HasKerningPairs,
|
||||||
|
dwritefontface1_GetRecommendedRenderingMode,
|
||||||
|
dwritefontface1_GetVerticalGlyphVariants,
|
||||||
|
dwritefontface1_HasVerticalGlyphVariants,
|
||||||
|
dwritefontface2_IsColorFont,
|
||||||
|
dwritefontface2_GetColorPaletteCount,
|
||||||
|
dwritefontface2_GetPaletteEntryCount,
|
||||||
|
dwritefontface2_GetPaletteEntries,
|
||||||
|
dwritefontface2_GetRecommendedRenderingMode
|
||||||
};
|
};
|
||||||
|
|
||||||
static HRESULT create_system_fontface(struct dwrite_font *font, IDWriteFontFace **face)
|
static HRESULT create_system_fontface(struct dwrite_font *font, IDWriteFontFace **face)
|
||||||
|
@ -531,7 +686,7 @@ static HRESULT create_system_fontface(struct dwrite_font *font, IDWriteFontFace
|
||||||
return E_OUTOFMEMORY;
|
return E_OUTOFMEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
This->IDWriteFontFace_iface.lpVtbl = &dwritefontfacevtbl;
|
This->IDWriteFontFace2_iface.lpVtbl = &dwritefontfacevtbl;
|
||||||
This->ref = 1;
|
This->ref = 1;
|
||||||
This->data->type = DWRITE_FONT_FACE_TYPE_UNKNOWN;
|
This->data->type = DWRITE_FONT_FACE_TYPE_UNKNOWN;
|
||||||
This->data->file_count = 0;
|
This->data->file_count = 0;
|
||||||
|
@ -549,14 +704,14 @@ static HRESULT create_system_fontface(struct dwrite_font *font, IDWriteFontFace
|
||||||
This->logfont.lfWeight = font->data->weight;
|
This->logfont.lfWeight = font->data->weight;
|
||||||
strcpyW(This->logfont.lfFaceName, font->data->facename);
|
strcpyW(This->logfont.lfFaceName, font->data->facename);
|
||||||
|
|
||||||
*face = &This->IDWriteFontFace_iface;
|
*face = (IDWriteFontFace*)&This->IDWriteFontFace2_iface;
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT convert_fontface_to_logfont(IDWriteFontFace *face, LOGFONTW *logfont)
|
HRESULT convert_fontface_to_logfont(IDWriteFontFace *face, LOGFONTW *logfont)
|
||||||
{
|
{
|
||||||
struct dwrite_fontface *fontface = impl_from_IDWriteFontFace(face);
|
struct dwrite_fontface *fontface = impl_from_IDWriteFontFace2((IDWriteFontFace2*)face);
|
||||||
|
|
||||||
*logfont = fontface->logfont;
|
*logfont = fontface->logfont;
|
||||||
|
|
||||||
|
@ -1473,7 +1628,7 @@ HRESULT font_create_fontface(IDWriteFactory *iface, DWRITE_FONT_FACE_TYPE facety
|
||||||
return E_OUTOFMEMORY;
|
return E_OUTOFMEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
This->IDWriteFontFace_iface.lpVtbl = &dwritefontfacevtbl;
|
This->IDWriteFontFace2_iface.lpVtbl = &dwritefontfacevtbl;
|
||||||
This->ref = 1;
|
This->ref = 1;
|
||||||
This->data->ref = 1;
|
This->data->ref = 1;
|
||||||
This->data->type = facetype;
|
This->data->type = facetype;
|
||||||
|
@ -1507,7 +1662,7 @@ HRESULT font_create_fontface(IDWriteFactory *iface, DWRITE_FONT_FACE_TYPE facety
|
||||||
This->data->simulations = sim_flags;
|
This->data->simulations = sim_flags;
|
||||||
This->is_system = FALSE;
|
This->is_system = FALSE;
|
||||||
|
|
||||||
*font_face = &This->IDWriteFontFace_iface;
|
*font_face = (IDWriteFontFace*)&This->IDWriteFontFace2_iface;
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue