我正在寻找一种方法,将一些gtk小部件容器渲染到pixbuf,以便以后使用gtkmm3在drag'n'drop图标图像中使用。
正如我所研究的那样,在本机gtk3中执行此操作的正确方法是在所提供的cairo表面上使用gtk_widget_draw()。
创建这个表面不是问题,但是对gtk_widget_draw()本身的调用是。
只有在gtkmm-3.4.2源代码中直接提到的地方是Gtk :: Widget :: draw()函数(widget.cc:310),它被声明为“protected”。
所以我的问题是:如何在gtkmm3中正确执行这样的任务(将小部件渲染到pixbuf)?
此时我看到两个选项:
子类Gtk :: Widget为受保护的draw()函数提供公共接口
从Gtk :: Widget中提取gobj *实例,并在此实例上调用本机Gtk的gtk_widget_draw()。
问题是:哪种方式更可取,为什么?或者也许有其他[更好]的方法来做到这一点?
答案 0 :(得分:2)
您可以使用GtkOffscreenWindow
从docs收集小部件的pixbuf:
我们的想法是获取一个小部件并手动设置它的状态,然后添加它 到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.
您还可以从这个相关问题中收集一些示例代码(在python中)和其他提示: