2012-10-18 2 views
1

버튼, 툴바 등을 만들려는 작은 응용 프로그램이 있지만 기존 GTK 아이콘 테마를 사용하고 싶지는 않습니다. 내 자신을 만들고 싶습니다. 그래서 자습서와 기타 등등을 찾았지만, 밝혀진 바에 따라 온라인에서 잘 논의되지 않았습니다. 그래서 난 내 스스로 뭔가를 시도 :Gtkmm에서 사용자 지정 IconFactory 만들기

헤더 파일 :

#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(); 
} 

하지만 지금 난 정말 호출하는 방법을 모르기 때문에, 꽤 붙어 내가 만든이 새로운 아이콘. 위의 작성된 코드가 실제로 아이콘을 찾을 수 있는지 없는지 나는 또한 알지 못합니다.

답변

1

아이콘 공장을 만들었습니다 ... 공장? 당신이 Gtk::IconFactory을 필요로하지 않는 것이

;-)

질문에 대한 심각한 대답은. 불행히도 GTK 2 문서는 불필요하다고 말하지 않습니다. 당신이 필요로하는 것은 freedesktop.org Standard Icon Naming Specification입니다. 아이콘을 만들고, 간단한 이름을 지정하고, 거기에 설명 된 디렉토리 구조에 따라 구성하고, 적절한 위치에 설치하고 기능을 사용하여 Pixbuf 또는 Image을 만들 때 아이콘이 "그냥 작동합니다". 여기에 (example: Gtk::Image::set_from_icon_name())

은 자신의 아이콘 제공하는 방법에 그놈 개발자 위키에서 페이지입니다 : http://developer.gnome.org/integration-guide/stable/icons.html.en

는 그리고 여기에 내가 정의 아이콘 설치에 대한 쓴 튜토리얼 페이지입니다 : http://ptomato.name/advanced-gtk-techniques/html/desktop-file.html

+0

I을 솔직히 말해서 당신의 대답을 이해하지 못했습니다. 물론 주식 아이콘이 내가 원했던 것이면이 모든 문제를 해결하지 못할 것이다. 나는 내 자신의 이름으로 자신의 주식을 만들어야합니다. 인기있는 아이콘 세트가 필요를 충족시키지 않는 특수 용도의 응용 프로그램입니다. –

+0

Gnome "open", "close"등의 아이콘을 "open", "close"아이콘으로 바꾸시겠습니까? 또는 자신 만의 아이콘을 만들고 싶습니다. 응용 프로그램에서 동작을 나타내는 "floop"및 "greeble"? – ptomato

+0

후자의 것 :) 그리고 나는 내가 GTK3를 사용하고 있다고 언급하는 것을 잊었다 고 생각한다. CSS를 사용하여 버튼의 스타일을 지정할 수없는 이유는 버튼의 이름을 지정하지 않고 주식 매크로와 표준 GTK 응답으로 버튼을 만들었 기 때문입니다. 그러나 그것은 테스트 용이었습니다. 이제 표준 아이콘 세트에서 다루지 않는 전문화 된 아이콘을 만들어야합니다. –