[cairo] Paint from a surface to other doesn't work?
Carlos López González
genetita at gmail.com
Thu Mar 21 13:15:01 PDT 2013
Hi!
I'm absolutely getting crazy and I need someone that give me a clue on this:
In this section of code:
void studio::Widget_NavView::on_finish_render()
{
if(studio::App::navigator_uses_cairo)
{
if(!cairo_surface)
{
synfig::warning("dock_navigator: Bad cairo surface");
return;
}
if(cairo_surface_status(cairo_surface))
return;
Target_Cairo::gamma_filter(cairo_surface);
int w = 0, h = 0;
int dw = cairo_image_surface_get_width(cairo_surface);
int dh = cairo_image_surface_get_height(cairo_surface);
if(cairo_prev)
{
w = cairo_image_surface_get_width(cairo_prev);
h = cairo_image_surface_get_height(cairo_prev);
}
if( w!=dw || h!=dh || !cairo_prev)
{
cairo_prev=cairo_image_surface_create(CAIRO_FORMAT_ARGB32, dw, dh);
}
synfig::info("cairo_surface is mapped %d",
cairo_surface_is_mapped(cairo_surface)); // is not mapped
static int pass2=0;
// Image written to file is correct
cairo_surface_write_to_png(cairo_surface, strprintf(
"dock_navigator_on_finish_render_cairo_surface-pass%d.png", pass2).c_str());
cairo_t* cr=cairo_create(cairo_prev);
cairo_save(cr);
cairo_set_source_surface(cr, cairo_surface, 0, 0);
cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
cairo_paint(cr);
cairo_restore(cr);
cairo_destroy(cr);
cairo_surface_write_to_png(cairo_prev, strprintf(
"dock_navigator_on_finish_render_cairo_prev-pass%d.png", pass2).c_str());
pass2++;
}
}
the written to file images cairo_prev and cairo_surface doesn't coincide,
how's that possible???
In particular cairo_surface is correct (what I expect to be) and cairo_prev
is simply transparent.
If I can write a surface to png correctly, why I can't paint it to other
surface??
Thanks in advance!
--
Carlos
http://synfig.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.cairographics.org/archives/cairo/attachments/20130321/4e5b78fd/attachment.html>
More information about the cairo
mailing list