У меня есть небольшое приложение, в котором я хочу создать несколько кнопок, панелей инструментов и т. Д., Но я не хочу использовать уже существующую тему значков 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();
}
Но сейчас я застрял, потому что не знаю, как назвать созданную мной новую иконку. Я также не знаю, достаточно ли написанного выше кода, чтобы найти иконку или нет.
Вы создали фабрику иконок … завод?
😉
Серьезный ответ на ваш вопрос заключается в том, что вам не нужно Gtk::IconFactory
, К сожалению, документация GTK 2 не говорит вам, что это не нужно. Что вам нужно, так это freedesktop.org Стандартная спецификация именования иконок. Создайте свои значки, назовите их простыми именами, упорядочите в соответствии с описанной там структурой каталогов, установите их в соответствующем месте, и ваши значки будут «просто работать» при создании Pixbuf
или же Image
с использованием ...from_icon_name()
функции. (пример: Gtk::Image::set_from_icon_name()
)
Вот страница вики-разработчика Gnome о том, как предоставить свои собственные значки:
http://developer.gnome.org/integration-guide/stable/icons.html.en
И вот страница из учебника, который я написал об установке пользовательских значков: http://ptomato.name/advanced-gtk-techniques/html/desktop-file.html
Других решений пока нет …