gpt4 book ai didi

c++ - gtk_widget_draw() 替代 gtkmm3

转载 作者:太空狗 更新时间:2023-10-29 21:47:34 26 4
gpt4 key购买 nike

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

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

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

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

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

此时我看到两个选项:

  • 子类 Gtk::Widget 为 protected draw() 函数提供公共(public)接口(interface)

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

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

最佳答案

您可以使用GtkOffscreenWindowdocs 中收集您的小部件的pixbuf。 :

The idea is to take a widget and manually set the state of it, add it to an OffscreenWindow and then retrieve the snapshot as a 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 中)和额外的提示:

How to draw any GTK widget on top of Cairo surface

关于c++ - gtk_widget_draw() 替代 gtkmm3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12903736/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com