dwrite: Partially implement GetGdiCompatibleGlyphAdvances().
This commit is contained in:
parent
e1a65bed68
commit
e94d977006
@ -92,6 +92,13 @@ static inline const char *debugstr_range(const DWRITE_TEXT_RANGE *range)
|
|||||||
return wine_dbg_sprintf("%u:%u", range->startPosition, range->length);
|
return wine_dbg_sprintf("%u:%u", range->startPosition, range->length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline const char *debugstr_matrix(const DWRITE_MATRIX *m)
|
||||||
|
{
|
||||||
|
if (!m) return "(null)";
|
||||||
|
return wine_dbg_sprintf("{%.2f,%.2f,%.2f,%.2f,%.2f,%.2f}", m->m11, m->m12, m->m21, m->m22,
|
||||||
|
m->dx, m->dy);
|
||||||
|
}
|
||||||
|
|
||||||
static inline unsigned short get_table_entry(const unsigned short *table, WCHAR ch)
|
static inline unsigned short get_table_entry(const unsigned short *table, WCHAR ch)
|
||||||
{
|
{
|
||||||
return table[table[table[ch >> 8] + ((ch >> 4) & 0x0f)] + (ch & 0xf)];
|
return table[table[table[ch >> 8] + ((ch >> 4) & 0x0f)] + (ch & 0xf)];
|
||||||
|
@ -619,7 +619,7 @@ static void WINAPI dwritefontface1_GetMetrics(IDWriteFontFace2 *iface, DWRITE_FO
|
|||||||
|
|
||||||
static inline int round_metric(FLOAT metric)
|
static inline int round_metric(FLOAT metric)
|
||||||
{
|
{
|
||||||
return (int)floor(metric + 0.5);
|
return (int)floorf(metric + 0.5f);
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI dwritefontface1_GetGdiCompatibleMetrics(IDWriteFontFace2 *iface, FLOAT em_size, FLOAT pixels_per_dip,
|
static HRESULT WINAPI dwritefontface1_GetGdiCompatibleMetrics(IDWriteFontFace2 *iface, FLOAT em_size, FLOAT pixels_per_dip,
|
||||||
@ -729,13 +729,33 @@ static HRESULT WINAPI dwritefontface1_GetDesignGlyphAdvances(IDWriteFontFace2 *i
|
|||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI dwritefontface1_GetGdiCompatibleGlyphAdvances(IDWriteFontFace2 *iface,
|
static HRESULT WINAPI dwritefontface1_GetGdiCompatibleGlyphAdvances(IDWriteFontFace2 *iface,
|
||||||
FLOAT em_size, FLOAT pixels_per_dip, const DWRITE_MATRIX *transform, BOOL use_gdi_natural,
|
FLOAT em_size, FLOAT ppdip, const DWRITE_MATRIX *m, BOOL use_gdi_natural,
|
||||||
BOOL is_sideways, UINT32 glyph_count, UINT16 const *indices, INT32 *advances)
|
BOOL is_sideways, UINT32 glyph_count, UINT16 const *glyphs, INT32 *advances)
|
||||||
{
|
{
|
||||||
struct dwrite_fontface *This = impl_from_IDWriteFontFace2(iface);
|
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,
|
HRESULT hr;
|
||||||
use_gdi_natural, is_sideways, glyph_count, indices, advances);
|
UINT32 i;
|
||||||
return E_NOTIMPL;
|
|
||||||
|
TRACE("(%p)->(%.2f %.2f %p %d %d %u %p %p)\n", This, em_size, ppdip, m,
|
||||||
|
use_gdi_natural, is_sideways, glyph_count, glyphs, advances);
|
||||||
|
|
||||||
|
if (m && memcmp(m, &identity, sizeof(*m)))
|
||||||
|
FIXME("transform is not supported, %s\n", debugstr_matrix(m));
|
||||||
|
|
||||||
|
for (i = 0; i < glyph_count; i++) {
|
||||||
|
FLOAT scale;
|
||||||
|
|
||||||
|
hr = IDWriteFontFace2_GetDesignGlyphAdvances(iface, 1, glyphs + i, advances + i, is_sideways);
|
||||||
|
if (FAILED(hr))
|
||||||
|
return hr;
|
||||||
|
|
||||||
|
scale = em_size * ppdip / This->metrics.designUnitsPerEm;
|
||||||
|
#define SCALE_METRIC(x) x = round_metric(round_metric((x) * scale) / scale)
|
||||||
|
SCALE_METRIC(advances[i]);
|
||||||
|
#undef SCALE_METRIC
|
||||||
|
}
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI dwritefontface1_GetKerningPairAdjustments(IDWriteFontFace2 *iface, UINT32 count,
|
static HRESULT WINAPI dwritefontface1_GetKerningPairAdjustments(IDWriteFontFace2 *iface, UINT32 count,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user