GTK 4 和应用程序图标:如何以可移植的方式包含应用程序图标?
GTK 4 and applications icons : how to include an application icon in a portable way?
我很难理解 GTK 4 中的图标系统(我使用 C 语言)。
在 GTK 2 和 3 中,很容易指示 OS 关于用于显示应用程序的图标。
在 GTK 4 中,set_icon 函数已被删除,这让我们可以使用主题系统。
我知道,默认情况下,gtk 希望我们遵循 Freedesktop 图标主题规范,因此在安装过程中将图标放在 /usr/local/share/icons/hicolor/ 这样的目录中,并通过 /usr/local/share/icons/hicolor/ 这样的功能在应用程序中设置它=39=] 或 gtk_window_set_icon_name。但是我并没有真正设法让这个系统工作。
此外,我仍然不清楚在其他非基于 gnome 的系统上发生了什么,例如 Windows(甚至 KDE 桌面)...
那么,好吧,我有几个问题源于前面的观点:
系统如何在不遵循 Freedesktop 图标主题规范的其他 OS 或 DE 上运行?
这是否可能有一个非常简短的工作示例来说明如何在 GTK4 中使用新的应用程序图标,例如,刚刚在 /usr/local/share/icons/hicolor/
我对我的用例的真正问题是:是否仍然可以通过某种方式将应用程序图标包含在二进制文件或二进制目录中以具有一个简单的可移植应用程序不需要在每个系统上安装和工作?
(编辑:编辑以包括 nielsdg 精度)
好的,我找到了我的第二个问题和第三个问题的(部分)答案。
其实很简单,但是我犯了一些错误
你只需要有一个完全符合这个结构的目录(我在结构上犯了一个错误):
my_ressource_directory/hicolor/apps/48x48/my-icon.png
my_ressource_directory/hicolor/apps/256x256/my-icon.png
my_ressource_directory/hicolor/apps/512x512/my-icon.png
Only the 48x48 size is necessary, there are a lot of other sizes which seems to be : 8x8 16x16 22x22 24x24 32x32 36x36 42x42 44x44 48x48 64x64 72x72 96x96 128x128 150x150 192x192 256x256 310x310 512x512 and "scalable".
我不知道系统在什么情况下使用所有这些,我不知道是否可以进行个性化尺寸。
我同样不知道在什么情况下系统可以使用scalable中的svg图标...
那么,在代码中,您只需包含这样的内容即可:
icon_theme = gtk_icon_theme_get_for_display (gdk_display_get_default ());
gtk_icon_theme_add_search_path(icon_theme,path_to_my_ressource_directory);
if(gtk_icon_theme_has_icon(icon_theme,"my-icon")!=1)
{
// manage error
}
gtk_window_set_default_icon_name("my-icon"); // default icon for all windows if nothing is set explicitly if I understand well.
window = gtk_application_window_new (app);
gtk_window_set_title (GTK_WINDOW (window), "Your app");
gtk_window_set_icon_name(GTK_WINDOW (window),"my-icon"); // set explicitly the icon for the min window
还有 tadaaa;它有效 :) .
另请注意,有些 post 似乎说调用 gtk-update-icon-cache 对系统正常工作很重要。此命令在 GTK 用于加速图标 opening/processing 的目录中创建一个“icon-theme.cache”文件。
在实践中,我不能说这是否有效或是否真的被 GTK 使用,但在检查之后,即使没有 icon-theme.cache 它也能工作。所以这个命令的调用好像不是必须的
也就是说,在 Makefile 中调用命令是免费的。确切的命令是:
gtk-update-icon-cache -f -t my_ressource_directory/
编辑
解决方案不完整,因为生成的图标在某些上下文中是模糊的。看到这个问题:
以及答案,以获得完整的解决方案。
我很难理解 GTK 4 中的图标系统(我使用 C 语言)。 在 GTK 2 和 3 中,很容易指示 OS 关于用于显示应用程序的图标。
在 GTK 4 中,set_icon 函数已被删除,这让我们可以使用主题系统。
我知道,默认情况下,gtk 希望我们遵循 Freedesktop 图标主题规范,因此在安装过程中将图标放在 /usr/local/share/icons/hicolor/ 这样的目录中,并通过 /usr/local/share/icons/hicolor/ 这样的功能在应用程序中设置它=39=] 或 gtk_window_set_icon_name。但是我并没有真正设法让这个系统工作。
此外,我仍然不清楚在其他非基于 gnome 的系统上发生了什么,例如 Windows(甚至 KDE 桌面)...
那么,好吧,我有几个问题源于前面的观点:
系统如何在不遵循 Freedesktop 图标主题规范的其他 OS 或 DE 上运行?
这是否可能有一个非常简短的工作示例来说明如何在 GTK4 中使用新的应用程序图标,例如,刚刚在 /usr/local/share/icons/hicolor/
我对我的用例的真正问题是:是否仍然可以通过某种方式将应用程序图标包含在二进制文件或二进制目录中以具有一个简单的可移植应用程序不需要在每个系统上安装和工作?
(编辑:编辑以包括 nielsdg 精度)
好的,我找到了我的第二个问题和第三个问题的(部分)答案。
其实很简单,但是我犯了一些错误
你只需要有一个完全符合这个结构的目录(我在结构上犯了一个错误):
my_ressource_directory/hicolor/apps/48x48/my-icon.png
my_ressource_directory/hicolor/apps/256x256/my-icon.png
my_ressource_directory/hicolor/apps/512x512/my-icon.png
Only the 48x48 size is necessary, there are a lot of other sizes which seems to be : 8x8 16x16 22x22 24x24 32x32 36x36 42x42 44x44 48x48 64x64 72x72 96x96 128x128 150x150 192x192 256x256 310x310 512x512 and "scalable".
我不知道系统在什么情况下使用所有这些,我不知道是否可以进行个性化尺寸。
我同样不知道在什么情况下系统可以使用scalable中的svg图标...
那么,在代码中,您只需包含这样的内容即可:
icon_theme = gtk_icon_theme_get_for_display (gdk_display_get_default ());
gtk_icon_theme_add_search_path(icon_theme,path_to_my_ressource_directory);
if(gtk_icon_theme_has_icon(icon_theme,"my-icon")!=1)
{
// manage error
}
gtk_window_set_default_icon_name("my-icon"); // default icon for all windows if nothing is set explicitly if I understand well.
window = gtk_application_window_new (app);
gtk_window_set_title (GTK_WINDOW (window), "Your app");
gtk_window_set_icon_name(GTK_WINDOW (window),"my-icon"); // set explicitly the icon for the min window
还有 tadaaa;它有效 :) .
另请注意,有些 post 似乎说调用 gtk-update-icon-cache 对系统正常工作很重要。此命令在 GTK 用于加速图标 opening/processing 的目录中创建一个“icon-theme.cache”文件。 在实践中,我不能说这是否有效或是否真的被 GTK 使用,但在检查之后,即使没有 icon-theme.cache 它也能工作。所以这个命令的调用好像不是必须的
也就是说,在 Makefile 中调用命令是免费的。确切的命令是:
gtk-update-icon-cache -f -t my_ressource_directory/
编辑
解决方案不完整,因为生成的图标在某些上下文中是模糊的。看到这个问题:
以及答案,以获得完整的解决方案。