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

📄 pixbuf-rc-style.c

📁 This GTK+ version 2.12.3. GTK+ is a multi-platform toolkit for creating graphical user interfaces.
💻 C
📖 第 1 页 / 共 2 页
字号:
  guint               token;  token = g_scanner_get_next_token(scanner);  if (token != TOKEN_ARROW_DIRECTION)    return TOKEN_ARROW_DIRECTION;  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 == TOKEN_UP)    data->match_data.arrow_direction = GTK_ARROW_UP;  else if (token == TOKEN_DOWN)    data->match_data.arrow_direction = GTK_ARROW_DOWN;  else if (token == TOKEN_LEFT)    data->match_data.arrow_direction = GTK_ARROW_LEFT;  else if (token == TOKEN_RIGHT)    data->match_data.arrow_direction = GTK_ARROW_RIGHT;  else    return TOKEN_UP;  data->match_data.flags |= THEME_MATCH_ARROW_DIRECTION;    return G_TOKEN_NONE;}static guinttheme_parse_gap_side(GScanner * scanner,		     ThemeImage * data){  guint               token;  token = g_scanner_get_next_token(scanner);  if (token != TOKEN_GAP_SIDE)    return TOKEN_GAP_SIDE;  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 == TOKEN_TOP)    data->match_data.gap_side = GTK_POS_TOP;  else if (token == TOKEN_BOTTOM)    data->match_data.gap_side = GTK_POS_BOTTOM;  else if (token == TOKEN_LEFT)    data->match_data.gap_side = GTK_POS_LEFT;  else if (token == TOKEN_RIGHT)    data->match_data.gap_side = GTK_POS_RIGHT;  else    return TOKEN_TOP;  data->match_data.flags |= THEME_MATCH_GAP_SIDE;    return G_TOKEN_NONE;}static guinttheme_parse_orientation(GScanner * scanner,			ThemeImage * data){  guint               token;  token = g_scanner_get_next_token(scanner);  if (token != TOKEN_ORIENTATION)    return TOKEN_ORIENTATION;  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 == TOKEN_HORIZONTAL)    data->match_data.orientation = GTK_ORIENTATION_HORIZONTAL;  else if (token == TOKEN_VERTICAL)    data->match_data.orientation = GTK_ORIENTATION_VERTICAL;  else    return TOKEN_HORIZONTAL;  data->match_data.flags |= THEME_MATCH_ORIENTATION;    return G_TOKEN_NONE;}static guinttheme_parse_expander_style(GScanner * scanner,			   ThemeImage * data){  guint               token;  token = g_scanner_get_next_token(scanner);  if (token != TOKEN_EXPANDER_STYLE)    return TOKEN_EXPANDER_STYLE;  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 == TOKEN_COLLAPSED)    data->match_data.expander_style = GTK_EXPANDER_COLLAPSED;  else if (token == TOKEN_SEMI_COLLAPSED)    data->match_data.expander_style = GTK_EXPANDER_SEMI_COLLAPSED;  else if (token == TOKEN_SEMI_EXPANDED)    data->match_data.expander_style = GTK_EXPANDER_SEMI_EXPANDED;  else if (token == TOKEN_EXPANDED)    data->match_data.expander_style = GTK_EXPANDER_EXPANDED;  else    return TOKEN_COLLAPSED;  data->match_data.flags |= THEME_MATCH_EXPANDER_STYLE;  return G_TOKEN_NONE;}static guinttheme_parse_window_edge(GScanner * scanner,			ThemeImage * data){  guint               token;  token = g_scanner_get_next_token(scanner);  if (token != TOKEN_WINDOW_EDGE)    return TOKEN_WINDOW_EDGE;  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 == TOKEN_NORTH_WEST)    data->match_data.window_edge = GDK_WINDOW_EDGE_NORTH_WEST;  else if (token == TOKEN_NORTH)    data->match_data.window_edge = GDK_WINDOW_EDGE_NORTH;  else if (token == TOKEN_NORTH_EAST)    data->match_data.window_edge = GDK_WINDOW_EDGE_NORTH_EAST;  else if (token == TOKEN_WEST)    data->match_data.window_edge = GDK_WINDOW_EDGE_WEST;  else if (token == TOKEN_EAST)    data->match_data.window_edge = GDK_WINDOW_EDGE_EAST;  else if (token == TOKEN_SOUTH_WEST)    data->match_data.window_edge = GDK_WINDOW_EDGE_SOUTH_WEST;  else if (token == TOKEN_SOUTH)    data->match_data.window_edge = GDK_WINDOW_EDGE_SOUTH;  else if (token == TOKEN_SOUTH_EAST)    data->match_data.window_edge = GDK_WINDOW_EDGE_SOUTH_EAST;  else    return TOKEN_NORTH_WEST;  data->match_data.flags |= THEME_MATCH_WINDOW_EDGE;  return G_TOKEN_NONE;}static voidtheme_image_ref (ThemeImage *data){  data->refcount++;}static voidtheme_image_unref (ThemeImage *data){  data->refcount--;  if (data->refcount == 0)    {      g_free (data->match_data.detail);      if (data->background)	theme_pixbuf_destroy (data->background);      if (data->overlay)	theme_pixbuf_destroy (data->overlay);      if (data->gap_start)	theme_pixbuf_destroy (data->gap_start);      if (data->gap)	theme_pixbuf_destroy (data->gap);      if (data->gap_end)	theme_pixbuf_destroy (data->gap_end);      g_free (data);    }}static guinttheme_parse_image(GtkSettings  *settings,		  GScanner      *scanner,		  PixbufRcStyle *pixbuf_style,		  ThemeImage   **data_return){  guint               token;  ThemeImage *data;  data = NULL;  token = g_scanner_get_next_token(scanner);  if (token != TOKEN_IMAGE)    return TOKEN_IMAGE;  token = g_scanner_get_next_token(scanner);  if (token != G_TOKEN_LEFT_CURLY)    return G_TOKEN_LEFT_CURLY;  data = g_malloc(sizeof(ThemeImage));  data->refcount = 1;  data->background = NULL;  data->overlay = NULL;  data->gap_start = NULL;  data->gap = NULL;  data->gap_end = NULL;  data->recolorable = FALSE;  data->match_data.function = 0;  data->match_data.detail = NULL;  data->match_data.flags = 0;  token = g_scanner_peek_next_token(scanner);  while (token != G_TOKEN_RIGHT_CURLY)    {      switch (token)	{	case TOKEN_FUNCTION:	  token = theme_parse_function(scanner, data);	  break;	case TOKEN_RECOLORABLE:	  token = theme_parse_recolorable(scanner, data);	  break;	case TOKEN_DETAIL:	  token = theme_parse_detail(scanner, data);	  break;	case TOKEN_STATE:	  token = theme_parse_state(scanner, data);	  break;	case TOKEN_SHADOW:	  token = theme_parse_shadow(scanner, data);	  break;	case TOKEN_GAP_SIDE:	  token = theme_parse_gap_side(scanner, data);	  break;	case TOKEN_ARROW_DIRECTION:	  token = theme_parse_arrow_direction(scanner, data);	  break;	case TOKEN_ORIENTATION:	  token = theme_parse_orientation(scanner, data);	  break;	case TOKEN_FILE:	  token = theme_parse_file(settings, scanner, &data->background);	  break;	case TOKEN_BORDER:	  token = theme_parse_border(scanner, &data->background);	  break;	case TOKEN_STRETCH:	  token = theme_parse_stretch(scanner, &data->background);	  break;	case TOKEN_GAP_FILE:	  token = theme_parse_file(settings, scanner, &data->gap);	  break;	case TOKEN_GAP_BORDER:	  token = theme_parse_border(scanner, &data->gap);	  break;	case TOKEN_GAP_START_FILE:	  token = theme_parse_file(settings, scanner, &data->gap_start);	  break;	case TOKEN_GAP_START_BORDER:	  token = theme_parse_border(scanner, &data->gap_start);	  break;	case TOKEN_GAP_END_FILE:	  token = theme_parse_file(settings, scanner, &data->gap_end);	  break;	case TOKEN_GAP_END_BORDER:	  token = theme_parse_border(scanner, &data->gap_end);	  break;	case TOKEN_OVERLAY_FILE:	  token = theme_parse_file(settings, scanner, &data->overlay);	  break;	case TOKEN_OVERLAY_BORDER:	  token = theme_parse_border(scanner, &data->overlay);	  break;	case TOKEN_OVERLAY_STRETCH:	  token = theme_parse_stretch(scanner, &data->overlay);	  break;	case TOKEN_EXPANDER_STYLE:	  token = theme_parse_expander_style(scanner, data);	  break;	case TOKEN_WINDOW_EDGE:	  token = theme_parse_window_edge(scanner, data);	  break;	default:	  g_scanner_get_next_token(scanner);	  token = G_TOKEN_RIGHT_CURLY;	  break;	}      if (token != G_TOKEN_NONE)	{	  /* error - cleanup for exit */	  theme_image_unref (data);	  *data_return = NULL;	  return token;	}      token = g_scanner_peek_next_token(scanner);    }  token = g_scanner_get_next_token(scanner);  if (data->background && !data->background->filename)    {      g_scanner_warn (scanner, "Background image options specified without filename");      theme_pixbuf_destroy (data->background);      data->background = NULL;    }  if (data->overlay && !data->overlay->filename)    {      g_scanner_warn (scanner, "Overlay image options specified without filename");      theme_pixbuf_destroy (data->overlay);      data->overlay = NULL;    }  if (token != G_TOKEN_RIGHT_CURLY)    {      /* error - cleanup for exit */      theme_image_unref (data);      *data_return = NULL;      return G_TOKEN_RIGHT_CURLY;    }  /* everything is fine now - insert yer cruft */  *data_return = data;  return G_TOKEN_NONE;}static guintpixbuf_rc_style_parse (GtkRcStyle *rc_style,		       GtkSettings  *settings,		       GScanner   *scanner)		     {  static GQuark scope_id = 0;  PixbufRcStyle *pixbuf_style = PIXBUF_RC_STYLE (rc_style);  guint old_scope;  guint token;  gint i;  ThemeImage *img;    /* Set up a new scope in this scanner. */  if (!scope_id)    scope_id = g_quark_from_string("pixbuf_theme_engine");  /* 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, scope_id);  /* Now check if we already added our symbols to this scope   * (in some previous call to theme_parse_rc_style for the   * same scanner.   */  if (!g_scanner_lookup_symbol(scanner, theme_symbols[0].name))    {      for (i = 0; i < G_N_ELEMENTS (theme_symbols); i++)	g_scanner_scope_add_symbol(scanner, scope_id,				   theme_symbols[i].name,				   GINT_TO_POINTER(theme_symbols[i].token));    }  /* We're ready to go, now parse the top level */  token = g_scanner_peek_next_token(scanner);  while (token != G_TOKEN_RIGHT_CURLY)    {      switch (token)	{	case TOKEN_IMAGE:	  img = NULL;	  token = theme_parse_image(settings, scanner, pixbuf_style, &img);	  break;	default:	  g_scanner_get_next_token(scanner);	  token = G_TOKEN_RIGHT_CURLY;	  break;	}      if (token != G_TOKEN_NONE)	return token;      else	pixbuf_style->img_list = g_list_append(pixbuf_style->img_list, img);      token = g_scanner_peek_next_token(scanner);    }  g_scanner_get_next_token(scanner);  g_scanner_set_scope(scanner, old_scope);  return G_TOKEN_NONE;}static voidpixbuf_rc_style_merge (GtkRcStyle *dest,		       GtkRcStyle *src){  if (PIXBUF_IS_RC_STYLE (src))    {      PixbufRcStyle *pixbuf_dest = PIXBUF_RC_STYLE (dest);      PixbufRcStyle *pixbuf_src = PIXBUF_RC_STYLE (src);      GList *tmp_list1, *tmp_list2;            if (pixbuf_src->img_list)	{	  /* Copy src image list and append to dest image list */	  	  tmp_list2 = g_list_last (pixbuf_dest->img_list);	  tmp_list1 = pixbuf_src->img_list;	  	  while (tmp_list1)	    {	      if (tmp_list2)		{		  tmp_list2->next = g_list_alloc();		  tmp_list2->next->data = tmp_list1->data;		  tmp_list2->next->prev = tmp_list2;		  		  tmp_list2 = tmp_list2->next;		}	      else		{		  pixbuf_dest->img_list = g_list_append (NULL, tmp_list1->data);		  tmp_list2 = pixbuf_dest->img_list;		}	      	      theme_image_ref (tmp_list1->data);	      tmp_list1 = tmp_list1->next;	    }	}    }  parent_class->merge (dest, src);}/* Create an empty style suitable to this RC style */static GtkStyle *pixbuf_rc_style_create_style (GtkRcStyle *rc_style){  return g_object_new (PIXBUF_TYPE_STYLE, NULL);}

⌨️ 快捷键说明

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