dwrite: Check for vertical variants only when asked.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
a8e29f0ed7
commit
f8e3cba746
|
@ -182,11 +182,12 @@ struct fontfacecached
|
|||
|
||||
enum font_flags
|
||||
{
|
||||
FONT_IS_SYMBOL = 1 << 0,
|
||||
FONT_IS_MONOSPACED = 1 << 1,
|
||||
FONT_IS_COLORED = 1 << 2, /* CPAL/COLR support */
|
||||
FONTFACE_HAS_KERNING_PAIRS = 1 << 3,
|
||||
FONTFACE_HAS_VERTICAL_VARIANTS = 1 << 4
|
||||
FONT_IS_SYMBOL = 0x00000001,
|
||||
FONT_IS_MONOSPACED = 0x00000002,
|
||||
FONT_IS_COLORED = 0x00000004, /* CPAL/COLR support */
|
||||
FONTFACE_HAS_KERNING_PAIRS = 0x00000008,
|
||||
FONTFACE_VERTICAL_VARIANTS = 0x00000010,
|
||||
FONTFACE_NO_VERTICAL_VARIANTS = 0x00000020,
|
||||
};
|
||||
|
||||
struct dwrite_cmap;
|
||||
|
@ -257,7 +258,7 @@ struct dwrite_fontface
|
|||
unsigned int ascent;
|
||||
unsigned int descent;
|
||||
} typo_metrics;
|
||||
UINT32 flags;
|
||||
unsigned int flags;
|
||||
|
||||
struct dwrite_cmap cmap;
|
||||
|
||||
|
|
|
@ -1217,7 +1217,7 @@ static BOOL WINAPI dwritefontface1_HasVerticalGlyphVariants(IDWriteFontFace5 *if
|
|||
|
||||
TRACE("%p.\n", iface);
|
||||
|
||||
return !!(fontface->flags & FONTFACE_HAS_VERTICAL_VARIANTS);
|
||||
return opentype_has_vertical_variants(fontface);
|
||||
}
|
||||
|
||||
static BOOL WINAPI dwritefontface2_IsColorFont(IDWriteFontFace5 *iface)
|
||||
|
@ -5004,8 +5004,6 @@ HRESULT create_fontface(const struct fontface_desc *desc, struct list *cached_li
|
|||
|
||||
if (freetype_has_kerning_pairs(&fontface->IDWriteFontFace5_iface))
|
||||
fontface->flags |= FONTFACE_HAS_KERNING_PAIRS;
|
||||
if (opentype_has_vertical_variants(fontface))
|
||||
fontface->flags |= FONTFACE_HAS_VERTICAL_VARIANTS;
|
||||
fontface->glyph_image_formats = opentype_get_glyph_image_formats(&fontface->IDWriteFontFace5_iface);
|
||||
|
||||
/* Font properties are reused from font object when 'normal' face creation path is used:
|
||||
|
|
|
@ -6342,6 +6342,9 @@ BOOL opentype_has_vertical_variants(struct dwrite_fontface *fontface)
|
|||
struct lookups lookups = { 0 };
|
||||
UINT16 format;
|
||||
|
||||
if (fontface->flags & (FONTFACE_VERTICAL_VARIANTS | FONTFACE_NO_VERTICAL_VARIANTS))
|
||||
return !!(fontface->flags & FONTFACE_VERTICAL_VARIANTS);
|
||||
|
||||
context.cache = fontface_get_shaping_cache(fontface);
|
||||
context.table = &context.cache->gsub;
|
||||
|
||||
|
@ -6384,7 +6387,12 @@ BOOL opentype_has_vertical_variants(struct dwrite_fontface *fontface)
|
|||
|
||||
heap_free(lookups.lookups);
|
||||
|
||||
return !!count;
|
||||
if (count)
|
||||
fontface->flags |= FONTFACE_VERTICAL_VARIANTS;
|
||||
else
|
||||
fontface->flags |= FONTFACE_NO_VERTICAL_VARIANTS;
|
||||
|
||||
return !!(fontface->flags & FONTFACE_VERTICAL_VARIANTS);
|
||||
}
|
||||
|
||||
HRESULT opentype_get_vertical_glyph_variants(struct dwrite_fontface *fontface, unsigned int glyph_count,
|
||||
|
@ -6398,7 +6406,7 @@ HRESULT opentype_get_vertical_glyph_variants(struct dwrite_fontface *fontface, u
|
|||
|
||||
memcpy(glyphs, nominal_glyphs, glyph_count * sizeof(*glyphs));
|
||||
|
||||
if (!(fontface->flags & FONTFACE_HAS_VERTICAL_VARIANTS))
|
||||
if (!opentype_has_vertical_variants(fontface))
|
||||
return S_OK;
|
||||
|
||||
context.cache = fontface_get_shaping_cache(fontface);
|
||||
|
|
Loading…
Reference in New Issue