From 94742208d8f1e274d8a5db4515acfbd4b3d9e4fa Mon Sep 17 00:00:00 2001 From: Havoc Pennington Date: Wed, 28 Feb 2001 21:15:15 +0000 Subject: add approximate_digit_width field 2001-02-28 Havoc Pennington * pango/pango-font.h (struct _PangoFontMetrics): add approximate_digit_width field * pango/pangox.c (pango_x_font_get_metrics): make up an approximate digit width number --- ChangeLog | 8 ++++++++ ChangeLog.pre-1-0 | 8 ++++++++ ChangeLog.pre-1-10 | 8 ++++++++ ChangeLog.pre-1-2 | 8 ++++++++ ChangeLog.pre-1-4 | 8 ++++++++ ChangeLog.pre-1-6 | 8 ++++++++ ChangeLog.pre-1-8 | 8 ++++++++ docs/tmpl/fonts.sgml | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ pango/pango-font.h | 1 + pango/pangox.c | 28 ++++++++++++++++++++++++---- 10 files changed, 130 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9005552f..b653aae1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2001-02-28 Havoc Pennington + + * pango/pango-font.h (struct _PangoFontMetrics): add + approximate_digit_width field + + * pango/pangox.c (pango_x_font_get_metrics): make up an + approximate digit width number + 2001-02-28 Havoc Pennington * pango/pango-font.h (struct _PangoFontMetrics): Add diff --git a/ChangeLog.pre-1-0 b/ChangeLog.pre-1-0 index 9005552f..b653aae1 100644 --- a/ChangeLog.pre-1-0 +++ b/ChangeLog.pre-1-0 @@ -1,3 +1,11 @@ +2001-02-28 Havoc Pennington + + * pango/pango-font.h (struct _PangoFontMetrics): add + approximate_digit_width field + + * pango/pangox.c (pango_x_font_get_metrics): make up an + approximate digit width number + 2001-02-28 Havoc Pennington * pango/pango-font.h (struct _PangoFontMetrics): Add diff --git a/ChangeLog.pre-1-10 b/ChangeLog.pre-1-10 index 9005552f..b653aae1 100644 --- a/ChangeLog.pre-1-10 +++ b/ChangeLog.pre-1-10 @@ -1,3 +1,11 @@ +2001-02-28 Havoc Pennington + + * pango/pango-font.h (struct _PangoFontMetrics): add + approximate_digit_width field + + * pango/pangox.c (pango_x_font_get_metrics): make up an + approximate digit width number + 2001-02-28 Havoc Pennington * pango/pango-font.h (struct _PangoFontMetrics): Add diff --git a/ChangeLog.pre-1-2 b/ChangeLog.pre-1-2 index 9005552f..b653aae1 100644 --- a/ChangeLog.pre-1-2 +++ b/ChangeLog.pre-1-2 @@ -1,3 +1,11 @@ +2001-02-28 Havoc Pennington + + * pango/pango-font.h (struct _PangoFontMetrics): add + approximate_digit_width field + + * pango/pangox.c (pango_x_font_get_metrics): make up an + approximate digit width number + 2001-02-28 Havoc Pennington * pango/pango-font.h (struct _PangoFontMetrics): Add diff --git a/ChangeLog.pre-1-4 b/ChangeLog.pre-1-4 index 9005552f..b653aae1 100644 --- a/ChangeLog.pre-1-4 +++ b/ChangeLog.pre-1-4 @@ -1,3 +1,11 @@ +2001-02-28 Havoc Pennington + + * pango/pango-font.h (struct _PangoFontMetrics): add + approximate_digit_width field + + * pango/pangox.c (pango_x_font_get_metrics): make up an + approximate digit width number + 2001-02-28 Havoc Pennington * pango/pango-font.h (struct _PangoFontMetrics): Add diff --git a/ChangeLog.pre-1-6 b/ChangeLog.pre-1-6 index 9005552f..b653aae1 100644 --- a/ChangeLog.pre-1-6 +++ b/ChangeLog.pre-1-6 @@ -1,3 +1,11 @@ +2001-02-28 Havoc Pennington + + * pango/pango-font.h (struct _PangoFontMetrics): add + approximate_digit_width field + + * pango/pangox.c (pango_x_font_get_metrics): make up an + approximate digit width number + 2001-02-28 Havoc Pennington * pango/pango-font.h (struct _PangoFontMetrics): Add diff --git a/ChangeLog.pre-1-8 b/ChangeLog.pre-1-8 index 9005552f..b653aae1 100644 --- a/ChangeLog.pre-1-8 +++ b/ChangeLog.pre-1-8 @@ -1,3 +1,11 @@ +2001-02-28 Havoc Pennington + + * pango/pango-font.h (struct _PangoFontMetrics): add + approximate_digit_width field + + * pango/pangox.c (pango_x_font_get_metrics): make up an + approximate digit width number + 2001-02-28 Havoc Pennington * pango/pango-font.h (struct _PangoFontMetrics): Add diff --git a/docs/tmpl/fonts.sgml b/docs/tmpl/fonts.sgml index 0b93033b..ab1af34c 100644 --- a/docs/tmpl/fonts.sgml +++ b/docs/tmpl/fonts.sgml @@ -42,6 +42,13 @@ the characteristics of a font to load. @PANGO_STYLE_OBLIQUE: @PANGO_STYLE_ITALIC: + + + + + + + An enumeration specifying the weight (boldness) of a font. This is a numerical @@ -55,6 +62,13 @@ value ranging from 100 to 900, but there are two predefined values: @PANGO_WEIGHT_ULTRABOLD: @PANGO_WEIGHT_HEAVY: + + + + + + + An enumeration specifying capitalization variant of the font. @@ -64,6 +78,13 @@ An enumeration specifying capitalization variant of the font. @PANGO_VARIANT_SMALL_CAPS: A font with the lower case characters replaced by smaller variants of the capital characters. + + + + + + + An enumeration specifying the width of the font relative to other designs @@ -80,6 +101,13 @@ within a family. @PANGO_STRETCH_EXTRA_EXPANDED: @PANGO_STRETCH_ULTRA_EXPANDED: + + + + + + + @@ -89,6 +117,16 @@ within a family. @Returns: + + + + + +@desc1: +@desc2: +@Returns: + + @@ -124,6 +162,15 @@ within a family. @Returns: + + + + + +@desc: +@Returns: + + The #PangoFont structure is used to represent @@ -188,6 +235,8 @@ a font. It contains the following members: @descent: the logical extent of the font beneath the baseline. as @ascent + @descent. Individual characters may have extents exceeding this value. +@approximate_char_width: +@approximate_digit_width: diff --git a/pango/pango-font.h b/pango/pango-font.h index 109a7819..d0619f24 100644 --- a/pango/pango-font.h +++ b/pango/pango-font.h @@ -91,6 +91,7 @@ struct _PangoFontMetrics int ascent; int descent; int approximate_char_width; + int approximate_digit_width; }; PangoFontDescription *pango_font_description_copy (const PangoFontDescription *desc); diff --git a/pango/pangox.c b/pango/pangox.c index 172f64aa..06b4cea8 100644 --- a/pango/pangox.c +++ b/pango/pangox.c @@ -525,9 +525,9 @@ pango_x_font_get_glyph_extents (PangoFont *font, static gboolean get_int_prop (Atom atom, XFontStruct *fs, - gint *val) + int *val) { - gint i; + int i; *val = 0; @@ -556,8 +556,8 @@ get_font_metrics_from_subfonts (PangoFont *font, PangoXFont *xfont = (PangoXFont *)font; GSList *tmp_list = subfonts; gboolean first = TRUE; - gint total_avg_widths = 0; - gint n_avg_widths = 0; + int total_avg_widths = 0; + int n_avg_widths = 0; Atom avg_width_atom; avg_width_atom = pango_x_fontmap_atom_from_name (xfont->fontmap, @@ -780,12 +780,32 @@ pango_x_font_get_metrics (PangoFont *font, if (!tmp_list) { + PangoLayout *layout; + PangoRectangle extents; + PangoContext *context; + info = g_new (PangoXMetricsInfo, 1); info->lang = lookup_lang; xfont->metrics_by_lang = g_slist_prepend (xfont->metrics_by_lang, info); get_font_metrics_from_string (font, lang, str, &info->metrics); + + /* This is sort of a sledgehammer solution, but we cache this + * stuff so not a huge deal hopefully. Get the avg. width of the + * chars in "0123456789" + */ + context = pango_x_get_context (pango_x_fontmap_get_display (xfont->fontmap)); + pango_context_set_lang (context, lang); + layout = pango_layout_new (context); + pango_layout_set_text (layout, "0123456789", -1); + + pango_layout_get_extents (layout, NULL, &extents); + + metrics->approximate_digit_width = extents.width / 10; + + g_object_unref (G_OBJECT (layout)); + g_object_unref (G_OBJECT (context)); } *metrics = info->metrics; -- cgit v1.2.1