代码如下,将Widget传进函数即可,之后相关属性会相应改变.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
GtkWidget *setWidgetProperties( GtkWidget *entry ) { PangoAttrList *pangoAttrList = pango_attr_list_new(); PangoAttribute *pangoAttribute = pango_attr_weight_new ( PANGO_WEIGHT_BOLD ); pango_attr_list_insert ( pangoAttrList, pangoAttribute ); /* Set bold type*/ pangoAttribute = pango_attr_underline_new(PANGO_UNDERLINE_LOW); pango_attr_list_insert ( pangoAttrList, pangoAttribute ); pangoAttribute = pango_attr_underline_color_new(0x00, 0xc7ff, 0xffff); /* Color Cyan*/ pango_attr_list_insert ( pangoAttrList, pangoAttribute ); pangoAttribute = pango_attr_scale_new( 1.5 ); /* Set font size*/ pango_attr_list_insert ( pangoAttrList, pangoAttribute ); GdkRGBA rgbacolor = { 0, 0, 0, 1 }; /* rgb a: black*/ gtk_widget_override_color( entry, 0, &rgbacolor); gtk_entry_set_attributes ( GTK_ENTRY(entry), pangoAttrList ) ; return entry; } |
详情见注释
也可以进一步封装,根据widget类型,自动调整逻辑,同时适应Entry和Label等的属性设置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
GtkWidget *addUnderline ( GtkWidget *widget, const char *rgb, guint type ) { PangoColor color; pango_color_parse ( &color, rgb ); guint red = color.red; guint green = color.green; guint blue = color.blue; PangoAttrList *pangoAttrList = NULL; if ( GTK_IS_LABEL(widget) ) { pangoAttrList = gtk_label_get_attributes(GTK_LABEL(widget)); if ( ! pangoAttrList ) pangoAttrList = pango_attr_list_new(); } else if ( GTK_IS_ENTRY(widget) ) { pangoAttrList = gtk_entry_get_attributes(GTK_ENTRY(widget)); if ( ! pangoAttrList ) pangoAttrList = pango_attr_list_new(); } PangoAttribute *pangoAttribute; pangoAttribute = pango_attr_underline_new(PANGO_UNDERLINE_LOW); pango_attr_list_insert ( pangoAttrList, pangoAttribute ); pangoAttribute = pango_attr_underline_color_new(red, green, blue); /* Color Cyan*/ pango_attr_list_insert ( pangoAttrList, pangoAttribute ); if ( GTK_IS_LABEL(widget) ) gtk_label_set_attributes ( GTK_LABEL(widget), pangoAttrList ) ; else if ( GTK_IS_ENTRY(widget) ) gtk_entry_set_attributes ( GTK_ENTRY(widget), pangoAttrList ) ; return widget; } GtkWidget *setWidgetProperties ( GtkWidget *widget, double fontSizeScale, const char *rgb, int alpha ) { PangoColor color; pango_color_parse ( &color, rgb ); guint red = color.red; guint green = color.green; guint blue = color.blue; PangoAttrList *pangoAttrList = NULL; if ( GTK_IS_LABEL(widget) ) { pangoAttrList = gtk_label_get_attributes(GTK_LABEL(widget)); if ( ! pangoAttrList ) pangoAttrList = pango_attr_list_new(); } else if ( GTK_IS_ENTRY(widget) ) { pangoAttrList = gtk_entry_get_attributes(GTK_ENTRY(widget)); if ( ! pangoAttrList ) pangoAttrList = pango_attr_list_new(); } PangoAttribute *pangoAttribute = pango_attr_weight_new ( PANGO_WEIGHT_BOLD ); pango_attr_list_insert ( pangoAttrList, pangoAttribute ); pangoAttribute = pango_attr_scale_new( fontSizeScale ); pango_attr_list_insert ( pangoAttrList, pangoAttribute ); GdkRGBA rgbacolor = { red, green, blue, alpha }; gtk_widget_override_color( widget, 0, &rgbacolor); if ( GTK_IS_LABEL(widget) ) gtk_label_set_attributes ( GTK_LABEL(widget), pangoAttrList ) ; else if ( GTK_IS_ENTRY(widget) ) gtk_entry_set_attributes ( GTK_ENTRY(widget), pangoAttrList ) ; return widget; } |
x通过如下方法调用设置属性:
1 2 3 4 |
setWidgetProperties(entry, 1.5, "#000000", 1); addUnderline (entry, "#00c7ff", PANGO_UNDERLINE_LOW); |