Как нарисовать cairo_surface_t в Gtkmm DrawingArea - PullRequest
0 голосов
/ 01 июня 2019

Я пытаюсь нарисовать cairo_surface_t в Gtkmm DrawingArea.

Можно ли использовать cairo_surface_t * для инициализации Glib :: RefPtr, который можно передать в Cairo :: Context :: set_source?

#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 Ответ

1 голос
/ 02 июня 2019

Вы ищете конструктора 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

...