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

📄 gtkcolorsel.c

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 C
📖 第 1 页 / 共 4 页
字号:
	{	  gtk_widget_show (label);	  gtk_widget_show (colorsel->scales[n]);	  gtk_widget_show (colorsel->entries[n]);	}      gtk_signal_connect_object (GTK_OBJECT (adj), "value_changed",                                 scale_vals[n].updater, (gpointer) colorsel->scales[n]);      gtk_object_set_data (GTK_OBJECT (colorsel->scales[n]), "_GtkColorSelection", (gpointer) colorsel);      gtk_object_set_data (GTK_OBJECT (colorsel->scales[n]), value_index_key, GINT_TO_POINTER (n));      gtk_signal_connect_object (GTK_OBJECT (colorsel->entries[n]), "changed",                                 scale_vals[n].updater, (gpointer) colorsel->entries[n]);      gtk_object_set_data (GTK_OBJECT (colorsel->entries[n]), "_GtkColorSelection", (gpointer) colorsel);      gtk_object_set_data (GTK_OBJECT (colorsel->entries[n]), value_index_key, GINT_TO_POINTER (n));    }  colorsel->opacity_label = label;    gtk_widget_show (table);  gtk_widget_show (hbox);}static voidgtk_color_selection_set_arg (GtkObject *object,			     GtkArg    *arg,			     guint      arg_id){  GtkColorSelection *color_selection = GTK_COLOR_SELECTION (object);    switch (arg_id)    {    case ARG_UPDATE_POLICY:      gtk_color_selection_set_update_policy (color_selection, GTK_VALUE_ENUM (*arg));      break;    case ARG_USE_OPACITY:      gtk_color_selection_set_opacity (color_selection, GTK_VALUE_BOOL (*arg));      break;      }}static voidgtk_color_selection_get_arg (GtkObject *object,			     GtkArg    *arg,			     guint      arg_id){  GtkColorSelection *color_selection;    color_selection = GTK_COLOR_SELECTION (object);    switch (arg_id)    {    case ARG_UPDATE_POLICY:      GTK_VALUE_ENUM (*arg) = color_selection->policy;      break;    case ARG_USE_OPACITY:      GTK_VALUE_BOOL (*arg) = color_selection->use_opacity;      break;    default:      break;    }}GtkWidget*gtk_color_selection_new (void){  GtkColorSelection *colorsel;  colorsel = gtk_type_new (GTK_TYPE_COLOR_SELECTION);  return GTK_WIDGET (colorsel);}voidgtk_color_selection_set_update_policy (GtkColorSelection *colorsel,				       GtkUpdateType      policy){  gint n;  g_return_if_fail (colorsel != NULL);  if (policy != colorsel->policy)    {      colorsel->policy = policy;      for (n = 0; n < NUM_CHANNELS; n++)	gtk_range_set_update_policy (GTK_RANGE (colorsel->scales[n]), policy);    }}voidgtk_color_selection_set_color (GtkColorSelection *colorsel,			       gdouble           *color){  gint n, i = 0;  g_return_if_fail (colorsel != NULL);  g_return_if_fail (GTK_IS_COLOR_SELECTION (colorsel));  if (GTK_WIDGET_DRAWABLE (GTK_WIDGET (colorsel)))    gtk_color_selection_draw_wheel_marker (colorsel);  for (n = RED; n <= BLUE; n++)    {      colorsel->old_values[n] = colorsel->values[n];      colorsel->values[n] = color[i++];    }  if (colorsel->use_opacity)    {      colorsel->old_values[OPACITY] = colorsel->values[OPACITY];      colorsel->values[OPACITY] = color[i];    }  RGB_TO_HSV ();  gtk_color_selection_update_inputs (colorsel, RGB_INPUTS | HSV_INPUTS | OPACITY_INPUTS, BOTH);  if (GTK_WIDGET_DRAWABLE (GTK_WIDGET (colorsel)))    {      gtk_color_selection_draw_value_bar (colorsel, FALSE);      gtk_color_selection_draw_sample (colorsel, FALSE);      gtk_color_selection_draw_wheel_marker (colorsel);    }}voidgtk_color_selection_get_color (GtkColorSelection *colorsel,			       gdouble           *color){  gint n, i = 0;  g_return_if_fail (colorsel != NULL);  g_return_if_fail (GTK_IS_COLOR_SELECTION (colorsel));  for (n = RED; n <= BLUE; n++)    color[i++] = colorsel->values[n];  if (colorsel->use_opacity)    color[i] = colorsel->values[OPACITY];}static voidgtk_color_selection_realize (GtkWidget         *widget){  GtkColorSelection *colorsel;  static const GtkTargetEntry targets[] = {    { "application/x-color", 0 }  };  g_return_if_fail (widget != NULL);  g_return_if_fail (GTK_IS_COLOR_SELECTION (widget));  colorsel = GTK_COLOR_SELECTION (widget);  if (GTK_WIDGET_CLASS (color_selection_parent_class)->realize)    (*GTK_WIDGET_CLASS (color_selection_parent_class)->realize) (widget);  gtk_drag_dest_set (colorsel->sample_area,		       GTK_DEST_DEFAULT_HIGHLIGHT |		       GTK_DEST_DEFAULT_MOTION |		       GTK_DEST_DEFAULT_DROP,		       targets, 1,		       GDK_ACTION_COPY);  gtk_drag_source_set (colorsel->sample_area, 		       GDK_BUTTON1_MASK | GDK_BUTTON3_MASK,		       targets, 1,		       GDK_ACTION_COPY | GDK_ACTION_MOVE);  gtk_signal_connect (GTK_OBJECT (colorsel->sample_area),		      "drag_begin",		      GTK_SIGNAL_FUNC (gtk_color_selection_drag_begin),		      colorsel);  gtk_signal_connect (GTK_OBJECT (colorsel->sample_area),		      "drag_end",		      GTK_SIGNAL_FUNC (gtk_color_selection_drag_end),		      colorsel);  gtk_signal_connect (GTK_OBJECT (colorsel->sample_area),		      "drag_data_get",		      GTK_SIGNAL_FUNC (gtk_color_selection_drag_handle),		      colorsel);  gtk_signal_connect (GTK_OBJECT (colorsel->sample_area),		      "drag_data_received",		      GTK_SIGNAL_FUNC (gtk_color_selection_drop_handle),		      colorsel);}static voidgtk_color_selection_unrealize (GtkWidget      *widget){  GtkColorSelection *colorsel;  g_return_if_fail (widget != NULL);  g_return_if_fail (GTK_IS_COLOR_SELECTION (widget));  colorsel = GTK_COLOR_SELECTION (widget);  if (colorsel->value_gc != NULL)    {      gdk_gc_unref (colorsel->value_gc);      colorsel->value_gc = NULL;    }  if (colorsel->wheel_gc != NULL)    {      gdk_gc_unref (colorsel->wheel_gc);      colorsel->wheel_gc = NULL;    }  if (colorsel->sample_gc != NULL)    {      gdk_gc_unref (colorsel->sample_gc);      colorsel->sample_gc = NULL;    }  (* GTK_WIDGET_CLASS (color_selection_parent_class)->unrealize) (widget);}static voidgtk_color_selection_finalize (GtkObject *object){  GtkColorSelection *colorsel;  g_return_if_fail (object != NULL);  g_return_if_fail (GTK_IS_COLOR_SELECTION (object));  colorsel = GTK_COLOR_SELECTION (object);  if (colorsel->wheel_buf != NULL)    g_free (colorsel->wheel_buf);  if (colorsel->value_buf != NULL)    g_free (colorsel->value_buf);  if (colorsel->sample_buf != NULL)    g_free (colorsel->sample_buf);  (*GTK_OBJECT_CLASS (color_selection_parent_class)->finalize) (object);}static voidgtk_color_selection_color_changed (GtkColorSelection *colorsel){  gtk_signal_emit (GTK_OBJECT (colorsel), color_selection_signals[COLOR_CHANGED]);}static voidgtk_color_selection_update_input (GtkWidget *scale,                                  GtkWidget *entry,                                  gdouble    value){  GtkAdjustment *adj;  gchar txt[32];  if (scale != NULL)    {      adj = gtk_range_get_adjustment (GTK_RANGE (scale));      adj->value = (gfloat) value;      gtk_signal_handler_block_by_data (GTK_OBJECT (adj), (gpointer) scale);      gtk_signal_emit_by_name (GTK_OBJECT (adj), "value_changed");      gtk_range_slider_update (GTK_RANGE (scale));      gtk_signal_handler_unblock_by_data (GTK_OBJECT (adj), (gpointer) scale);    }  if (entry != NULL)    {      gtk_signal_handler_block_by_data (GTK_OBJECT (entry), (gpointer) entry);      sprintf (txt, "%.2f", value);      gtk_entry_set_text (GTK_ENTRY (entry), txt);      gtk_signal_handler_unblock_by_data (GTK_OBJECT (entry), (gpointer) entry);    }}static voidgtk_color_selection_update_inputs (GtkColorSelection *colorsel,                                   gint               inputs,                                   gint               which){  gint n;  switch (which)    {    case SCALE:      if ((inputs & RGB_INPUTS) != 0)	for (n = RED; n <= BLUE; n++)	  gtk_color_selection_update_input (colorsel->scales[n], NULL,					    colorsel->values[n]);      if ((inputs & HSV_INPUTS) != 0)	for (n = HUE; n <= VALUE; n++)	  gtk_color_selection_update_input (colorsel->scales[n], NULL,					    colorsel->values[n]);      if ((inputs & OPACITY_INPUTS) != 0)	gtk_color_selection_update_input(colorsel->scales[OPACITY], NULL,					 colorsel->values[OPACITY]);      break;    case ENTRY:      if ((inputs & RGB_INPUTS) != 0)	for (n = RED; n <= BLUE; n++)	  gtk_color_selection_update_input (NULL, colorsel->entries[n], colorsel->values[n]);      if ((inputs & HSV_INPUTS) != 0)	for (n = HUE; n <= VALUE; n++)	  gtk_color_selection_update_input (NULL, colorsel->entries[n], colorsel->values[n]);      if ((inputs & OPACITY_INPUTS) != 0)	gtk_color_selection_update_input(NULL, colorsel->entries[OPACITY], colorsel->values[OPACITY]);      break;    default:      if ((inputs & RGB_INPUTS) != 0)	for (n = RED; n <= BLUE; n++)	  gtk_color_selection_update_input (colorsel->scales[n], colorsel->entries[n],                                            colorsel->values[n]);      if ((inputs & HSV_INPUTS) != 0)	for (n = HUE; n <= VALUE; n++)	  gtk_color_selection_update_input (colorsel->scales[n], colorsel->entries[n],                                            colorsel->values[n]);      if ((inputs & OPACITY_INPUTS) != 0)	gtk_color_selection_update_input(colorsel->scales[OPACITY], colorsel->entries[OPACITY],					 colorsel->values[OPACITY]);      break;    }}static voidgtk_color_selection_hsv_updater (GtkWidget *widget,                                 gpointer   data){  GtkColorSelection *colorsel;  GtkAdjustment *adj;  gdouble newvalue;  gint i, which = SCALE;  if (GTK_WIDGET_DRAWABLE (GTK_WIDGET (widget)))    {      colorsel = (GtkColorSelection*) gtk_object_get_data (GTK_OBJECT (widget), "_GtkColorSelection");      i = GPOINTER_TO_INT (gtk_object_get_data (GTK_OBJECT (widget), value_index_key));      if (GTK_IS_SCALE (widget))	{	  adj = gtk_range_get_adjustment (GTK_RANGE (GTK_SCALE (widget)));	  newvalue = (gdouble) adj->value;	  which = ENTRY;	}      else	newvalue = (gdouble) atof (gtk_entry_get_text (GTK_ENTRY (widget)));      if (i == VALUE)	{	  gtk_color_selection_draw_value_marker (colorsel);	  colorsel->values[i] = newvalue;	  HSV_TO_RGB ();	  gtk_color_selection_draw_value_marker (colorsel);	}      else	{	  gtk_color_selection_draw_wheel_marker (colorsel);	  colorsel->values[i] = newvalue;	  HSV_TO_RGB ();	  gtk_color_selection_draw_wheel_marker (colorsel);	  gtk_color_selection_draw_value_bar (colorsel, FALSE);	}      gtk_color_selection_draw_sample (colorsel, FALSE);      gtk_color_selection_color_changed (colorsel);      gtk_color_selection_update_inputs (colorsel, HSV_INPUTS, which);      gtk_color_selection_update_inputs (colorsel, RGB_INPUTS, BOTH);    }}static voidgtk_color_selection_rgb_updater (GtkWidget *widget,                                 gpointer   data){  GtkColorSelection *colorsel;  GtkAdjustment *adj;  gdouble newvalue;  gint i, which = SCALE;  if (GTK_WIDGET_DRAWABLE (GTK_WIDGET (widget)))    {      colorsel = (GtkColorSelection*) gtk_object_get_data (GTK_OBJECT (widget), "_GtkColorSelection");      i = GPOINTER_TO_INT (gtk_object_get_data (GTK_OBJECT (widget), value_index_key));      if (GTK_IS_SCALE (widget))	{	  adj = gtk_range_get_adjustment (GTK_RANGE (GTK_SCALE (widget)));	  newvalue = (gdouble) adj->value;	  which = ENTRY;	}      else	newvalue = (gdouble) atof (gtk_entry_get_text (GTK_ENTRY (widget)));      gtk_color_selection_draw_wheel_marker (colorsel);      colorsel->values[i] = newvalue;      RGB_TO_HSV ();      gtk_color_selection_draw_wheel_marker (colorsel);      gtk_color_selection_draw_value_bar (colorsel, FALSE);      gtk_color_selection_draw_sample (colorsel, FALSE);      gtk_color_selection_color_changed (colorsel);      gtk_color_selection_update_inputs (colorsel, RGB_INPUTS, which);      gtk_color_selection_update_inputs (colorsel, HSV_INPUTS, BOTH);    }}static voidgtk_color_selection_opacity_updater (GtkWidget *widget,                                     gpointer   data){  GtkColorSelection *colorsel;  GtkAdjustment *adj;  colorsel = (GtkColorSelection*) gtk_object_get_data (GTK_OBJECT (widget), "_GtkColorSelection");  if (GTK_IS_SCALE (widget))    {      adj = gtk_range_get_adjustment (GTK_RANGE (widget));      colorsel->values[OPACITY] = (gdouble) adj->value;      gtk_color_selection_update_input (NULL, colorsel->entries[OPACITY], colorsel->values[OPACITY]);    }  else    {      colorsel->values[OPACITY] = (gdouble) atof (gtk_entry_get_text (GTK_ENTRY (widget)));      gtk_color_selection_update_input (colorsel->scales[OPACITY], NULL, colorsel->values[OPACITY]);    }  gtk_color_selection_draw_sample (colorsel, FALSE);  gtk_color_selection_color_changed (colorsel);}voidgtk_color_selection_set_opacity (GtkColorSelection *colorsel,                                 gint               use_opacity){  g_return_if_fail (colorsel != NULL);  colorsel->use_opacity = use_opacity;  if (!use_opacity && GTK_WIDGET_VISIBLE (colorsel->scales[OPACITY]))    {

⌨️ 快捷键说明

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