Signal_draw в Gtkmm2.4

Я пытаюсь скомпилировать приложение gtkmm, которое использует cairomm для рисования. Он отлично компилируется с помощью gtkmm3.0, но когда я пытаюсь скомпилировать его с помощью gtkmm2.4, я получаю:

ошибка: «signal_draw» не был объявлен в этой области

Я использую г++.

Вроде в gtkmm2.4 нет signal_draw (я ошибаюсь?). Есть ли какая-либо функция/сигнал, который можно использовать вместо этого?

Заранее спасибо.

Извините за мой плохой английский.

Некоторый код:

класс egclass: public Gtk::DrawingArea

{

публичный:

например класс();

виртуальный ~egclass();

virtual bool on_draw(const Cairo::RefPtr<Cairo::Context>& cr);

};

эгкласс::эгкласс()

{

#ifndef GLIBMM_DEFAULT_SIGNAL_HANDLERS_ENABLED

signal_draw().connect(sigc::mem_fun(*this, &egclass::on_draw), false);

#endif

}


person tomxey    schedule 08.02.2012    source источник


Ответы (1)


В более старой версии gtkmm 2.4 вместо этого используется on_expose_event:

virtual bool on_expose_event(GdkEventExpose* event);

Если вам нужно создать контекст cairo для рисования, с API GTK+ C это выглядит примерно так:

cairo_t *cr;

cr = gdk_cairo_create (event->window);
gdk_cairo_region (cr, event->region);
cairo_clip (cr);

/* do your drawing */

cairo_destroy (cr);

... перевод приведенного выше фрагмента в gtkmm остается читателю в качестве упражнения.

Также смотрите следующие ссылки:

person kalev    schedule 08.02.2012
comment
Хорошо, но все же мне нужен Cairo::RefPtr‹Cairo::Context› для выполнения рисования, как я могу его получить? - person tomxey; 08.02.2012