如何在 Gtkmm DrawingArea 中绘制 cairo_surface_t
Posted
技术标签:
【中文标题】如何在 Gtkmm DrawingArea 中绘制 cairo_surface_t【英文标题】:How to draw a cairo_surface_t in a Gtkmm DrawingArea 【发布时间】:2019-06-01 15:56:13 【问题描述】:我正在尝试在 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();
【问题讨论】:
【参考方案1】:你在找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
【讨论】:
我仍然不清楚如何使用它......当Surface被破坏时,正在传递的cobject会被破坏吗?以上是关于如何在 Gtkmm DrawingArea 中绘制 cairo_surface_t的主要内容,如果未能解决你的问题,请参考以下文章
从opencv读取时gtkmm DrawingArea分段错误