CSS в GTK - изменение цвета фона при нажатии кнопки - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь создать приложение с использованием GTK и стилизовать его с помощью CSS.Мне нужно изменить фон кнопки при нажатии.Мне это нужно для встроенного видеоплеера.Когда я нажимаю «воспроизведение», я хочу отметить, что видео воспроизводится, изменяя фон кнопки «воспроизведение», когда я нажимаю «пауза», я хочу кнопку «воспроизведение», чтобы вернуться к значению по умолчанию, и кнопку «пауза», чтобы изменить фон.При нажатии «Стоп» оба фона должны вернуться в состояние по умолчанию.Каков наилучший способ сделать такое поведение?

Я нашел функцию gtk_widget_override_background_color, но она устарела с версии 3.16 и не должна использоваться во вновь создаваемом коде.Я также пробовал button:focus в css, но он работает неправильно.Он изменяет цвет фона при нажатии, но когда я нажимаю кнопку, которая не должна влиять на фон (например, изменение громкости), фон меняется на значение по умолчанию.

РЕДАКТИРОВАТЬ.Я мог бы задать вопрос, вводя в заблуждение.button:focus работает как задумано, но не полностью соответствует моим потребностям.Позвольте мне объяснить на примере: 1. В начале (после выбора видео) у меня есть пустой экран с сообщением «нажмите play» enter image description here

Теперь я нажимаю кнопку воспроизведения.Кнопка воспроизведения добавила в CSS код фокуса из C: gtk_widget_set_name(GTK_WIDGET(play_button), "play_button_1");

И в CSS:

button#play_button_1:focus { background-color: #67181B; }

Поэтому, когда я нажимаю "Playигрок выглядит вот так: enter image description here

Работает нормально, пока я не использую только кнопки «воспроизведение», «пауза» и «стоп».Но когда я нажимаю «+» или «-» (для регулировки громкости), кнопка «проигрывать» теряет фокус, и это выглядит так (видео все еще воспроизводится, на изображении нет фокуса на кнопке «-», это зависаниеНа снимке экрана нет курсора): enter image description here

Так что я хочу добиться того, чтобы фон «play» менялся во время воспроизведения видео, неважнофокус на других кнопках.Надеюсь, теперь стало намного понятнее

1 Ответ

0 голосов
/ 26 апреля 2019

Я нашел решение, я полагаю, не самое лучшее, но оно работает. Если у кого-то будет что-то лучше, я буду рад это услышать. Я сделал больше файлов CSS (конкретные файлы для каждой функции, которая должна вызывать изменение фона). Так, например, когда у меня есть кнопка «play», я сделал файл play.css:

button#play_button_1 {
background-color: #67181B;
}

button#pause_button_1 {
background-color: #D5D6DB;
}

и для функции кнопки я добавил

  GtkCssProvider *provider;
  GdkDisplay *display;
  GdkScreen *screen;

  provider = gtk_css_provider_new ();
  display = gdk_display_get_default ();
  screen = gdk_display_get_default_screen (display);
  gtk_style_context_add_provider_for_screen (screen, GTK_STYLE_PROVIDER   (provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);

  const gchar* path_to_css = "play.css";
  GError *error = 0;
  gtk_css_provider_load_from_file(provider, g_file_new_for_path(path_to_css), &error);

Затем мне пришлось сделать то же самое (с другим файлом) для кнопки паузы и еще раз загрузить исходный файл css при нажатии кнопки «Стоп».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...