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

📄 pixbuf-rc-style.c

📁 This GTK+ version 2.12.3. GTK+ is a multi-platform toolkit for creating graphical user interfaces.
💻 C
📖 第 1 页 / 共 2 页
字号:
/* GTK+ Pixbuf Engine * Copyright (C) 1998-2000 Red Hat, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. * * Written by Owen Taylor <otaylor@redhat.com>, based on code by * Carsten Haitzler <raster@rasterman.com> */#include "pixbuf.h"#include "pixbuf-style.h"#include "pixbuf-rc-style.h"static void      pixbuf_rc_style_init         (PixbufRcStyle      *style);static void      pixbuf_rc_style_class_init   (PixbufRcStyleClass *klass);static void      pixbuf_rc_style_finalize     (GObject            *object);static guint     pixbuf_rc_style_parse        (GtkRcStyle         *rc_style,					       GtkSettings  *settings,					       GScanner           *scanner);static void      pixbuf_rc_style_merge        (GtkRcStyle         *dest,					       GtkRcStyle         *src);static GtkStyle *pixbuf_rc_style_create_style (GtkRcStyle         *rc_style);static void theme_image_unref (ThemeImage *data);static const struct  {    gchar              *name;    guint               token;  }theme_symbols[] ={  { "image", 		TOKEN_IMAGE  },  { "function", 	TOKEN_FUNCTION },  { "file", 		TOKEN_FILE },  { "stretch", 		TOKEN_STRETCH },  { "recolorable", 	TOKEN_RECOLORABLE },  { "border", 		TOKEN_BORDER },  { "detail", 		TOKEN_DETAIL },  { "state", 		TOKEN_STATE },  { "shadow", 		TOKEN_SHADOW },  { "gap_side", 	TOKEN_GAP_SIDE },  { "gap_file", 	TOKEN_GAP_FILE },  { "gap_border", 	TOKEN_GAP_BORDER },  { "gap_start_file", 	TOKEN_GAP_START_FILE },  { "gap_start_border", TOKEN_GAP_START_BORDER },  { "gap_end_file", 	TOKEN_GAP_END_FILE },  { "gap_end_border", 	TOKEN_GAP_END_BORDER },  { "overlay_file", 	TOKEN_OVERLAY_FILE },  { "overlay_border", 	TOKEN_OVERLAY_BORDER },  { "overlay_stretch", 	TOKEN_OVERLAY_STRETCH },  { "arrow_direction", 	TOKEN_ARROW_DIRECTION },  { "orientation", 	TOKEN_ORIENTATION },  { "expander_style",	TOKEN_EXPANDER_STYLE },  { "window_edge",	TOKEN_WINDOW_EDGE },  { "HLINE", 		TOKEN_D_HLINE },  { "VLINE",		TOKEN_D_VLINE },  { "SHADOW",		TOKEN_D_SHADOW },  { "POLYGON",		TOKEN_D_POLYGON },  { "ARROW",		TOKEN_D_ARROW },  { "DIAMOND",		TOKEN_D_DIAMOND },  { "OVAL",		TOKEN_D_OVAL },  { "STRING",		TOKEN_D_STRING },  { "BOX",		TOKEN_D_BOX },  { "FLAT_BOX",		TOKEN_D_FLAT_BOX },  { "CHECK",		TOKEN_D_CHECK },  { "OPTION",		TOKEN_D_OPTION },  { "CROSS",		TOKEN_D_CROSS },  { "RAMP",		TOKEN_D_RAMP },  { "TAB",		TOKEN_D_TAB },  { "SHADOW_GAP",	TOKEN_D_SHADOW_GAP },  { "BOX_GAP",		TOKEN_D_BOX_GAP },  { "EXTENSION",	TOKEN_D_EXTENSION },  { "FOCUS",		TOKEN_D_FOCUS },  { "SLIDER",		TOKEN_D_SLIDER },  { "ENTRY",		TOKEN_D_ENTRY },  { "HANDLE",		TOKEN_D_HANDLE },  { "STEPPER",		TOKEN_D_STEPPER },  { "EXPANDER",		TOKEN_D_EXPANDER },  { "RESIZE_GRIP",	TOKEN_D_RESIZE_GRIP },  { "TRUE",		TOKEN_TRUE },  { "FALSE",		TOKEN_FALSE },  { "TOP",		TOKEN_TOP },  { "UP",		TOKEN_UP },  { "BOTTOM",		TOKEN_BOTTOM },  { "DOWN",		TOKEN_DOWN },  { "LEFT",		TOKEN_LEFT },  { "RIGHT",		TOKEN_RIGHT },  { "NORMAL",		TOKEN_NORMAL },  { "ACTIVE",		TOKEN_ACTIVE },  { "PRELIGHT",		TOKEN_PRELIGHT },  { "SELECTED",		TOKEN_SELECTED },  { "INSENSITIVE",	TOKEN_INSENSITIVE },  { "NONE",		TOKEN_NONE },  { "IN",		TOKEN_IN },  { "OUT",		TOKEN_OUT },  { "ETCHED_IN",	TOKEN_ETCHED_IN },  { "ETCHED_OUT",	TOKEN_ETCHED_OUT },  { "HORIZONTAL",	TOKEN_HORIZONTAL },  { "VERTICAL",		TOKEN_VERTICAL },  { "COLLAPSED",	TOKEN_COLLAPSED },  { "SEMI_COLLAPSED",	TOKEN_SEMI_COLLAPSED },  { "SEMI_EXPANDED",	TOKEN_SEMI_EXPANDED },  { "EXPANDED",		TOKEN_EXPANDED },  { "NORTH_WEST",	TOKEN_NORTH_WEST },  { "NORTH",		TOKEN_NORTH },  { "NORTH_EAST",	TOKEN_NORTH_EAST },  { "WEST",		TOKEN_WEST },  { "EAST",		TOKEN_EAST },  { "SOUTH_WEST",	TOKEN_SOUTH_WEST },  { "SOUTH",		TOKEN_SOUTH },  { "SOUTH_EAST",	TOKEN_SOUTH_EAST }};static GtkRcStyleClass *parent_class;GType pixbuf_type_rc_style = 0;voidpixbuf_rc_style_register_type (GTypeModule *module){  static const GTypeInfo object_info =  {    sizeof (PixbufRcStyleClass),    (GBaseInitFunc) NULL,    (GBaseFinalizeFunc) NULL,    (GClassInitFunc) pixbuf_rc_style_class_init,    NULL,           /* class_finalize */    NULL,           /* class_data */    sizeof (PixbufRcStyle),    0,              /* n_preallocs */    (GInstanceInitFunc) pixbuf_rc_style_init,  };    pixbuf_type_rc_style = g_type_module_register_type (module,						      GTK_TYPE_RC_STYLE,						      "PixbufRcStyle",						      &object_info, 0);}static voidpixbuf_rc_style_init (PixbufRcStyle *style){}static voidpixbuf_rc_style_class_init (PixbufRcStyleClass *klass){  GtkRcStyleClass *rc_style_class = GTK_RC_STYLE_CLASS (klass);  GObjectClass *object_class = G_OBJECT_CLASS (klass);  parent_class = g_type_class_peek_parent (klass);  rc_style_class->parse = pixbuf_rc_style_parse;  rc_style_class->merge = pixbuf_rc_style_merge;  rc_style_class->create_style = pixbuf_rc_style_create_style;    object_class->finalize = pixbuf_rc_style_finalize;}static voidpixbuf_rc_style_finalize (GObject *object){  PixbufRcStyle *rc_style = PIXBUF_RC_STYLE (object);    g_list_foreach (rc_style->img_list, (GFunc) theme_image_unref, NULL);  g_list_free (rc_style->img_list);  G_OBJECT_CLASS (parent_class)->finalize (object);}static guinttheme_parse_file(GtkSettings  *settings,		 GScanner     *scanner,		 ThemePixbuf **theme_pb){  guint token;  gchar *pixmap;  /* Skip 'blah_file' */  token = g_scanner_get_next_token(scanner);  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 (!*theme_pb)    *theme_pb = theme_pixbuf_new ();  pixmap = gtk_rc_find_pixmap_in_path(settings, scanner, scanner->value.v_string);  if (pixmap)    {      theme_pixbuf_set_filename (*theme_pb, pixmap);      g_free (pixmap);    }  return G_TOKEN_NONE;}static guinttheme_parse_border (GScanner     *scanner,		    ThemePixbuf **theme_pb){  guint               token;  gint left, right, top, bottom;  /* Skip 'blah_border' */  token = g_scanner_get_next_token(scanner);  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_LEFT_CURLY)    return G_TOKEN_LEFT_CURLY;  token = g_scanner_get_next_token(scanner);  if (token != G_TOKEN_INT)    return G_TOKEN_INT;  left = scanner->value.v_int;  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)    return G_TOKEN_INT;  right = scanner->value.v_int;  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)    return G_TOKEN_INT;  top = scanner->value.v_int;  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)    return G_TOKEN_INT;  bottom = scanner->value.v_int;  token = g_scanner_get_next_token(scanner);  if (token != G_TOKEN_RIGHT_CURLY)    return G_TOKEN_RIGHT_CURLY;  if (!*theme_pb)    *theme_pb = theme_pixbuf_new ();    theme_pixbuf_set_border (*theme_pb, left, right, top, bottom);    return G_TOKEN_NONE;}static guinttheme_parse_stretch(GScanner     *scanner,		    ThemePixbuf **theme_pb){  guint token;  gboolean stretch;  /* Skip 'blah_stretch' */  token = g_scanner_get_next_token(scanner);  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_TRUE)    stretch = TRUE;  else if (token == TOKEN_FALSE)    stretch = FALSE;  else    return TOKEN_TRUE;  if (!*theme_pb)    *theme_pb = theme_pixbuf_new ();    theme_pixbuf_set_stretch (*theme_pb, stretch);    return G_TOKEN_NONE;}static guinttheme_parse_recolorable(GScanner * scanner,			ThemeImage * data){  guint               token;  token = g_scanner_get_next_token(scanner);  if (token != TOKEN_RECOLORABLE)    return TOKEN_RECOLORABLE;  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_TRUE)    data->recolorable = 1;  else if (token == TOKEN_FALSE)    data->recolorable = 0;  else    return TOKEN_TRUE;  return G_TOKEN_NONE;}static guinttheme_parse_function(GScanner * scanner,		     ThemeImage *data){  guint               token;  token = g_scanner_get_next_token(scanner);  if (token != TOKEN_FUNCTION)    return TOKEN_FUNCTION;  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_D_HLINE) && (token <= TOKEN_D_RESIZE_GRIP))    data->match_data.function = token;  return G_TOKEN_NONE;}static guinttheme_parse_detail(GScanner * scanner,		   ThemeImage * data){  guint               token;  token = g_scanner_get_next_token(scanner);  if (token != TOKEN_DETAIL)    return TOKEN_DETAIL;  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;  g_free (data->match_data.detail);    data->match_data.detail = g_strdup(scanner->value.v_string);  return G_TOKEN_NONE;}static guinttheme_parse_state(GScanner * scanner,		  ThemeImage * data){  guint               token;  token = g_scanner_get_next_token(scanner);  if (token != TOKEN_STATE)    return TOKEN_STATE;  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_NORMAL)    data->match_data.state = GTK_STATE_NORMAL;  else if (token == TOKEN_ACTIVE)    data->match_data.state = GTK_STATE_ACTIVE;  else if (token == TOKEN_PRELIGHT)    data->match_data.state = GTK_STATE_PRELIGHT;  else if (token == TOKEN_SELECTED)    data->match_data.state = GTK_STATE_SELECTED;  else if (token == TOKEN_INSENSITIVE)    data->match_data.state = GTK_STATE_INSENSITIVE;  else    return TOKEN_NORMAL;  data->match_data.flags |= THEME_MATCH_STATE;    return G_TOKEN_NONE;}static guinttheme_parse_shadow(GScanner * scanner,		   ThemeImage * data){  guint               token;  token = g_scanner_get_next_token(scanner);  if (token != TOKEN_SHADOW)    return TOKEN_SHADOW;  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_NONE)    data->match_data.shadow = GTK_SHADOW_NONE;  else if (token == TOKEN_IN)    data->match_data.shadow = GTK_SHADOW_IN;  else if (token == TOKEN_OUT)    data->match_data.shadow = GTK_SHADOW_OUT;  else if (token == TOKEN_ETCHED_IN)    data->match_data.shadow = GTK_SHADOW_ETCHED_IN;  else if (token == TOKEN_ETCHED_OUT)    data->match_data.shadow = GTK_SHADOW_ETCHED_OUT;  else    return TOKEN_NONE;  data->match_data.flags |= THEME_MATCH_SHADOW;    return G_TOKEN_NONE;}static guinttheme_parse_arrow_direction(GScanner * scanner,			    ThemeImage * data){

⌨️ 快捷键说明

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