void ACIconFactory::add(const Glib::ustring & theStockId, const Glib::ustring & theIconFile, const Glib::ustring & theLabel) { Glib::RefPtr<Gdk::Pixbuf> myPixbuf = Gdk::Pixbuf::create_from_file(theIconFile); Gtk::IconSource myIconSource; myIconSource.set_pixbuf(myPixbuf); Gtk::IconSet myIconSet; myIconSet.add_source( myIconSource ); Gtk::StockID myStockId(theStockId); _myIconFactory->add(myStockId, myIconSet); Gtk::Stock::add(Gtk::StockItem(myStockId, theLabel)); }
/** \brief Registrate stock icons for this program. */ void IconLoader::register_stock_items() { Glib::RefPtr<Gtk::IconFactory> factory = Gtk::IconFactory::create(); int i = 0; while (icons[i].file) { Gtk::IconSource source; try { // This throws an exception if the file is not found: source.set_pixbuf(Gdk::Pixbuf::create_from_file(icons[i].file)); } catch (const Glib::Exception& ex) { std::cout << ex.what() << std::endl; } source.set_size(Gtk::ICON_SIZE_SMALL_TOOLBAR); // Icon may be scaled. source.set_size_wildcarded(); Gtk::IconSet icon_set; // More than one source per set is allowed. icon_set.add_source(source); const Gtk::StockID stock_id(icons[i].id); factory->add( stock_id, icon_set); Gtk::Stock::add(Gtk::StockItem( stock_id, gettext(icons[i].label))); ++i; } // Add factory to list of factories: factory->add_default(); // register 64x64 pixels icon size Gtk::IconSize::register_new( icon_size_64x64, 64, 64); }