summaryrefslogtreecommitdiff
path: root/src/cairo-scaled-font-subsets.c
diff options
context:
space:
mode:
authorAdrian Johnson <ajohnson@redneon.com>2011-09-12 21:46:55 +0930
committerAdrian Johnson <ajohnson@redneon.com>2011-09-12 22:04:06 +0930
commit7b6586a7385a529d7bfaa463541715f74f4a904d (patch)
treef8dc943279595a3679cf883daa42b7788967e97c /src/cairo-scaled-font-subsets.c
parent497258a4cf62e526f88e44c177eec6d9adf74ed0 (diff)
downloadcairo-7b6586a7385a529d7bfaa463541715f74f4a904d.tar.gz
scaled-subsets: ensure different glyphs with same utf8 mapping are not merged together
If a glyph maps to a latin char that is already assigned in the latin subset, put the glyph in a non latin subset.
Diffstat (limited to 'src/cairo-scaled-font-subsets.c')
-rw-r--r--src/cairo-scaled-font-subsets.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/cairo-scaled-font-subsets.c b/src/cairo-scaled-font-subsets.c
index f24a86a55..16e51f2f8 100644
--- a/src/cairo-scaled-font-subsets.c
+++ b/src/cairo-scaled-font-subsets.c
@@ -87,6 +87,7 @@ typedef struct _cairo_sub_font {
struct _cairo_scaled_font_subsets {
cairo_subsets_type_t type;
cairo_bool_t use_latin_subset;
+ char latin_char_map[256];
int max_glyphs_per_unscaled_subset_used;
cairo_hash_table_t *unscaled_sub_fonts;
@@ -653,7 +654,10 @@ _cairo_sub_font_map_glyph (cairo_sub_font_t *sub_font,
if (latin_character > 0 ||
(latin_character == 0 && sub_font->num_glyphs_in_latin_subset > 0))
{
- is_latin = TRUE;
+ if (!sub_font->parent->latin_char_map[latin_character]) {
+ sub_font->parent->latin_char_map[latin_character] = TRUE;
+ is_latin = TRUE;
+ }
}
}
@@ -759,6 +763,7 @@ static cairo_scaled_font_subsets_t *
_cairo_scaled_font_subsets_create_internal (cairo_subsets_type_t type)
{
cairo_scaled_font_subsets_t *subsets;
+ int i;
subsets = malloc (sizeof (cairo_scaled_font_subsets_t));
if (unlikely (subsets == NULL)) {
@@ -771,6 +776,8 @@ _cairo_scaled_font_subsets_create_internal (cairo_subsets_type_t type)
subsets->max_glyphs_per_unscaled_subset_used = 0;
subsets->max_glyphs_per_scaled_subset_used = 0;
subsets->num_sub_fonts = 0;
+ for (i = 0; i < 256; i++)
+ subsets->latin_char_map[i] = FALSE;
subsets->unscaled_sub_fonts = _cairo_hash_table_create (_cairo_sub_fonts_equal);
if (! subsets->unscaled_sub_fonts) {