当前位置 : 主页 > 编程语言 > c++ >

c – GTK:完全摆脱系统主题/ CSS

来源:互联网 收集:自由互联 发布时间:2021-06-23
GTK3应用程序可以使用CSS设置样式和主题.如何强制GTK仅使用我的应用程序附带的CSS,而不是将其与用户系统上安装的主题组合/级联? 为什么要这样做呢?从理论上讲,CSS将是一个很好的基
GTK3应用程序可以使用CSS设置样式和主题.如何强制GTK仅使用我的应用程序附带的CSS,而不是将其与用户系统上安装的主题组合/级联?

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

实际问题是我的应用程序将获得媒体处理应用程序的典型,柔和的深灰色外观,而不管用户系统上安装的全局主题.通过阅读GTK文档和GTKmm tutorial,我想出了以下代码来阅读我自己的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);

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

问题

>如何告诉GTK仅将我的样式表用于我的应用程序?
>有没有可行的替代方案,它不是那么激进,但仍然允许我按照预期的方式使用CSS(最小规则级联规则)?

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

一个不太激进的替代方案可能是忽略除默认值之外的用户主题.据推测,如果一个用户拥有一个用不好的CSS实践构建的主题,他们仍然喜欢这个主题.那么他们为什么不能用他们喜欢的主题查看你的应用程序呢?

网友评论