我正在寻找一种将一些 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()。
问题是:哪种方式更可取,为什么?或者也许还有其他一些[更好的]方法可以做到这一点?