Сохранение чертежей в gtkmm с использованием queue_draw

Я хочу нарисовать несколько объектов в области рисования. Фон окрашивается каждый раз, когда вызывается функция queue_draw.

bool DrawingArea::on_draw(const Cairo::RefPtr<Cairo::Context>& cr)
{
cr->set_source_rgb(1.0, 1.0, 1.0);   // white background
cr->paint();

cr->set_line_width(2.0);

if(entity == 1)  // draw point
{
cr->set_source_rgb(0.0, 0.26, 0.26);
cr->save();
cr->arc(205.0, 110.0, 1.0, 0.0, 2 * M_PI); // full circle        
cr->restore();  
cr->stroke();
}

if(entity == 2)  // draw line
{
cr->set_source_rgb(0.0, 0.26, 0.26);
cr->save();
cr->move_to(0,0);
cr->line_to(100,100);
cr->restore();  
cr->stroke();
}
    return true;
}

Приведенный выше код работает, когда вызывается функция queue_draw в следующем коде:

void DrawingArea :: on_point_cb()
{
entity = 1;
queue_draw();
std::cout<<"Point created"<<std::endl;
}

Когда новая сущность выбрана для рисования, предыдущая стирается. Что нужно сделать, чтобы предыдущая сущность сохранилась?

0 ответов

Вместо того, чтобы рисовать на экране события перерисовки, рисуйте вместо поверхности и держите эту поверхность вокруг.

Когда вызывается функция on_draw, просто перекрасьте сохраненную поверхность, чтобы вы решили, что сохраняется, а что нет.

Рисование на сохраненную поверхность сохранит изменения при перерисовке, тогда как рисование на поверхность Каира, предоставленное вам внутри функции on_draw, всегда будет стираться между вызовами.

Надеюсь, это поможет, я знаю, что это старый вопрос.

Другие вопросы по тегам