GTK:彻底摆脱系统主题/CSS

Ich*_*hyo 9 css c++ gtk gtk3 gtkmm3

GTK3 应用程序可以使用 CSS 设置样式和主题。如何强制 GTK使用我的应用程序附带的 CSS,而不是将它与用户系统上安装的主题组合/级联?

为什么要这样做?从理论上讲,CSS 将是一个很棒的基于规则的样式系统,您只需添加一个屏幕完整的明智选择的规则来一致地定义应用程序的外观。不幸的是,在实践中,人们倾向于在他们的样式表中添加数百个脑残的、重复的定义,从而伪造级联的本质。

实际问题是,无论用户系统上安装的全局主题如何,我的应用程序都将获得媒体处理应用程序的典型、柔和的深灰色外观。通过阅读 GTK 文档和GTKmm 教程,我想出了以下代码来阅读我自己的 CSS 样式表:

auto screen = Gdk::Screen::get_default();
auto css_provider = Gtk::CssProvider::create();
try {
    css_provider->load_from_path(lib::resolveModulePath (stylesheetName, resourceSerachPath));

} catch(Glib::Error const& failure) {
    WARN(gui, "Failure while loading stylesheet '%s': %s", cStr(stylesheetName), cStr(failure.what()));
}

Gtk::StyleContext::add_provider_for_screen(screen, css_provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
Run Code Online (Sandbox Code Playgroud)

从技术上讲,这很完美。但是——现在我被迫“反对”用户系统上存在的 CSS 规则。如果我开始在默认规则中设置合适的边框颜色,并在 GtkWindow 的规则中设置深灰色背景和合适的文本颜色,再加上一些文本输入字段的规则,我会在某些部分获得所需的外观,但是每当用户的系统主题为某些特定小部件或小部件组合添加了特定定义,从而明确重复颜色而不是从通用规则继承它们,我需要将另一个特定规则添加到我的应用程序样式表中以修复该特定情况。也就是说,已安装系统主题的可能错误引导的结构迫使我的应用程序样式表采用相同的错误引导的不良做法,并且有数百个单例定义一遍又一遍地重复相同的值。

问题

  • 我怎样才能告诉 GTK 在我的应用程序中使用我的样式表?
  • 有没有可行的替代方案,它不是那么激进,但仍然允许我以预期的方式使用 CSS(最小规则集 + 级联)?

pto*_*ato 6

您可以使用GTK 演示中的reset.css文件来取消所有现有规则的设置。

一个不太激进的替代方案可能是忽略默认以外的用户主题。大概如果用户有一个用糟糕的 CSS 实践构建的主题,他们仍然喜欢那个主题。那么为什么他们不能使用他们喜欢的主题查看您的应用程序呢?

  • 强烈反对。每当出现问题时,默认情况下都会指责用户并指责她的“非标准”设置、主题、配置等。用户的主题? (2认同)