Как использовать CssStyleProvider в Gtkmm3 - PullRequest
8 голосов
/ 12 июля 2011

Я программирую на С ++ с помощью gtkmm3. Я хочу изменить некоторые шрифты в моей программе. Я прочитал все о CssStyleProvider, StyleContext в документации по gtkmm, а также в документации по gtk +, но я не смог заставить это работать и не смог найти никакого учебника по этому поводу. Я так пытаюсь

Glib::ustring data;
data="GtkMenuBar, GtkMenuItem {font-name: Sans 6}"; /*tried with semi-colon, too*/
Glib::RefPtr<Gtk::CssProvider> asd = Gtk::CssProvider::create();
Glib::RefPtr<Gtk::StyleContext> asd2 = Gtk::StyleContext::create();
asd->load_from_data(data);
asd2->add_provider(asd, 0); /*also tried different priorities*/

тоже так пытался

Glib::ustring data;
data="GtkMenuBar, GtkMenuItem {font-name: Sans 6}"; /*tried with semi-colon, too*/
Glib::RefPtr<Gtk::CssProvider> asd = Gtk::CssProvider::create();
Glib::RefPtr<Gdk::Screen> screen;
Glib::RefPtr<Gtk::StyleContext> asd2 = Gtk::StyleContext::create();
asd->load_from_data(data);
(mainWindow.get())->get_property("screen", screen);
asd2->add_provider(screen, asd, 0); /*also tried different priorities*/

И я попробовал это до запуска главного окна и после запуска, но мне не повезло. Любая помощь приветствуется.

Ответы [ 2 ]

4 голосов
/ 23 мая 2012

Вы также пытались использовать макрос GTK_STYLE_PROVIDER_PRIORITY_APPLICATION вместо 0?

asd2->add_provider(screen, asd, macro GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);

У меня работает, тоже на Windows.

Пример:

int main(int argc, char **argv) {

  Main app(argc, argv);
  Glib::ustring data = "GtkLabel {color: #ff00ea;font: Comic Sans MS 12}";
  auto css = CssProvider::create();
  if(not css->load_from_data(data)) {
      cerr << "Failed to load css\n";
      std::exit(1);
  }
  Label label("test");
  Window win;
  auto screen = Gdk::Screen::get_default();
  auto ctx = label.get_style_context();
  ctx->add_provider_for_screen(screen, css, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
  win.add(label);
  win.show_all();

  app.run(win);
  return 0;
}
1 голос
/ 13 июля 2011

Я не знаю о gtkmm и css, но css в Интернете требует ; после font-name:Sans 6

Кроме этого, все, что у вас есть, выглядит правильно на основе GTK :: CssProvider ссылка

...