[Cairo] Image functions
Carl Worth
cworth at east.isi.edu
Wed Oct 15 08:46:33 PDT 2003
On Oct 14, Alexandre Pigolkine wrote:
> I think that cairo_move_to specifies a position on the destination
> surface where to put a bitmap and I am missing a way to
> specify a position on the source surface from where to start.
> Something like:
> copy from source pos xs, ys, width, height to
> destination pos xd,yd.
Ah, I see what you want. And yes, cairo_show_surface is a rather
fixed-purpose convenience function. You can get more general behavior
by instead using cairo_set_pattern followed by cairo_fill.
For example, this function should do something like what you want:
void
show_partial_image (cairo_t *cr, cairo_surface_t *surface,
int x_source, int y_source,
int width, int height,
int x_dest, int y_dest)
{
cairo_move_to (cr, x_dest-x_source, y_dest-y_source);
cairo_set_pattern (cr, surface);
cairo_rectangle (cr, x_dest, y_dest, width, height);
cairo_fill (cr);
}
Even more general effects can be obtained by using
cairo_surface_set_matrix.
-Carl
PS. It may make sense to implement cairo_show_surface with code similar
to the above. This would let us simplify the surface backend interface
by dropping _cairo_surface_composite and instead force all drawing
through _cairo_surface_composite_trapezoids.
More information about the cairo
mailing list