2012-02-08 3 views
1

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

error: ‘signal_draw’ was not declared in this scope

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

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

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

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

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

class egclass: public Gtk::DrawingArea

{

public:

egclass();

virtual ~egclass();

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

};

egclass::egclass()

{

#ifndef GLIBMM_DEFAULT_SIGNAL_HANDLERS_ENABLED

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

#endif

}

ответ

3

Старшее gtkmm 2,4 имеет on_expose_event вместо:

virtual bool on_expose_event(GdkEventExpose* event); 

Если вам необходимо создать контекст КАИР для рисования, с 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 оставлен как упражнение для читателя.

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

+0

Ok, но все-таки мне нужно Каир :: RefPtr , чтобы выполнить рисунок, как я могу получить его? – tomxey

+0

Обновлен ответ – kalev

+0

Спасибо, сейчас он работает. – tomxey