3

我正在寻找一种将一些 gtk 小部件容器渲染到 pixbuf 以供以后使用 gtkmm3 拖放图标图像的方法。

据我研究,在本机 gtk3 中执行此操作的正确方法是 - 在提供的 cairo 表面上使用 gtk_widget_draw()。

这个表面的创建不是问题,但是调用 gtk_widget_draw() 本身就是问题。

只有在 gtkmm-3.4.2 源代码中直接提到的地方是 Gtk::Widget::draw() 函数 (widget.cc:310),它被声明为“受保护”。

所以我的问题是:我如何在 gtkmm3 中正确执行这样的任务(将小部件渲染到 pixbuf)?

在这一点上,我看到两个选项:

  • 子类 Gtk::Widget 为受保护的 draw() 函数提供公共接口

  • 从 Gtk::Widget 中提取 gobj* 实例并在该实例上调用原生 Gtk 的 gtk_widget_draw()。

问题是:哪种方式更可取,为什么?或者也许还有其他一些[更好的]方法可以做到这一点?

4

1 回答 1

2

您可以使用 aGtkOffscreenWindow文档中收集小部件的 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 中)和额外提示:

如何在 Cairo 表面上绘制任何 GTK 小部件

于 2012-10-15T21:31:25.733 回答