原来实现的更改颜色是用组合组件:颜色选择器。由于这个组建太大,不太布局,改成了颜色选择按钮,效果如下:
1.下面就介绍一下实现过程以及用到的函数:
color button有一个信号color-set,文档解释如下:
,当用户选择一个颜色,color-set信号发出。 处理这个信号时,使用 gtk_color_button_get_color() 和 gtk_color_button_get_alpha() 得到颜色和透明度。
注意,这个信号时只发出 用户 改变了颜色。 如果您需要对编程颜色变化作出反应 ,使用通知::color-set。
信号可以写成下面:
g_signal_connect(colorbutton1, "color-set", G_CALLBACK(bgSet), NULL);
bgset回调函数是自己写的。
void bgSet(GtkWidget *widget, gpointer data)
{
gtk_color_button_get_color(colorbutton1, &color1);
gtk_widget_modify_bg(GTK_WIDGET(window1), GTK_STATE_NORMAL, &color1);
}
其中gtk_widget_modify_bg可以查看我的另一篇博客有详细介绍。
void gtk_color_button_get_color (GtkColorButton *color_button, GdkColor *color);利用这个函数来获得选择的颜色color。
背景色和字体颜色用的函数不一样:
gtk_widget_modify_bg和gtk_widget_modify_text区别自己看我的里一篇。
还有一个就是gtk_widget_modify_base也可以改变颜色。
2.字体按钮的设计
和color button差不多,注意的就是信号font-set。
,当用户选择一个字体,font-set信号发出。 处理这个信号时,使用 gtk_font_button_get_font_name() 得到选择的字体。
注意,这个信号发出只在 用户 更改字体。 如果你需要编程字体的变化做出反应 ,使用font-name信号。
g_signal_connect(fontbutton1, "font-set", G_CALLBACK(fontSet), NULL);
fontSet回调函数自己设计:
void fontSet(GtkWidget *widget, gpointer data)
{
gchar *font;
PangoFontDescription *font1;
font = gtk_font_button_get_font_name(fontbutton1);
font1 = pango_font_description_from_string(font);
gtk_widget_modify_font(GTK_WIDGET(textview1), font1);
}
gtk_widget_modify_font函数看我的里一篇。
pango_font_description_from_string(font)函数得到字体,返回值是 PangoFontDescription类型,含有好多有关的函数,读者可以自己查看.
整个软件的代码,可以在github中下载。地址:
https://github.com/liuhuanone/gtk_editor
整体效果是: