【发布时间】:2012-10-16 05:31:25
【问题描述】:
我正在寻找一种将 gtk 小部件容器渲染到 pixbuf 的方法,以便以后使用 gtkmm3 拖放图标图像。
据我研究,在本机 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()。
问题是:哪种方式更可取,为什么?或者也许还有其他一些[更好的]方法可以做到这一点?
【问题讨论】: