[cairo] unbounded recording surface
vfried at opentext.com
Wed Mar 9 00:44:16 PST 2011
My use case is to determine the size of some rendering and then create an image with the determined size. I thought that unbounded (NULL extents) recording surface is exactly the way to go. A code like below however didn't work. (I think https://bugs.freedesktop.org/show_bug.cgi?id=31657 is related)
recording_surf = cairo_recording_surface_create( CAIRO_CONTENT_COLOR_ALPHA, NULL );
recording_ctx = cairo_create( recording_surf );
cairo_scale( recording_ctx, m_dpi_x_ratio, m_dpi_y_ratio );
...do the rendering...
cairo_recording_surface_ink_extents( recording_surf, &x, &y, &w, &h );
image_surf = cairo_image_surface_create( CAIRO_FORMAT_ARGB32, w, h );
image_ctx = cairo_create( image_surf );
cairo_set_source_surface( image_ctx, recording_surf, x, y );
cairo_paint( image_ctx );
During the paint cairo wanted to create a huge (unbounded) image and it failed. What helped me was the following hack.
rect.x = x;
rect.y = y;
rect.width = w - x; //not sure why there has to be -x and -y
rect.height = h - y;
recording_surf_dummy = cairo_recording_surface_create( CAIRO_CONTENT_COLOR_ALPHA, &rect );
cairo_recording_surface_t* recording_surf_dummy_( (cairo_recording_surface_t*)recording_surf_dummy );
cairo_recording_surface_t* recording_surf_( (cairo_recording_surface_t*)recording_surf );
recording_surf_->extents = recording_surf_dummy_->extents;
recording_surf_->extents_pixels = recording_surf_dummy_->extents_pixels;
recording_surf_->unbounded = recording_surf_dummy_->unbounded;
Still I get some small differences between the replayed output and an output directly to image surface without recording surface (and with some arbitrary hardcoded size).
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the cairo