установка цвета выделения gtk textview с помощью 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);

}

В результате как обычный, так и выбранный цвет текста имеют черный фон и белый передний план.

Почему выделенный текст не отображается желтым/синим цветом?

Любой указатель на пример файла будет высоко оценен.


person edscott    schedule 24.09.2018    source источник


Ответы (1)


Догадаться. Отсутствие каких-либо руководств или примеров заставило меня искать ответы в исходном коде gtk. Очень полный файл css находится в теме Adwaita (gtk-contained.css). Изучив это и немного поэкспериментировав, следующий код установит цвета переднего плана и фона для обычного и выделенного текста, как указано.

auto data = g_strdup_printf("\
  textview text {\
  background-color: black;\
  color: white;\
}\
  .view text selection {\
  background-color: blue;\
  color: yellow;\
}\
");

Основная проблема заключалась в использовании «*». В том же файле есть комментарий, который гласит: «Подстановочные знаки плохие и хлопотные, используйте их с машиной, а лучше просто не делайте этого. Каждый раз, когда используется подстановочный знак, котенок мучительно умирает».

person edscott    schedule 25.09.2018
comment
Это полезно - у меня есть аналогичная проблема, когда я использую синий цвет для текста, и при выборе выделение также становится синим, что означает, что пользователь больше не может видеть выделение. Я не понимаю, почему разработчики gtk так мало документируют... - person shevy; 11.02.2021