--- configure.in 22 Aug 2005 22:49:04 -0000 1.133 +++ configure.in 23 Aug 2005 08:44:06 -0000 @@ -348,6 +348,7 @@ AC_CHECK_FUNC(FT_Load_Sfnt_Table, have_ft_load_sfnt_table=yes) AC_CHECK_FUNCS(FT_GlyphSlot_Embolden) + AC_CHECK_FUNCS(FT_GlyphSlot_Oblique) LIBS="$temp_save_libs" CFLAGS="$temp_save_cflags" --- src/cairo-ft-font.c 2005-08-23 16:48:16.000000000 +0800 +++ src/cairo-ft-font.c.yh 2005-08-23 16:47:54.000000000 +0800 @@ -48,7 +48,7 @@ #include FT_FREETYPE_H #include FT_OUTLINE_H #include FT_IMAGE_H -#if HAVE_FT_GLYPHSLOT_EMBOLDEN +#if HAVE_FT_GLYPHSLOT_EMBOLDEN || HAVE_FT_GLYPHSLOT_OBLIQUE #include FT_SYNTHESIS_H #endif @@ -65,6 +65,7 @@ */ #define PRIVATE_FLAG_HINT_METRICS (0x01 << 24) #define PRIVATE_FLAG_EMBOLDEN (0x02 << 24) +#define PRIVATE_FLAG_OBLIQUE (0x04 << 24) #define PRIVATE_FLAGS_MASK (0xff << 24) /* This is the max number of FT_face objects we keep open at once @@ -1228,6 +1229,12 @@ FT_GlyphSlot_Embolden (glyphslot); } #endif +#if HAVE_FT_GLYPHSLOT_OBLIQUE + if (val->key.flags & PRIVATE_FLAG_OBLIQUE && + (face->style_flags & FT_STYLE_FLAG_ITALIC) == 0) { + FT_GlyphSlot_Oblique (glyphslot); + } +#endif if (unscaled->x_scale == 0) x_factor = 0; @@ -1426,6 +1433,19 @@ load_flags |= PRIVATE_FLAG_EMBOLDEN; } #endif + +#ifdef FC_OBLIQUE + { + FcBool oblique; + + if (FcPatternGetBool (pattern, + FC_OBLIQUE, 0, &oblique) != FcResultMatch) + oblique = FcFalse; + + if (oblique) + load_flags |= PRIVATE_FLAG_OBLIQUE; + } +#endif return load_flags; } @@ -2203,6 +2223,14 @@ (face->style_flags & FT_STYLE_FLAG_BOLD) == 0) FT_GlyphSlot_Embolden (glyph); #endif +#if HAVE_FT_GLYPHSLOT_OBLIQUE + /* + * oblique glyhps if required + */ + if (scaled_font->load_flags & PRIVATE_FLAG_OBLIQUE && + (face->style_flags & FT_STYLE_FLAG_ITALIC) == 0) + FT_GlyphSlot_Oblique (glyph); +#endif /* Font glyphs have an inverted Y axis compared to cairo. */ FT_Outline_Transform (&glyph->outline, &invert_y);