diff options
author | Stefan Jeske <stefan@gtk.org> | 1998-06-25 09:01:42 +0000 |
---|---|---|
committer | Stefan Jeske <stefan@src.gnome.org> | 1998-06-25 09:01:42 +0000 |
commit | 37460b20782029bb9886e1cd45bc4a7ac5e44e50 (patch) | |
tree | c962e04aa8102d4b19257a7ff05f64b49be7ec3a /gdk | |
parent | 713cecba4cdf7004d19871b21d2c978ab292984c (diff) | |
download | gtk+-37460b20782029bb9886e1cd45bc4a7ac5e44e50.tar.gz |
Added functions gdk_text_height, gdk_string_height, gdk_char_height to
Thu Jun 25 10:50:34 1998 Stefan Jeske <stefan@gtk.org>
* gdk/gdk.h gdk/gdkfont.c: Added functions gdk_text_height,
gdk_string_height, gdk_char_height to retrieve the exact
height of a text.
Diffstat (limited to 'gdk')
-rw-r--r-- | gdk/gdk.h | 33 | ||||
-rw-r--r-- | gdk/gdkfont.c | 68 | ||||
-rw-r--r-- | gdk/x11/gdkfont-x11.c | 68 |
3 files changed, 156 insertions, 13 deletions
@@ -489,26 +489,33 @@ gint gdk_color_equal (GdkColor *colora, /* Fonts */ GdkFont* gdk_font_load (const gchar *font_name); -GdkFont* gdk_fontset_load (gchar *fontset_name); -GdkFont* gdk_font_ref (GdkFont *font); -void gdk_font_unref (GdkFont *font); +GdkFont* gdk_fontset_load (gchar *fontset_name); +GdkFont* gdk_font_ref (GdkFont *font); +void gdk_font_unref (GdkFont *font); gint gdk_font_id (const GdkFont *font); gint gdk_font_equal (const GdkFont *fonta, const GdkFont *fontb); -gint gdk_string_width (GdkFont *font, +gint gdk_string_width (GdkFont *font, const gchar *string); -gint gdk_text_width (GdkFont *font, +gint gdk_text_width (GdkFont *font, const gchar *text, - gint text_length); -gint gdk_char_width (GdkFont *font, - gchar character); -gint gdk_string_measure (GdkFont *font, + gint text_length); +gint gdk_char_width (GdkFont *font, + gchar character); +gint gdk_string_measure (GdkFont *font, const gchar *string); -gint gdk_text_measure (GdkFont *font, +gint gdk_text_measure (GdkFont *font, const gchar *text, - gint text_length); -gint gdk_char_measure (GdkFont *font, - gchar character); + gint text_length); +gint gdk_char_measure (GdkFont *font, + gchar character); +gint gdk_string_height (GdkFont *font, + const gchar *string); +gint gdk_text_height (GdkFont *font, + const gchar *text, + gint text_length); +gint gdk_char_height (GdkFont *font, + gchar character); /* Drawing diff --git a/gdk/gdkfont.c b/gdk/gdkfont.c index 352de2003f..acc82f2b62 100644 --- a/gdk/gdkfont.c +++ b/gdk/gdkfont.c @@ -385,3 +385,71 @@ gdk_char_measure (GdkFont *font, return gdk_text_measure (font, &character, 1); } + +gint +gdk_string_height (GdkFont *font, + const gchar *string) +{ + g_return_val_if_fail (font != NULL, -1); + g_return_val_if_fail (string != NULL, -1); + + return gdk_text_height (font, string, strlen (string)); +} + +gint +gdk_text_height (GdkFont *font, + const gchar *text, + gint text_length) +{ + GdkFontPrivate *private; + XCharStruct overall; + XFontStruct *xfont; + XFontSet fontset; + XRectangle ink, log; + int direction; + int font_ascent; + int font_descent; + gint height; + + g_return_val_if_fail (font != NULL, -1); + g_return_val_if_fail (text != NULL, -1); + + private = (GdkFontPrivate*) font; + + switch (font->type) + { + case GDK_FONT_FONT: + xfont = (XFontStruct *) private->xfont; + if ((xfont->min_byte1 == 0) && (xfont->max_byte1 == 0)) + { + XTextExtents (xfont, text, text_length, + &direction, &font_ascent, &font_descent, + &overall); + } + else + { + XTextExtents16 (xfont, (XChar2b *) text, text_length / 2, + &direction, &font_ascent, &font_descent, + &overall); + } + height = overall.ascent + overall.descent; + break; + case GDK_FONT_FONTSET: + fontset = (XFontSet) private->xfont; + XmbTextExtents (fontset, text, text_length, &ink, &log); + height = log.height; + break; + default: + height = 0; + } + return height; +} + +gint +gdk_char_height (GdkFont *font, + gchar character) +{ + g_return_val_if_fail (font != NULL, -1); + + return gdk_text_height (font, &character, 1); +} diff --git a/gdk/x11/gdkfont-x11.c b/gdk/x11/gdkfont-x11.c index 352de2003f..acc82f2b62 100644 --- a/gdk/x11/gdkfont-x11.c +++ b/gdk/x11/gdkfont-x11.c @@ -385,3 +385,71 @@ gdk_char_measure (GdkFont *font, return gdk_text_measure (font, &character, 1); } + +gint +gdk_string_height (GdkFont *font, + const gchar *string) +{ + g_return_val_if_fail (font != NULL, -1); + g_return_val_if_fail (string != NULL, -1); + + return gdk_text_height (font, string, strlen (string)); +} + +gint +gdk_text_height (GdkFont *font, + const gchar *text, + gint text_length) +{ + GdkFontPrivate *private; + XCharStruct overall; + XFontStruct *xfont; + XFontSet fontset; + XRectangle ink, log; + int direction; + int font_ascent; + int font_descent; + gint height; + + g_return_val_if_fail (font != NULL, -1); + g_return_val_if_fail (text != NULL, -1); + + private = (GdkFontPrivate*) font; + + switch (font->type) + { + case GDK_FONT_FONT: + xfont = (XFontStruct *) private->xfont; + if ((xfont->min_byte1 == 0) && (xfont->max_byte1 == 0)) + { + XTextExtents (xfont, text, text_length, + &direction, &font_ascent, &font_descent, + &overall); + } + else + { + XTextExtents16 (xfont, (XChar2b *) text, text_length / 2, + &direction, &font_ascent, &font_descent, + &overall); + } + height = overall.ascent + overall.descent; + break; + case GDK_FONT_FONTSET: + fontset = (XFontSet) private->xfont; + XmbTextExtents (fontset, text, text_length, &ink, &log); + height = log.height; + break; + default: + height = 0; + } + return height; +} + +gint +gdk_char_height (GdkFont *font, + gchar character) +{ + g_return_val_if_fail (font != NULL, -1); + + return gdk_text_height (font, &character, 1); +} |