2012-10-15 6 views
3

나는 gtkmm3을 사용하여 drag'n'drop 아이콘 이미지에서 나중에 사용하기 위해 pixbuf에 일부 gtk 위젯 컨테이너를 렌더링하는 방법을 설명합니다.gtk_widget_draw() 대신에 gtkmm3에 대한

네이티브 gtk3에서 올바른 방법은, 내가 연구 한 것처럼, 제공된 카이로 표면에 gtk_widget_draw()를 사용하는 것이다.

이 표면의 생성은 문제가되지 않지만 gtk_widget_draw()에 대한 호출은 문제가되지 않습니다.

gtkmm-3.4.2 소스에서 직접 언급 한 장소는 Gtk :: Widget :: draw() 함수 (widget.cc:310)이며 'protected'로 선언되어 있습니다.

내 질문은 : 어떻게 제대로 gtkmm3에서 (위젯을 pixbuf 렌더링) 같은 작업을 수행합니까?

  • 서브 클래스은 Gtk :: 위젯 보호 무승부에 공용 인터페이스를 제공하기 위해() 함수

  • 추출 gobj *은 Gtk에서 예 : 위젯과 전화 :이 시점에서

    내가 두 가지 옵션 참조 이 인스턴스에서 네이티브 Gtk의 gtk_widget_draw().

질문은 : 어떤 방법이 바람직하며 그 이유는 무엇입니까? 아니면 그것을 할 수있는 다른 [더 나은] 방법이 있을까요?

답변

2

당신은 docs에서, 위젯의 pixbuf를 수집하는 GtkOffscreenWindow을 사용할 수

아이디어는 위젯을하는 것입니다 및 수동의 상태를 설정, OffscreenWindow에 을 추가하고 스냅 샷을 Gdk :: Pixbuf로 검색하십시오.

및 기능 :

Glib::RefPtr<Gdk::Pixbuf> Gtk::OffscreenWindow::get_pixbuf (  ) 
Retrieves a snapshot of the contained widget in the form of a Gdk::Pixbuf. 

당신은 또한이 관련 질문에서, 몇 가지 예제 코드 (파이썬) 및 추가 팁을 수집 할 수 있습니다 :

How to draw any GTK widget on top of Cairo surface