⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gdkfont.c

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 C
📖 第 1 页 / 共 2 页
字号:
	  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 + -