This site has been retired. For up to date information, see handbook.gnome.org or gitlab.gnome.org.


[Home] [TitleIndex] [WordIndex

GNOME Goal #2.1: 安装可主题化的图标

许多的应用程序大都是将自己的图标装在 $datadir/pixmaps 下,并在程序中使用这个固定的路径来装入图标,由此带来的问题是即使主题中提供了对应的图标,程序中的图标不能随主题变化。解决这个问题的办法是遵循图标主题规范,这里我们总结一下在你的 GNOME 程序中应该如何修改,以便主题设计者们能高兴的为你的程序设计新的图标。

首先你需要准备你自己的图标。如果你的程序图标太旧并且不太好看的话,请到 Planet 或 IRC 或 论坛上找个人帮你设计一个新的。最好能参照 Tango 指南 来设计你的图标。然后你需要准备一个 48x48 的 PNG 格式的图标,最好同时准备一个 SVG 的版本。你也可以准备好其它尺寸,如 24x24 或 192x192,但也不要浪费太多时间和精力,大多数用户只会看到默认的程序图标。

编译系统

在你的 Makefile.am 中, 添加如下的内容来安装你的图标 (假设你的程序名就叫 gurilla):

icondir = $(datadir)/icons/hicolor/48x48/apps
icon_DATA = gurilla.png
svgicondir = $(datadir)/icons/hicolor/scalable/apps
svgicon_DATA = gurilla.svg
gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor
install-data-hook: update-icon-cache
uninstall-hook: update-icon-cache
update-icon-cache:
        @-if test -z "$(DESTDIR)"; then \
                echo "Updating Gtk icon cache."; \
                $(gtk_update_icon_cache); \
        else \
                echo "*** Icon cache not updated.  After (un)install, run this:"; \
                echo "***   $(gtk_update_icon_cache)"; \
        fi
EXTRA_DIST = \
        $(icon_DATA) \
        $(svgicon_DATA)

程序代码

正确的引用标图的方法是使用它们的名字(不含扩展名)。你可以在创建任何新窗口前设置程序的默认图标,如在设置程序名之后设置:

  g_set_application_name (_("Gurilla"));
  gtk_window_set_default_icon_name ("gurilla");

大多数程序这样做就足够了。你创建的任何新窗口都会默认使用这个图标(如果没有单独设置的话)。

如果你的程序提供了一个库,并且包含有其它程序可使用的窗口控件,你又想在这些窗口上设置自己的图标,那么你需要在这些窗口的构造函数里进行设置。但这样做之前最好想想是否真的需要这样。比如你不希望在字体对话框窗口中显示 GTK+ 的图标。无论如何,下面是设置的实例:

static void
gurilla_window_init (GurillaWindow *guw)
{

  ...

  gtk_window_set_title (GTK_WINDOW (guw), _("Gurilla Dialog"));
  gtk_window_set_icon_name (GTK_WINDOW (guw), "gurilla");
}

最后你需要在你的关于对话框中设置正确的图标名:

  gtk_show_about_dialog (GTK_WINDOW (guw),
                         ...
                         "logo-icon-name", "gurilla",
                         ...
                         NULL);

Desktop 文件

很明显,.desktop 文件中的图标名字*不应该*包含扩展名。

这个 goal 的状态

开始修改某一模块前,请把你的名字写到状态栏中,以免别人和你做重复的工作。

State

Markup

todo

<: #ff8080> todo

patch

<: #ffc849> [wiki:gnomebug/xxxxx patch]

done

<: #80ff80> [wiki:gnomebug/xxxxx done]

not needed

<: #80ff80> not needed

以上是用于更新下面的状态表的相应标记。

模块

状态

桌面

星际译王(stardict)

to do

ChmSee

to do


2024-10-23 11:17