📄 gdkfont.c
字号:
width = XwcTextEscapement (fontset, text_wchar, text_length); g_free (text_wchar); } break; default: width = 0; } return width;}/* Problem: What if a character is a 16 bits character ?? */gintgdk_char_width (GdkFont *font, gchar character){ GdkFontPrivate *private; XCharStruct *chars; gint width; guint ch = character & 0xff; /* get rid of sign-extension */ XFontStruct *xfont; XFontSet fontset; g_return_val_if_fail (font != NULL, -1); private = (GdkFontPrivate*) font; switch (font->type) { case GDK_FONT_FONT: /* only 8 bits characters are considered here */ xfont = (XFontStruct *) private->xfont; if ((xfont->min_byte1 == 0) && (xfont->max_byte1 == 0) && (ch >= xfont->min_char_or_byte2) && (ch <= xfont->max_char_or_byte2)) { chars = xfont->per_char; if (chars) width = chars[ch - xfont->min_char_or_byte2].width; else width = xfont->min_bounds.width; } else { width = XTextWidth (xfont, &character, 1); } break; case GDK_FONT_FONTSET: fontset = (XFontSet) private->xfont; width = XmbTextEscapement (fontset, &character, 1) ; break; default: width = 0; } return width;}gintgdk_char_width_wc (GdkFont *font, GdkWChar character){ GdkFontPrivate *private; XCharStruct *chars; gint width; guint ch = character & 0xff; /* get rid of sign-extension */ XFontStruct *xfont; XFontSet fontset; g_return_val_if_fail (font != NULL, -1); private = (GdkFontPrivate*) font; switch (font->type) { case GDK_FONT_FONT: /* only 8 bits characters are considered here */ xfont = (XFontStruct *) private->xfont; if ((xfont->min_byte1 == 0) && (xfont->max_byte1 == 0) && (ch >= xfont->min_char_or_byte2) && (ch <= xfont->max_char_or_byte2)) { chars = xfont->per_char; if (chars) width = chars[ch - xfont->min_char_or_byte2].width; else width = xfont->min_bounds.width; } else { char ch2 = character; width = XTextWidth (xfont, &ch2, 1); } break; case GDK_FONT_FONTSET: fontset = (XFontSet) private->xfont; { wchar_t char_wc = character; width = XwcTextEscapement (fontset, &char_wc, 1) ; } break; default: width = 0; } return width;}gintgdk_string_measure (GdkFont *font, const gchar *string){ g_return_val_if_fail (font != NULL, -1); g_return_val_if_fail (string != NULL, -1); return gdk_text_measure (font, string, strlen (string));}voidgdk_text_extents (GdkFont *font, const gchar *text, gint text_length, gint *lbearing, gint *rbearing, gint *width, gint *ascent, gint *descent){ GdkFontPrivate *private; XCharStruct overall; XFontStruct *xfont; XFontSet fontset; XRectangle ink, logical; int direction; int font_ascent; int font_descent; g_return_if_fail (font != NULL); g_return_if_fail (text != NULL); 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); } if (lbearing) *lbearing = overall.lbearing; if (rbearing) *rbearing = overall.rbearing; if (width) *width = overall.width; if (ascent) *ascent = overall.ascent; if (descent) *descent = overall.descent; break; case GDK_FONT_FONTSET: fontset = (XFontSet) private->xfont; XmbTextExtents (fontset, text, text_length, &ink, &logical); if (lbearing) *lbearing = ink.x; if (rbearing) *rbearing = ink.x + ink.width; if (width) *width = logical.width; if (ascent) *ascent = -ink.y; if (descent) *descent = ink.y + ink.height; break; }}voidgdk_text_extents_wc (GdkFont *font, const GdkWChar *text, gint text_length, gint *lbearing, gint *rbearing, gint *width, gint *ascent, gint *descent){ GdkFontPrivate *private; XCharStruct overall; XFontStruct *xfont; XFontSet fontset; XRectangle ink, logical; int direction; int font_ascent; int font_descent; g_return_if_fail (font != NULL); g_return_if_fail (text != NULL); private = (GdkFontPrivate*) font; switch (font->type) { case GDK_FONT_FONT: { gchar *text_8bit; gint i; xfont = (XFontStruct *) private->xfont; g_return_if_fail ((xfont->min_byte1 == 0) && (xfont->max_byte1 == 0)); text_8bit = g_new (gchar, text_length); for (i=0; i<text_length; i++) text_8bit[i] = text[i]; XTextExtents (xfont, text_8bit, text_length, &direction, &font_ascent, &font_descent, &overall); g_free (text_8bit); if (lbearing) *lbearing = overall.lbearing; if (rbearing) *rbearing = overall.rbearing; if (width) *width = overall.width; if (ascent) *ascent = overall.ascent; if (descent) *descent = overall.descent; break; } case GDK_FONT_FONTSET: fontset = (XFontSet) private->xfont; if (sizeof(GdkWChar) == sizeof(wchar_t)) XwcTextExtents (fontset, (wchar_t *)text, text_length, &ink, &logical); else { wchar_t *text_wchar; gint i; text_wchar = g_new (wchar_t, text_length); for (i = 0; i < text_length; i++) text_wchar[i] = text[i]; XwcTextExtents (fontset, text_wchar, text_length, &ink, &logical); g_free (text_wchar); } if (lbearing) *lbearing = ink.x; if (rbearing) *rbearing = ink.x + ink.width; if (width) *width = logical.width; if (ascent) *ascent = -ink.y; if (descent) *descent = ink.y + ink.height; break; }}voidgdk_string_extents (GdkFont *font, const gchar *string, gint *lbearing, gint *rbearing, gint *width, gint *ascent, gint *descent){ g_return_if_fail (font != NULL); g_return_if_fail (string != NULL); gdk_text_extents (font, string, strlen (string), lbearing, rbearing, width, ascent, descent);}gintgdk_text_measure (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 width; 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); } width = overall.rbearing; break; case GDK_FONT_FONTSET: fontset = (XFontSet) private->xfont; XmbTextExtents (fontset, text, text_length, &ink, &log); width = ink.x + ink.width; break; default: width = 0; } return width;}gintgdk_char_measure (GdkFont *font, gchar character){ g_return_val_if_fail (font != NULL, -1); return gdk_text_measure (font, &character, 1);}gintgdk_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));}gintgdk_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;}gintgdk_char_height (GdkFont *font, gchar character){ g_return_val_if_fail (font != NULL, -1); return gdk_text_height (font, &character, 1);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -