electron [功能请求]:读取GTK主题颜色(Linux上的系统颜色)

chhqkbe1  于 4个月前  发布在  Electron
关注(0)|答案(5)|浏览(56)

预检清单

问题描述

Electron 提供了获取 Mac OS 和 Windows 系统颜色的 API( systemPreferences.getColor , systemPreferences.getSystemColor )。似乎 Linux 没有这样的 API。
如果我们能以某种方式获取活动 GTK 主题的颜色值,我们就可以创建与系统颜色匹配的应用程序,这将适用于大量 Linux 发行版(如果我错了,请纠正我,但在我看来,GTK 似乎比 Qt 更受欢迎)。

建议的解决方案

扩展 systemPreferences.getColor 以尝试在 Linux 上获取活动 GTK 主题的颜色(如果可用);或者添加另一个方法 systemPreferences.getGTKColors,该方法将返回系统上检测到的所有可用 GTK 颜色。
首选方法:

  1. 以某种方式从默认系统主题 Chromium 使用的方式读取值;
  2. 初始化一些空/隐藏的 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(显然是在首选方法不起作用的情况下的最后手段)。

已考虑的其他方案

  1. 不实现它/忽略 Linux 上的系统颜色。

其他信息

  • 没有回复
uttx8gqw

uttx8gqw1#

主题化在过去几天一直是GTK和GNOME的热门主题。有一个正在进行中的提议,它可能会成为libadwaita的一种适当的主题化API(至少这是我个人的希望)。因此,也许Electron可以不使用CSS来实现这一点。

所以未来Electron可能会通过GTK/libadwaita使用一个干净的API来获取诸如首选的辅助色之类的东西。我建议看看discussions将走向何方,一旦达成某种结论,或许是时候考虑这个问题了(或者向GTK/libadwaita维护者询问他们认为Electron应该做什么是合理的)。

请大家在这些讨论中保持建设性,如我所说,这是一个热门主题 :)

up9lanfz

up9lanfz2#

@vchernin
I'm not sure if it would be a good idea to wait for that implementation:

  1. Is it only going to be a feature in Gnome? There are more desktop environments that use GTK themes (i.e. xfce4)
  2. It may take a very long time to roll out, many Linux distros make updates only once in a while.
    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
vkc1a9a2

vkc1a9a23#

这是否只会成为Gnome的一个特性?还有更多使用GTK主题的桌面环境(例如xfce4)
在这个阶段,我真的不能确定。我个人希望它对任何使用GTK主题的东西都有用。
可能需要很长时间才能推出,许多Linux发行版只是偶尔更新一次。
是的,这似乎很有可能,尤其是在Ubuntu或Debian中。
我在考虑更实际的解决方案——尝试渲染一些东西并获取颜色值,例如:https://stackoverflow.com/questions/3036189/fetching-gtk-theme-background-color
是的,这似乎足够合理了,尽管那篇文章有点旧,所以我不确定今天这种特定方法的效果如何。

x8goxv8g

x8goxv8g4#

是的,这似乎足够合理了,尽管这篇文章有点旧,所以我不确定这种方法今天的效果如何。
在接下来的几个月里,我会抽出一些时间进行一些测试。

mlmc2os5

mlmc2os55#

看起来没有一种好的方法来声明主题颜色,但我们可以选择一个控件(如按钮)并对其进行采样:
https://lazka.github.io/pgi-docs/Gtk-3.0/classes/StyleContext.html#Gtk.StyleContext
这将允许我们获取一些代表性的前景色/背景色,即使在Mac和Windows上没有广泛的列表。

相关问题