From d96fdd58abf8d6c8692dbb08ec54cdd80accba79 Mon Sep 17 00:00:00 2001 From: Adrian Johnson Date: Sun, 13 Apr 2008 22:16:52 +0930 Subject: [PATCH] win32: Fix broken printing of type1 fonts ExtTextOut() does not work with Type 1 font glyph indices when printing. The same code works fine when dst->dc is a display. It appears that ExtTextOut expects unicode character values when using Type 1 fonts and a printer DC. Fix this by making Type 1 fonts in the win32-printing surface use the fallback path for non Windows fonts. ie the glyphs will be emitted as filled paths. --- src/cairo-win32-font.c | 10 ++++++++++ src/cairo-win32-printing-surface.c | 1 + src/cairo-win32-private.h | 3 +++ 3 files changed, 14 insertions(+) diff --git a/src/cairo-win32-font.c b/src/cairo-win32-font.c index 27b581914..eeba47a63 100644 --- a/src/cairo-win32-font.c +++ b/src/cairo-win32-font.c @@ -490,6 +490,16 @@ _cairo_win32_scaled_font_select_unscaled_font (cairo_scaled_font_t *scaled_font, return CAIRO_STATUS_SUCCESS; } +cairo_bool_t +_cairo_win32_scaled_font_is_type1 (cairo_scaled_font_t *scaled_font) +{ + cairo_win32_scaled_font_t *win32_scaled_font; + + win32_scaled_font = (cairo_win32_scaled_font_t *) scaled_font; + + return win32_scaled_font->is_type1; +} + static void _cairo_win32_scaled_font_done_unscaled_font (cairo_scaled_font_t *scaled_font) { diff --git a/src/cairo-win32-printing-surface.c b/src/cairo-win32-printing-surface.c index cc3a17b5b..d6b2dd0aa 100644 --- a/src/cairo-win32-printing-surface.c +++ b/src/cairo-win32-printing-surface.c @@ -1341,6 +1341,7 @@ _cairo_win32_printing_surface_show_glyphs (void *abstract_surfac } if (cairo_scaled_font_get_type (scaled_font) == CAIRO_FONT_TYPE_WIN32 && + ! _cairo_win32_scaled_font_is_type1 (scaled_font) && source->type == CAIRO_PATTERN_TYPE_SOLID) { cairo_matrix_t ctm; diff --git a/src/cairo-win32-private.h b/src/cairo-win32-private.h index 704ec4ed4..0f39ea840 100644 --- a/src/cairo-win32-private.h +++ b/src/cairo-win32-private.h @@ -181,4 +181,7 @@ _cairo_win32_restore_initial_clip (cairo_win32_surface_t *surface); void _cairo_win32_debug_dump_hrgn (HRGN rgn, char *header); +cairo_bool_t +_cairo_win32_scaled_font_is_type1 (cairo_scaled_font_t *scaled_font); + #endif /* CAIRO_WIN32_PRIVATE_H */