📄 pangoxft-font.c
字号:
if (ink_rect) *ink_rect = extents->ink_rect; if (logical_rect) *logical_rect = extents->logical_rect;}static voidpango_xft_font_get_glyph_extents (PangoFont *font, PangoGlyph glyph, PangoRectangle *ink_rect, PangoRectangle *logical_rect){ PangoXftFont *xfont = (PangoXftFont *)font; PangoFcFont *fcfont = PANGO_FC_FONT (font); if (!fcfont->fontmap) /* Display closed */ goto fallback; if (glyph == PANGO_GLYPH_EMPTY) { fallback: if (ink_rect) ink_rect->x = ink_rect->width = ink_rect->y = ink_rect->height = 0; if (logical_rect) logical_rect->x = logical_rect->width = logical_rect->y = logical_rect->height = 0; return; } if (glyph & PANGO_GLYPH_UNKNOWN_FLAG) { get_glyph_extents_missing (xfont, glyph, ink_rect, logical_rect); } else { if (!fcfont->is_transformed) get_glyph_extents_xft (fcfont, glyph, ink_rect, logical_rect); else get_glyph_extents_raw (xfont, glyph, ink_rect, logical_rect); }}static voidload_fallback_font (PangoXftFont *xfont){ PangoFcFont *fcfont = PANGO_FC_FONT (xfont); Display *display; int screen; XftFont *xft_font; gboolean size_is_absolute; double size; _pango_xft_font_map_get_info (fcfont->fontmap, &display, &screen); size_is_absolute = pango_font_description_get_size_is_absolute (fcfont->description); size = pango_font_description_get_size (fcfont->description) / PANGO_SCALE; xft_font = XftFontOpen (display, screen, FC_FAMILY, FcTypeString, "sans", size_is_absolute ? FC_PIXEL_SIZE : FC_SIZE, FcTypeDouble, size, NULL); if (!xft_font) { g_warning ("Cannot open fallback font, nothing to do"); exit (1); } xfont->xft_font = xft_font;}static XftFont *xft_font_get_font (PangoFont *font){ PangoXftFont *xfont; PangoFcFont *fcfont; Display *display; int screen; xfont = (PangoXftFont *)font; fcfont = (PangoFcFont *)font; if (G_UNLIKELY (xfont->xft_font == NULL)) { FcPattern *pattern = FcPatternDuplicate (fcfont->font_pattern); FcPatternDel (pattern, FC_SPACING); _pango_xft_font_map_get_info (fcfont->fontmap, &display, &screen); xfont->xft_font = XftFontOpenPattern (display, pattern); if (!xfont->xft_font) { gchar *name = pango_font_description_to_string (fcfont->description); g_warning ("Cannot open font file for font %s", name); g_free (name); load_fallback_font (xfont); } } return xfont->xft_font;}static FT_Facepango_xft_font_real_lock_face (PangoFcFont *font){ XftFont *xft_font = xft_font_get_font ((PangoFont *)font); return XftLockFace (xft_font);}static voidpango_xft_font_real_unlock_face (PangoFcFont *font){ XftFont *xft_font = xft_font_get_font ((PangoFont *)font); XftUnlockFace (xft_font);}static gbooleanpango_xft_font_real_has_char (PangoFcFont *font, gunichar wc){ XftFont *xft_font = xft_font_get_font ((PangoFont *)font); return XftCharExists (NULL, xft_font, wc);}static guintpango_xft_font_real_get_glyph (PangoFcFont *font, gunichar wc){ XftFont *xft_font = xft_font_get_font ((PangoFont *)font); return XftCharIndex (NULL, xft_font, wc);}static voidpango_xft_font_real_shutdown (PangoFcFont *fcfont){ PangoXftFont *xfont = PANGO_XFT_FONT (fcfont); if (xfont->xft_font) { Display *display; _pango_xft_font_map_get_info (fcfont->fontmap, &display, NULL); XftFontClose (display, xfont->xft_font); xfont->xft_font = NULL; }}/** * pango_xft_font_get_font: * @font: a #PangoFont. * * Returns the XftFont of a font. * * Return value: the XftFont associated to @font. **/XftFont *pango_xft_font_get_font (PangoFont *font){ if (G_UNLIKELY (!PANGO_XFT_IS_FONT (font))) { if (!_pango_xft_warning_history.get_font) { _pango_xft_warning_history.get_font = TRUE; g_warning ("pango_xft_font_get_font called with bad font, expect ugly output"); } return NULL; } return xft_font_get_font (font);}/** * pango_xft_font_get_display: * @font: a #PangoFont. * * Returns the X display of the XftFont of a font. * * Return value: the X display of the XftFont associated to @font. **/Display *pango_xft_font_get_display (PangoFont *font){ PangoFcFont *fcfont; Display *display; g_return_val_if_fail (PANGO_XFT_IS_FONT (font), NULL); fcfont = PANGO_FC_FONT (font); _pango_xft_font_map_get_info (fcfont->fontmap, &display, NULL); return display;}/** * pango_xft_font_get_unknown_glyph: * @font: a #PangoFont. * @wc: the Unicode character for which a glyph is needed. * * Returns the index of a glyph suitable for drawing @wc as an * unknown character. * * Use PANGO_GET_UNKNOWN_GLYPH() instead. * * Return value: a glyph index into @font. **/PangoGlyphpango_xft_font_get_unknown_glyph (PangoFont *font, gunichar wc){ g_return_val_if_fail (PANGO_XFT_IS_FONT (font), PANGO_GLYPH_EMPTY); return pango_fc_font_get_unknown_glyph (PANGO_FC_FONT (font), wc);}/** * pango_xft_font_lock_face: * @font: a #PangoFont. * * Gets the FreeType <type>FT_Face</type> associated with a font, * This face will be kept around until you call * pango_xft_font_unlock_face(). * * Use pango_fc_font_lock_face() instead. * * Return value: the FreeType <type>FT_Face</type> associated with @font. * * Since: 1.2 **/FT_Facepango_xft_font_lock_face (PangoFont *font){ g_return_val_if_fail (PANGO_XFT_IS_FONT (font), NULL); return pango_fc_font_lock_face (PANGO_FC_FONT (font));}/** * pango_xft_font_unlock_face: * @font: a #PangoFont. * * Releases a font previously obtained with * pango_xft_font_lock_face(). * * Use pango_fc_font_unlock_face() instead. * * Since: 1.2 **/voidpango_xft_font_unlock_face (PangoFont *font){ g_return_if_fail (PANGO_XFT_IS_FONT (font)); pango_fc_font_unlock_face (PANGO_FC_FONT (font));}/** * pango_xft_font_get_glyph: * @font: a #PangoFont for the Xft backend * @wc: Unicode codepoint to look up * * Gets the glyph index for a given Unicode character * for @font. If you only want to determine * whether the font has the glyph, use pango_xft_font_has_char(). * * Use pango_fc_font_get_glyph() instead. * * Return value: the glyph index, or 0, if the Unicode * character does not exist in the font. * * Since: 1.2 **/guintpango_xft_font_get_glyph (PangoFont *font, gunichar wc){ g_return_val_if_fail (PANGO_XFT_IS_FONT (font), 0); return pango_fc_font_get_glyph (PANGO_FC_FONT (font), wc);}/** * pango_xft_font_has_char: * @font: a #PangoFont for the Xft backend * @wc: Unicode codepoint to look up * * Determines whether @font has a glyph for the codepoint @wc. * * Use pango_fc_font_has_char() instead. * * Return value: %TRUE if @font has the requested codepoint. * * Since: 1.2 **/gbooleanpango_xft_font_has_char (PangoFont *font, gunichar wc){ g_return_val_if_fail (PANGO_XFT_IS_FONT (font), 0); return pango_fc_font_has_char (PANGO_FC_FONT (font), wc);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -