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

📄 gtkrc.c

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 C
📖 第 1 页 / 共 4 页
字号:
{  guint token;    token = g_scanner_get_next_token (scanner);  if (token != GTK_RC_TOKEN_FONT)    return GTK_RC_TOKEN_FONT;    token = g_scanner_get_next_token (scanner);  if (token != G_TOKEN_EQUAL_SIGN)    return G_TOKEN_EQUAL_SIGN;    token = g_scanner_get_next_token (scanner);  if (token != G_TOKEN_STRING)    return G_TOKEN_STRING;    if (rc_style->font_name)    g_free (rc_style->font_name);  rc_style->font_name = g_strdup (scanner->value.v_string);    return G_TOKEN_NONE;}static guintgtk_rc_parse_fontset (GScanner	 *scanner,		      GtkRcStyle *rc_style){  guint token;    token = g_scanner_get_next_token (scanner);  if (token != GTK_RC_TOKEN_FONTSET)    return GTK_RC_TOKEN_FONTSET;    token = g_scanner_get_next_token (scanner);  if (token != G_TOKEN_EQUAL_SIGN)    return G_TOKEN_EQUAL_SIGN;    token = g_scanner_get_next_token (scanner);  if (token != G_TOKEN_STRING)    return G_TOKEN_STRING;    if (rc_style->fontset_name)    g_free (rc_style->fontset_name);  rc_style->fontset_name = g_strdup (scanner->value.v_string);    return G_TOKEN_NONE;}static guint	   gtk_rc_parse_engine (GScanner	 *scanner,		     GtkRcStyle	 *rc_style){  guint token;  token = g_scanner_get_next_token (scanner);  if (token != GTK_RC_TOKEN_ENGINE)    return GTK_RC_TOKEN_ENGINE;  token = g_scanner_get_next_token (scanner);  if (token != G_TOKEN_STRING)    return G_TOKEN_STRING;  rc_style->engine = gtk_theme_engine_get (scanner->value.v_string);  token = g_scanner_get_next_token (scanner);  if (token != G_TOKEN_LEFT_CURLY)    return G_TOKEN_LEFT_CURLY;  if (rc_style->engine)    return rc_style->engine->parse_rc_style (scanner, rc_style);  else    {      /* Skip over remainder, looking for nested {}'s */      guint count = 1;            while ((token = g_scanner_get_next_token (scanner)) != G_TOKEN_EOF)	{	  if (token == G_TOKEN_LEFT_CURLY)	    count++;	  else if (token == G_TOKEN_RIGHT_CURLY)	    count--;	  if (count == 0)	    return G_TOKEN_NONE;	}      return G_TOKEN_RIGHT_CURLY;    }}guintgtk_rc_parse_state (GScanner	 *scanner,		    GtkStateType *state){  guint old_scope;  guint token;  g_return_val_if_fail (scanner != NULL, G_TOKEN_ERROR);  g_return_val_if_fail (state != NULL, G_TOKEN_ERROR);    /* we don't know where we got called from, so we reset the scope here.   * if we bail out due to errors, we *don't* reset the scope, so the   * error messaging code can make sense of our tokens.   */  old_scope = g_scanner_set_scope (scanner, 0);    token = g_scanner_get_next_token (scanner);  if (token != G_TOKEN_LEFT_BRACE)    return G_TOKEN_LEFT_BRACE;    token = g_scanner_get_next_token (scanner);  switch (token)    {    case GTK_RC_TOKEN_ACTIVE:      *state = GTK_STATE_ACTIVE;      break;    case GTK_RC_TOKEN_INSENSITIVE:      *state = GTK_STATE_INSENSITIVE;      break;    case GTK_RC_TOKEN_NORMAL:      *state = GTK_STATE_NORMAL;      break;    case GTK_RC_TOKEN_PRELIGHT:      *state = GTK_STATE_PRELIGHT;      break;    case GTK_RC_TOKEN_SELECTED:      *state = GTK_STATE_SELECTED;      break;    default:      return /* G_TOKEN_SYMBOL */ GTK_RC_TOKEN_NORMAL;    }    token = g_scanner_get_next_token (scanner);  if (token != G_TOKEN_RIGHT_BRACE)    return G_TOKEN_RIGHT_BRACE;    g_scanner_set_scope (scanner, old_scope);  return G_TOKEN_NONE;}guintgtk_rc_parse_priority (GScanner	           *scanner,		       GtkPathPriorityType *priority){  guint old_scope;  guint token;  g_return_val_if_fail (scanner != NULL, G_TOKEN_ERROR);  g_return_val_if_fail (priority != NULL, G_TOKEN_ERROR);  /* we don't know where we got called from, so we reset the scope here.   * if we bail out due to errors, we *don't* reset the scope, so the   * error messaging code can make sense of our tokens.   */  old_scope = g_scanner_set_scope (scanner, 0);    token = g_scanner_get_next_token (scanner);  if (token != ':')    return ':';    token = g_scanner_get_next_token (scanner);  switch (token)    {    case GTK_RC_TOKEN_LOWEST:      *priority = GTK_PATH_PRIO_LOWEST;      break;    case GTK_RC_TOKEN_GTK:      *priority = GTK_PATH_PRIO_GTK;      break;    case GTK_RC_TOKEN_APPLICATION:      *priority = GTK_PATH_PRIO_APPLICATION;      break;    case GTK_RC_TOKEN_RC:      *priority = GTK_PATH_PRIO_RC;      break;    case GTK_RC_TOKEN_HIGHEST:      *priority = GTK_PATH_PRIO_HIGHEST;      break;    default:      return /* G_TOKEN_SYMBOL */ GTK_RC_TOKEN_APPLICATION;    }    g_scanner_set_scope (scanner, old_scope);  return G_TOKEN_NONE;}guintgtk_rc_parse_color (GScanner *scanner,		    GdkColor *color){  guint token;  g_return_val_if_fail (scanner != NULL, G_TOKEN_ERROR);  /* we don't need to set our own scop here, because   * we don't need own symbols   */    token = g_scanner_get_next_token (scanner);  switch (token)    {      gint token_int;      gint length;      gint temp;      gchar buf[9];      gint i, j;          case G_TOKEN_LEFT_CURLY:      token = g_scanner_get_next_token (scanner);      if (token == G_TOKEN_INT)	token_int = scanner->value.v_int;      else if (token == G_TOKEN_FLOAT)	token_int = scanner->value.v_float * 65535.0;      else	return G_TOKEN_FLOAT;      color->red = CLAMP (token_int, 0, 65535);            token = g_scanner_get_next_token (scanner);      if (token != G_TOKEN_COMMA)	return G_TOKEN_COMMA;            token = g_scanner_get_next_token (scanner);      if (token == G_TOKEN_INT)	token_int = scanner->value.v_int;      else if (token == G_TOKEN_FLOAT)	token_int = scanner->value.v_float * 65535.0;      else	return G_TOKEN_FLOAT;      color->green = CLAMP (token_int, 0, 65535);            token = g_scanner_get_next_token (scanner);      if (token != G_TOKEN_COMMA)	return G_TOKEN_COMMA;            token = g_scanner_get_next_token (scanner);      if (token == G_TOKEN_INT)	token_int = scanner->value.v_int;      else if (token == G_TOKEN_FLOAT)	token_int = scanner->value.v_float * 65535.0;      else	return G_TOKEN_FLOAT;      color->blue = CLAMP (token_int, 0, 65535);            token = g_scanner_get_next_token (scanner);      if (token != G_TOKEN_RIGHT_CURLY)	return G_TOKEN_RIGHT_CURLY;      return G_TOKEN_NONE;          case G_TOKEN_STRING:      if (scanner->value.v_string[0] != '#')	return G_TOKEN_STRING;            length = strlen (scanner->value.v_string) - 1;      if (((length % 3) != 0) || (length > 12))	return G_TOKEN_STRING;      length /= 3;            for (i = 0, j = 1; i < length; i++, j++)	buf[i] = scanner->value.v_string[j];      buf[i] = '\0';            sscanf (buf, "%x", &temp);      color->red = temp;            for (i = 0; i < length; i++, j++)	buf[i] = scanner->value.v_string[j];      buf[i] = '\0';            sscanf (buf, "%x", &temp);      color->green = temp;            for (i = 0; i < length; i++, j++)	buf[i] = scanner->value.v_string[j];      buf[i] = '\0';            sscanf (buf, "%x", &temp);      color->blue = temp;            if (length == 1)	{	  color->red *= 4369;	  color->green *= 4369;	  color->blue *= 4369;	}      else if (length == 2)	{	  color->red *= 257;	  color->green *= 257;	  color->blue *= 257;	}      else if (length == 3)	{	  color->red *= 16;	  color->green *= 16;	  color->blue *= 16;	}      return G_TOKEN_NONE;          default:      return G_TOKEN_STRING;    }}static guintgtk_rc_parse_pixmap_path (GScanner *scanner){  guint token;    token = g_scanner_get_next_token (scanner);  if (token != GTK_RC_TOKEN_PIXMAP_PATH)    return GTK_RC_TOKEN_PIXMAP_PATH;    token = g_scanner_get_next_token (scanner);  if (token != G_TOKEN_STRING)    return G_TOKEN_STRING;    gtk_rc_parse_pixmap_path_string (scanner->value.v_string);    return G_TOKEN_NONE;}static voidgtk_rc_parse_pixmap_path_string (gchar *pix_path){  gchar *buf;  gint end_offset;  gint start_offset = 0;  gint path_len;  gint path_num;    /* free the old one, or just add to the old one ? */  for (path_num=0; pixmap_path[path_num]; path_num++)    {      g_free (pixmap_path[path_num]);      pixmap_path[path_num] = NULL;    }    path_num = 0;    path_len = strlen (pix_path);    buf = g_strdup (pix_path);    for (end_offset = 0; end_offset <= path_len; end_offset++)    {      if ((buf[end_offset] == ':') ||	  (end_offset == path_len))	{	  buf[end_offset] = '\0';	  pixmap_path[path_num] = g_strdup (buf + start_offset);	  path_num++;	  pixmap_path[path_num] = NULL;	  start_offset = end_offset + 1;	}    }  g_free (buf);  gtk_rc_append_default_pixmap_path();}static guintgtk_rc_parse_module_path (GScanner *scanner){  guint token;    token = g_scanner_get_next_token (scanner);  if (token != GTK_RC_TOKEN_MODULE_PATH)    return GTK_RC_TOKEN_MODULE_PATH;    token = g_scanner_get_next_token (scanner);  if (token != G_TOKEN_STRING)    return G_TOKEN_STRING;    gtk_rc_parse_module_path_string (scanner->value.v_string);    return G_TOKEN_NONE;}static voidgtk_rc_parse_module_path_string (gchar *mod_path){  gchar *buf;  gint end_offset;  gint start_offset = 0;  gint path_len;  gint path_num;    /* free the old one, or just add to the old one ? */  for (path_num=0; module_path[path_num]; path_num++)    {      g_free (module_path[path_num]);      module_path[path_num] = NULL;    }    path_num = 0;    path_len = strlen (mod_path);    buf = g_strdup (mod_path);    for (end_offset = 0; end_offset <= path_len; end_offset++)    {      if ((buf[end_offset] == ':') ||	  (end_offset == path_len))	{	  buf[end_offset] = '\0';	  module_path[path_num] = g_strdup (buf + start_offset);	  path_num++;	  module_path[path_num] = NULL;	  start_offset = end_offset + 1;	}    }  g_free (buf);  gtk_rc_append_default_module_path();}static guintgtk_rc_parse_path_pattern (GScanner   *scanner){  guint token;  GtkPathType path_type;  gchar *pattern;  gboolean is_binding;  GtkPathPriorityType priority = GTK_PATH_PRIO_RC;    token = g_scanner_get_next_token (scanner);  switch (token)    {    case GTK_RC_TOKEN_WIDGET:      path_type = GTK_PATH_WIDGET;      break;    case GTK_RC_TOKEN_WIDGET_CLASS:      path_type = GTK_PATH_WIDGET_CLASS;      break;    case GTK_RC_TOKEN_CLASS:      path_type = GTK_PATH_CLASS;      break;    default:      return GTK_RC_TOKEN_WIDGET_CLASS;    }    token = g_scanner_get_next_token (scanner);  if (token != G_TOKEN_STRING)    return G_TOKEN_STRING;  pattern = g_strdup (scanner->value.v_string);  token = g_scanner_get_next_token (scanner);  if (token == GTK_RC_TOKEN_STYLE)    is_binding = FALSE;  else if (token == GTK_RC_TOKEN_BINDING)    {      is_binding = TRUE;      if (g_scanner_peek_next_token (scanner) == ':')	{	  token = gtk_rc_parse_priority (scanner, &priority);	  if (token != G_TOKEN_NONE)	    {	      g_free (pattern);	      return token;	    }	}    }  else    {      g_free (pattern);      return GTK_RC_TOKEN_STYLE;    }    token = g_scanner_get_next_token (scanner);  if (token != G_TOKEN_STRING)    {      g_free (pattern);      return G_TOKEN_STRING;    }  if (is_binding)    {      GtkBindingSet *binding;      binding = gtk_binding_set_find (scanner->value.v_string);      if (!binding)	{	  g_free (pattern);	  return G_TOKEN_STRING;	}      gtk_binding_set_add_path (binding, path_type, pattern, priority);    }  else    {      GtkRcStyle *rc_style;      GtkRcSet *rc_set;      rc_style = gtk_rc_style_find (scanner->value.v_string);            if (!rc_style)	{	  g_free (pattern);	  return G_TOKEN_STRING;	}      rc_set = g_new (GtkRcSet, 1);      gtk_pattern_spec_init (&rc_set->pspec, pattern);      rc_set->rc_style = rc_style;      if (path_type == GTK_PATH_WIDGET)	gtk_rc_sets_widget = g_slist_prepend (gtk_rc_sets_widget, rc_set);      else if (path_type == GTK_PATH_WIDGET_CLASS)	gtk_rc_sets_widget_class = g_slist_prepend (gtk_rc_sets_widget_class, rc_set);      else	gtk_rc_sets_class = g_slist_prepend (gtk_rc_sets_class, rc_set);    }  g_free (pattern);  return G_TOKEN_NONE;}/*typedef  GdkPixmap * (*GtkImageLoader) (GdkWindow   *window,                                        GdkColormap *colormap,                                        GdkBitmap  **mask,                                        GdkColor    *transparent_color,                                        const gchar *filename);*/voidgtk_rc_set_image_loader(GtkImageLoader loader){  image_loader = loader;}GdkPixmap *gtk_rc_load_image (GdkColormap *colormap,		   GdkColor    *transparent_color,		   const gchar *filename){  if (strcmp (filename, "<parent>") == 0)    return (GdkPixmap*) GDK_PARENT_RELATIVE;  else    {      if(image_loader)	return image_loader(NULL, colormap, NULL,			    transparent_color,			    filename);      else	return gdk_pixmap_colormap_create_from_xpm (NULL, colormap, NULL,						    transparent_color,						    filename);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -