summaryrefslogtreecommitdiff
path: root/gdk
diff options
context:
space:
mode:
authorStefan Jeske <stefan@gtk.org>1998-06-25 09:01:42 +0000
committerStefan Jeske <stefan@src.gnome.org>1998-06-25 09:01:42 +0000
commit37460b20782029bb9886e1cd45bc4a7ac5e44e50 (patch)
treec962e04aa8102d4b19257a7ff05f64b49be7ec3a /gdk
parent713cecba4cdf7004d19871b21d2c978ab292984c (diff)
downloadgdk-pixbuf-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.h33
-rw-r--r--gdk/gdkfont.c68
-rw-r--r--gdk/x11/gdkfont-x11.c68
3 files changed, 156 insertions, 13 deletions
diff --git a/gdk/gdk.h b/gdk/gdk.h
index 7d1815340..271377206 100644
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -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 352de2003..acc82f2b6 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 352de2003..acc82f2b6 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);
+}