summaryrefslogtreecommitdiff
path: root/pango/pangofc-fontmap.c
diff options
context:
space:
mode:
authorBehdad Esfahbod <behdad@gnome.org>2006-08-15 11:51:37 +0000
committerBehdad Esfahbod <behdad@src.gnome.org>2006-08-15 11:51:37 +0000
commit8de44f9dc7712a7ce258b70a7b8283b3ebca094e (patch)
treef19a8eeb43df4d8f0ec8ffda31f6f2c0ad29bece /pango/pangofc-fontmap.c
parenta79ad88362620acce4cdbebac12f049b83a1a396 (diff)
downloadpango-8de44f9dc7712a7ce258b70a7b8283b3ebca094e.tar.gz
Support --gravity.
2006-08-15 Behdad Esfahbod <behdad@gnome.org> * examples/renderdemo.c (do_output), (parse_gravity), (parse_options): Support --gravity. * pango/pangocairo-fcfont.c (pango_cairo_fc_font_get_scaled_font), (compute_glyph_extents), (_pango_cairo_fc_font_new): Load rotated scaled_fonts to handle gravity. * pango/pangofc-fontmap.c (pango_fc_make_pattern), (pango_fc_font_map_get_patterns), (pango_fc_font_map_load_fontset): Set FC_VERTICAL_LAYOUT on West and East gravity.
Diffstat (limited to 'pango/pangofc-fontmap.c')
-rw-r--r--pango/pangofc-fontmap.c30
1 files changed, 25 insertions, 5 deletions
diff --git a/pango/pangofc-fontmap.c b/pango/pangofc-fontmap.c
index 230cdb76..a681eea2 100644
--- a/pango/pangofc-fontmap.c
+++ b/pango/pangofc-fontmap.c
@@ -792,12 +792,14 @@ pango_fc_convert_width_to_fc (PangoStretch pango_stretch)
static FcPattern *
pango_fc_make_pattern (const PangoFontDescription *description,
PangoLanguage *language,
+ PangoGravity gravity,
double pixel_size,
double dpi)
{
FcPattern *pattern;
int slant;
int weight;
+ FcBool vertical;
char **families;
int i;
#ifdef FC_WIDTH
@@ -810,6 +812,19 @@ pango_fc_make_pattern (const PangoFontDescription *description,
width = pango_fc_convert_width_to_fc (pango_font_description_get_stretch (description));
#endif
+ switch (gravity)
+ {
+ case PANGO_GRAVITY_NORTH:
+ case PANGO_GRAVITY_SOUTH:
+ default:
+ vertical = FcFalse;
+ break;
+ case PANGO_GRAVITY_WEST:
+ case PANGO_GRAVITY_EAST:
+ vertical = FcTrue;
+ break;
+ }
+
/* The reason for passing in FC_SIZE as well as FC_PIXEL_SIZE is
* to work around a bug in libgnomeprint where it doesn't look
* for FC_PIXEL_SIZE. See http://bugzilla.gnome.org/show_bug.cgi?id=169020
@@ -824,6 +839,9 @@ pango_fc_make_pattern (const PangoFontDescription *description,
#ifdef FC_WIDTH
FC_WIDTH, FcTypeInteger, width,
#endif
+#ifdef FC_VERTICAL_LAYOUT
+ FC_VERTICAL_LAYOUT, FcTypeBool, vertical,
+#endif
FC_SIZE, FcTypeDouble, pixel_size * (72. / dpi),
FC_PIXEL_SIZE, FcTypeDouble, pixel_size,
NULL);
@@ -1018,7 +1036,8 @@ static PangoFcPatternSet *
pango_fc_font_map_get_patterns (PangoFontMap *fontmap,
PangoContext *context,
const PangoFontDescription *desc,
- PangoLanguage *language)
+ PangoLanguage *language,
+ PangoGravity gravity)
{
PangoFcFontMap *fcfontmap = (PangoFcFontMap *)fontmap;
PangoFcFontMapPrivate *priv = fcfontmap->priv;
@@ -1035,8 +1054,7 @@ pango_fc_font_map_get_patterns (PangoFontMap *fontmap,
key.fontmap = fcfontmap;
get_context_matrix (context, &key.matrix);
key.language = language;
- /* FIXME: support per-item gravity */
- key.gravity = pango_context_get_base_gravity (context);
+ key.gravity = gravity;
key.desc = pango_font_description_copy_static (desc);
pango_font_description_unset_fields (key.desc, PANGO_FONT_MASK_SIZE);
key.size = get_unscaled_size (fcfontmap, context, desc);
@@ -1052,7 +1070,7 @@ pango_fc_font_map_get_patterns (PangoFontMap *fontmap,
{
double scale_factor = pango_matrix_get_font_scale_factor (&key.matrix);
double scaled_size = key.size * scale_factor / PANGO_SCALE;
- pattern = pango_fc_make_pattern (desc, language,
+ pattern = pango_fc_make_pattern (desc, language, gravity,
scaled_size,
pango_fc_font_map_get_resolution (fcfontmap, context));
@@ -1213,7 +1231,9 @@ pango_fc_font_map_load_fontset (PangoFontMap *fontmap,
const PangoFontDescription *desc,
PangoLanguage *language)
{
- PangoFcPatternSet *patterns = pango_fc_font_map_get_patterns (fontmap, context, desc, language);
+ /* FIXME: support per-item gravity */
+ PangoFcPatternSet *patterns = pango_fc_font_map_get_patterns (fontmap, context, desc, language,
+ pango_context_get_base_gravity (context));
PangoFontset *result;
int i;