GTK3:使用GTK> = 3.16的组合框单元格布局渲染器的默认颜色

时间:2017-12-04 00:05:58

标签: combobox gtk3

我使用的是动态创建项目的组合框,对于黑色组合框内的标题,可能会或可能不会显示,这取决于当前的选择。它看起来像这样:

enter image description here

单元格布局渲染器的代码是这样的(仅用于概念,我的后续问题不会对细节感兴趣):

void option_list_with_headlines
(G_GNUC_UNUSED GtkCellLayout *cell_layout, 
GtkCellRenderer *action_option_combo_box_renderer, 
GtkTreeModel *action_option_combo_box_model, 
GtkTreeIter *action_option_combo_box_iter, 
G_GNUC_UNUSED gpointer data) {
  gchar *action_option_combo_item;
  GdkRGBA normal_fg_color, normal_bg_color;

  gboolean headline;

  gtk_style_context_get_color (gtk_widget_get_style_context (action_option),
  GTK_STATE_NORMAL, &normal_fg_color);
  gtk_style_context_get_background_color (gtk_widget_get_style_context
  (action_option), GTK_STATE_NORMAL, &normal_bg_color);

  gtk_tree_model_get (action_option_combo_box_model,
  action_option_combo_box_iter, ACTION_OPTION_COMBO_ITEM,
  &action_option_combo_item, -1);

  headline = g_regex_match_simple ("Add|Choose", 
  action_option_combo_item, G_REGEX_ANCHORED, 0);

  g_object_set (action_option_combo_box_renderer, 
  "foreground-rgba", (headline) ? &((GdkRGBA) { 1.0, 1.0, 1.0, 1.0 }) :
  &normal_fg_color, "background-rgba"
  (g_str_has_prefix(action_option_combo_item, "Choose")) ? 
  &((GdkRGBA) { 0.31, 0.31, 0.79, 1.0 }) : 
  ((g_str_has_prefix (action_option_combo_item, "Add")) ? 
  &((GdkRGBA) { 0.0, 0.0, 0.0, 1.0 }) : &normal_bg_color),
  "sensitive", !headline, NULL);

  // Cleanup
  g_free (action_option_combo_item);
}

现在关于此功能的问题:

从Gtk> = 3.16开始,我不再使用gtk_style_context_get_background_color。但是,我可以在组合框项目列表中将颜色设置为默认值,就像我在上面的图像中使用“名称”和“提示”一样?目前,我使用g_object_set以及我使用gtk_style_context_get_background_color和GTK_STATE_NORMAL作为参数收集的颜色。

1 个答案:

答案 0 :(得分:0)

解决方案已经证明非常简单:我根本不必检索默认的背景颜色;使用background-rgba

时,将g_object_set的值设置为NULL就足够了
g_object_set (action_option_combo_box_renderer, "background-rgba", NULL, ...)

我不知道这是可能的;我认为background-rgba总是需要某种价值。