gtk - 如何在 Gtkmm DrawingArea 中绘制 cairo_surface_t
问题描述
我正在尝试在 Gtkmm DrawingArea 中绘制一个 cairo_surface_t。
cairo_surface_t * 可以用来初始化可以传递给 Cairo::Context::set_source 的 Glib::RefPtr 吗?
#include <gtkmm.h>
class CDrawingArea : Gtk::DrawingArea
{
public:
CDrawingArea();
virtual ~CDrawingArea();
void DrawSurface (cairo_surface_t * surface);
protected:
bool on_draw(const Cairo::RefPtr<Cairo::Context>& cr);
cairo_surface_t * m_surface;
};
#include "CDrawingArea.h"
CDrawingArea::CDrawingArea()
{
}
CDrawingArea::~CDrawingArea()
{
}
void CDrawingArea::DrawSurface (cairo_surface_t * surface)
{
m_surface = surface;
Glib::RefPtr<Gdk::Window> win = get_window();
if (win)
{
Gdk::Rectangle r(0, 0, get_allocation().get_width(), get_allocation().get_height());
win->invalidate_rect(r, false);
}
}
bool CDrawingArea::on_draw(const Cairo::RefPtr<Cairo::Context>& cr)
{
// Cairo::RefPtr<Cairo::Surface> refSurface ??;
// cr->set_source(refSurface, 0, 0);
cr->paint();
}
解决方案
您在寻找 的构造函数Surface
吗?
Cairo::Surface::Surface ( cairo_surface_t * cobject,
bool has_reference = false
) [explicit]
Create a C++ wrapper for the C instance.
This C++ instance should then be given to a RefPtr.
(复制和粘贴破坏了格式,抱歉) https://cairographics.org/documentation/cairomm/reference/classCairo_1_1Surface.html#a47b90669a5a85d187cc0d28dc99915c8
推荐阅读
- python - 我希望它打印 hello_ch 变量但我找不到这样做的方法 中文翻译工具
- javascript - 无法在 document.write 中获取脚本源
- python - matplotlib 等高线图颜色条
- c# - 即使在客户端 ShutDown() 之后,Socket.Receive 也会阻塞
- css - 如何在 CSS 中将图像不透明度与 nth-child 或 nth-of-type 结合使用?
- java - 在按钮上单击它会更新第二个活动微调器和文本视图
- pandas - 带有熊猫系列的matplotlib双条形图
- docker - Dockerfile - 从 .sh 脚本的输出设置 ENV 变量
- python-3.x - 如何使输入张量可训练
- php - 如何在 PHP 中的 JSON API 帖子中“包含”?