我有一个小应用程序,我想创建一些按钮,工具栏等,但我不想使用预先存在的GTK图标主题,我想创建自己的。所以我寻找了教程和诸如此类的东西,但事实证明,在网上讨论得不是很好。所以我试着自己做点什么:
标题文件:
#include <gtkmm.h>
#include <string>
#include <iostream>
#include <errno.h>
class IconFactoryBuilder
{
public:
IconFactoryBuilder();
~IconFactoryBuilder();
void RegisterNewIcons(std::string pPath);
private:
Glib::RefPtr<Gtk::IconFactory> mCustomFactory;
};
Cpp文件:
#include <IconFactoryBuilder.h>
IconFactoryBuilder::IconFactoryBuilder() {
mCustomFactory = Gtk::IconFactory::create();
}
IconFactoryBuilder::~IconFactoryBuilder() {
}
void IconFactoryBuilder::RegisterNewIcons(std::string pPath) {
Glib::RefPtr<Gtk::IconSet> iconSet = Gtk::IconSet::create();
Gtk::IconSource someSource;
try{
Gtk::Image *someImage=Gtk::manage(new Gtk::Image(pPath+"appbar.at.png"));
someImage->set_pixel_size(Gtk::IconSize(48));
someSource.set_pixbuf(someImage->get_pixbuf());
someSource.set_size(Gtk::ICON_SIZE_DIALOG);
someSource.set_size_wildcarded();
}
catch(const Glib::Exception &ex) {
std::cerr << "An error occurred while opening the icon file!" << strerror(errno) << std::endl;
}
catch(...) {
std::cerr << "Unknown Error!" << std::endl;
}
iconSet->add_source(someSource);
const Gtk::StockID somestock("MyNewIcon");
Gtk::Stock::add(Gtk::StockItem(somestock, "somelabel"));
mCustomFactory->add(somestock, iconSet);
mCustomFactory->add_default();
}
但现在我陷入困境,因为我真的不知道如何调用我创建的这个新图标。我也不知道上面写的代码是否足以真正找到图标。
答案 0 :(得分:1)
您创建了一个图标工厂... factory ?
- )
您的问题的严肃答案是您不需要Gtk::IconFactory
。不幸的是,GTK 2文档并没有告诉你这是不必要的。你需要的是freedesktop.org Standard Icon Naming Specification。创建您的图标,为它们指定简单的名称,根据其中描述的目录结构进行组织,将其安装到适当的位置,当您使用创建Pixbuf
或Image
时,您的图标将“正常工作” ...from_icon_name()
功能。 (example: Gtk::Image::set_from_icon_name()
)
以下是Gnome开发者wiki中有关如何提供自己的图标的页面: http://developer.gnome.org/integration-guide/stable/icons.html.en
以下是我撰写的有关安装自定义图标的教程的页面:http://ptomato.name/advanced-gtk-techniques/html/desktop-file.html