Установка цвета выделения текста в gtk с помощью css
У меня есть следующий код, который отлично работает, чтобы установить цвет фона и переднего плана для GtkTextview:
static void
setColor(GtkWidget * widget) {
auto style_context = gtk_widget_get_style_context (widget);
gtk_style_context_add_class(style_context, GTK_STYLE_CLASS_VIEW );
auto css_provider = gtk_css_provider_new();
GError *error=NULL;
auto data = g_strdup_printf("\
* {\
background-color: black;\
color: white;\
}\
*:selected {\
background-color: blue;\
color: yellow;\
}\
");
gtk_css_provider_load_from_data (css_provider, data, -1, &error);
g_free(data);
if (error){
ERROR("gtk_css_provider_load_from_data: %s\n", error->message);
g_error_free(error);
return;
}
gtk_style_context_add_provider (style_context,
GTK_STYLE_PROVIDER(css_provider),
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
}
В результате обычный и выбранный цвет текста имеют черный фон и белый передний план.
Почему выделенный текст не отображается желтым / синим цветом?
Любой указатель на файл примера будет высоко ценится.
1 ответ
Догадаться. Отсутствие каких-либо учебных пособий или примеров привело меня к поиску ответов в исходном коде gtk. Очень полный файл CSS находится в теме Adwaita (gtk -ден.css). Посмотрев на это и немного поэкспериментировав, следующий код установит цвета переднего плана и фона для обычного и выделенного текста, как указано.
auto data = g_strdup_printf("\
textview text {\
background-color: black;\
color: white;\
}\
.view text selection {\
background-color: blue;\
color: yellow;\
}\
");
Основной проблемой было использование "*". В этом же файле есть комментарий, который гласит: "Подстановочные знаки плохие и хлопотные, используйте их с машиной или, что еще лучше, просто не делайте. Каждый раз, когда подстановочный знак используется, котенок мучительно умирает".