2012-10-15 31 views
3

我lookng渲染一些GTK控件容器的pixbuf使用gtkmm3在拖放圖標圖像後使用的一種方式。gtk_widget_draw()替代了gtkmm3

在本地gtk3做,這是正確的做法,據我研究, - 對提供開羅表面gtk_widget_draw()的使用。

這個表面的創作是不是一個問題,但是調用gtk_widget_draw()本身。

它直接的gtkmm-3.4.2源提到的地方是基於GTK ::控件:: draw()函數(widget.cc:310),它被聲明爲'保護」。

所以我的問題是:我如何正確地執行這樣的任務(渲染小部件的pixbuf)在gtkmm3?

在這一點上,我看到兩個選項:

  • 子類的Gtk ::小部件提供公共接口,以保護draw()函數

  • 提取gobj *例如,從基於GTK控件::和呼叫本地Gtk的gtk_widget_draw()在這個實例上。

問題是:哪種方式更可取,爲什麼?或者也許還有其他[更好]的方法來做到這一點?

回答

2

你可以使用一個GtkOffscreenWindow來收集你的widget的pixbuf的,從docs

的想法是把一個小部件和手動設置它的狀態,將其添加 到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