预检清单
- 我已阅读了此项目的 Contributing Guidelines。
- 我同意遵循此项目遵循的 Code of Conduct。
- 我在 issue tracker 中搜索了一个与我想提交的功能请求相匹配的功能请求,但没有成功。
问题描述
Electron 提供了获取 Mac OS 和 Windows 系统颜色的 API( systemPreferences.getColor
, systemPreferences.getSystemColor
)。似乎 Linux 没有这样的 API。
如果我们能以某种方式获取活动 GTK 主题的颜色值,我们就可以创建与系统颜色匹配的应用程序,这将适用于大量 Linux 发行版(如果我错了,请纠正我,但在我看来,GTK 似乎比 Qt 更受欢迎)。
建议的解决方案
扩展 systemPreferences.getColor
以尝试在 Linux 上获取活动 GTK 主题的颜色(如果可用);或者添加另一个方法 systemPreferences.getGTKColors
,该方法将返回系统上检测到的所有可用 GTK 颜色。
首选方法:
- 以某种方式从默认系统主题 Chromium 使用的方式读取值;
- 初始化一些空/隐藏的 GTK 小部件并从中读取值。https://stackoverflow.com/questions/38871450/how-can-i-get-the-default-colors-in-gtk (Python API,我猜它也可以通过 C++ 绑定实现?)
其他选项:
其他选项是某种方式读取活动主题名称(无论是使用 GTK API( Python example )还是通过桌面环境设置管理器获取(这甚至不应该被考虑,因为 each DE has a different way of doing that ),然后查找主题文件并处理 CSS(显然是在首选方法不起作用的情况下的最后手段)。
已考虑的其他方案
- 不实现它/忽略 Linux 上的系统颜色。
其他信息
- 没有回复
5条答案
按热度按时间uttx8gqw1#
主题化在过去几天一直是GTK和GNOME的热门主题。有一个正在进行中的提议,它可能会成为libadwaita的一种适当的主题化API(至少这是我个人的希望)。因此,也许Electron可以不使用CSS来实现这一点。
所以未来Electron可能会通过GTK/libadwaita使用一个干净的API来获取诸如首选的辅助色之类的东西。我建议看看discussions将走向何方,一旦达成某种结论,或许是时候考虑这个问题了(或者向GTK/libadwaita维护者询问他们认为Electron应该做什么是合理的)。
请大家在这些讨论中保持建设性,如我所说,这是一个热门主题 :)
up9lanfz2#
@vchernin
I'm not sure if it would be a good idea to wait for that implementation:
Please note that I'm suggesting the CSS parsing solution only as a last resort. I'm thinking about more practical solutions - to try to render something and get the color value, i.e. : https://stackoverflow.com/questions/3036189/fetching-gtk-theme-background-color
vkc1a9a23#
这是否只会成为Gnome的一个特性?还有更多使用GTK主题的桌面环境(例如xfce4)
在这个阶段,我真的不能确定。我个人希望它对任何使用GTK主题的东西都有用。
可能需要很长时间才能推出,许多Linux发行版只是偶尔更新一次。
是的,这似乎很有可能,尤其是在Ubuntu或Debian中。
我在考虑更实际的解决方案——尝试渲染一些东西并获取颜色值,例如:https://stackoverflow.com/questions/3036189/fetching-gtk-theme-background-color
是的,这似乎足够合理了,尽管那篇文章有点旧,所以我不确定今天这种特定方法的效果如何。
x8goxv8g4#
是的,这似乎足够合理了,尽管这篇文章有点旧,所以我不确定这种方法今天的效果如何。
在接下来的几个月里,我会抽出一些时间进行一些测试。
mlmc2os55#
看起来没有一种好的方法来声明主题颜色,但我们可以选择一个控件(如按钮)并对其进行采样:
https://lazka.github.io/pgi-docs/Gtk-3.0/classes/StyleContext.html#Gtk.StyleContext
这将允许我们获取一些代表性的前景色/背景色,即使在Mac和Windows上没有广泛的列表。